OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #include "Test.h" | 7 #include "Test.h" |
8 #include "SkTSet.h" | 8 #include "SkTSet.h" |
9 | 9 |
10 // Tests the SkTSet<T> class template. | 10 // Tests the SkTSet<T> class template. |
(...skipping 23 matching lines...) Expand all Loading... |
34 | 34 |
35 #define COUNT 1732 | 35 #define COUNT 1732 |
36 #define PRIME1 10007 | 36 #define PRIME1 10007 |
37 #define PRIME2 1733 | 37 #define PRIME2 1733 |
38 | 38 |
39 // Generates a series of positive unique pseudo-random numbers. | 39 // Generates a series of positive unique pseudo-random numbers. |
40 static int f(int i) { | 40 static int f(int i) { |
41 return (long(i) * PRIME1) % PRIME2; | 41 return (long(i) * PRIME1) % PRIME2; |
42 } | 42 } |
43 | 43 |
44 // Will expose contains() and find() too. | 44 // Will expose contains() too. |
45 static void TestTSet_advanced(skiatest::Reporter* reporter) { | 45 static void TestTSet_advanced(skiatest::Reporter* reporter) { |
46 SkTSet<int> set0; | 46 SkTSet<int> set0; |
47 | 47 |
48 for (int i = 0; i < COUNT; i++) { | 48 for (int i = 0; i < COUNT; i++) { |
49 REPORTER_ASSERT(reporter, !set0.contains(f(i))); | 49 REPORTER_ASSERT(reporter, !set0.contains(f(i))); |
50 if (i > 0) { | 50 if (i > 0) { |
51 REPORTER_ASSERT(reporter, set0.contains(f(0))); | 51 REPORTER_ASSERT(reporter, set0.contains(f(0))); |
52 REPORTER_ASSERT(reporter, set0.contains(f(i / 2))); | 52 REPORTER_ASSERT(reporter, set0.contains(f(i / 2))); |
53 REPORTER_ASSERT(reporter, set0.contains(f(i - 1))); | 53 REPORTER_ASSERT(reporter, set0.contains(f(i - 1))); |
54 } | 54 } |
55 REPORTER_ASSERT(reporter, !set0.contains(f(i))); | 55 REPORTER_ASSERT(reporter, !set0.contains(f(i))); |
56 REPORTER_ASSERT(reporter, set0.count() == i); | 56 REPORTER_ASSERT(reporter, set0.count() == i); |
57 REPORTER_ASSERT(reporter, set0.add(f(i))); | 57 REPORTER_ASSERT(reporter, set0.add(f(i))); |
58 REPORTER_ASSERT(reporter, set0.contains(f(i))); | 58 REPORTER_ASSERT(reporter, set0.contains(f(i))); |
59 REPORTER_ASSERT(reporter, set0.count() == i + 1); | 59 REPORTER_ASSERT(reporter, set0.count() == i + 1); |
60 REPORTER_ASSERT(reporter, !set0.add(f(i))); | 60 REPORTER_ASSERT(reporter, !set0.add(f(i))); |
61 } | 61 } |
62 | 62 |
| 63 // Test deterministic output |
| 64 for (int i = 0; i < COUNT; i++) { |
| 65 REPORTER_ASSERT(reporter, set0[i] == f(i)); |
| 66 } |
| 67 |
63 // Test copy constructor too. | 68 // Test copy constructor too. |
64 SkTSet<int> set1 = set0; | 69 SkTSet<int> set1 = set0; |
65 | 70 |
66 REPORTER_ASSERT(reporter, set0.count() == set1.count()); | 71 REPORTER_ASSERT(reporter, set0.count() == set1.count()); |
67 REPORTER_ASSERT(reporter, !set1.contains(-1000)); | 72 REPORTER_ASSERT(reporter, !set1.contains(-1000)); |
68 | 73 |
69 for (int i = 0; i < COUNT; i++) { | 74 for (int i = 0; i < COUNT; i++) { |
70 REPORTER_ASSERT(reporter, set1.contains(f(i))); | 75 REPORTER_ASSERT(reporter, set1.contains(f(i))); |
| 76 REPORTER_ASSERT(reporter, set1[i] == f(i)); |
71 } | 77 } |
72 | 78 |
73 // Test operator= too. | 79 // Test operator= too. |
74 SkTSet<int> set2; | 80 SkTSet<int> set2; |
75 set2 = set0; | 81 set2 = set0; |
76 | 82 |
77 REPORTER_ASSERT(reporter, set0.count() == set2.count()); | 83 REPORTER_ASSERT(reporter, set0.count() == set2.count()); |
78 REPORTER_ASSERT(reporter, !set2.contains(-1000)); | 84 REPORTER_ASSERT(reporter, !set2.contains(-1000)); |
79 | 85 |
80 for (int i = 0; i < COUNT; i++) { | 86 for (int i = 0; i < COUNT; i++) { |
81 REPORTER_ASSERT(reporter, set2.contains(f(i))); | 87 REPORTER_ASSERT(reporter, set2.contains(f(i))); |
| 88 REPORTER_ASSERT(reporter, set2[i] == f(i)); |
82 } | 89 } |
83 | 90 |
84 #ifdef SK_DEBUG | 91 #ifdef SK_DEBUG |
85 set0.validate(); | 92 set0.validate(); |
86 set1.validate(); | 93 set1.validate(); |
87 set2.validate(); | 94 set2.validate(); |
88 #endif | 95 #endif |
89 } | 96 } |
90 | 97 |
91 static void TestTSet_merge(skiatest::Reporter* reporter) { | 98 static void TestTSet_merge(skiatest::Reporter* reporter) { |
92 SkTSet<int> set; | 99 SkTSet<int> set; |
93 SkTSet<int> setOdd; | 100 SkTSet<int> setOdd; |
94 | 101 |
95 for (int i = 0; i < COUNT; i++) { | 102 for (int i = 0; i < COUNT; i++) { |
96 REPORTER_ASSERT(reporter, set.add(2 * i)); | 103 REPORTER_ASSERT(reporter, set.add(2 * i)); |
97 REPORTER_ASSERT(reporter, setOdd.add(2 * i + 1)); | 104 REPORTER_ASSERT(reporter, setOdd.add(2 * i + 1)); |
98 } | 105 } |
99 // mergeInto returns the number of duplicates. Expected 0. | 106 // mergeInto returns the number of duplicates. Expected 0. |
100 REPORTER_ASSERT(reporter, set.mergeInto(setOdd) == 0); | 107 REPORTER_ASSERT(reporter, set.mergeInto(setOdd) == 0); |
101 REPORTER_ASSERT(reporter, set.count() == 2 * COUNT); | 108 REPORTER_ASSERT(reporter, set.count() == 2 * COUNT); |
102 | 109 |
103 // mergeInto should now find all new numbers duplicate. | 110 // mergeInto should now find all new numbers duplicate. |
104 REPORTER_ASSERT(reporter, set.mergeInto(setOdd) == setOdd.count()); | 111 REPORTER_ASSERT(reporter, set.mergeInto(setOdd) == setOdd.count()); |
105 REPORTER_ASSERT(reporter, set.count() == 2 * COUNT); | 112 REPORTER_ASSERT(reporter, set.count() == 2 * COUNT); |
106 | 113 |
107 for (int i = 0; i < 2 * COUNT; i++) { | 114 for (int i = 0; i < 2 * COUNT; i++) { |
108 REPORTER_ASSERT(reporter, set.contains(i)); | 115 REPORTER_ASSERT(reporter, set.contains(i)); |
109 } | 116 } |
110 | 117 |
| 118 // check deterministic output |
| 119 for (int i = 0; i < COUNT; i++) { |
| 120 REPORTER_ASSERT(reporter, set[i] == 2 * i); |
| 121 REPORTER_ASSERT(reporter, set[COUNT + i] == 2 * i + 1); |
| 122 } |
| 123 |
111 #ifdef SK_DEBUG | 124 #ifdef SK_DEBUG |
112 set.validate(); | 125 set.validate(); |
113 setOdd.validate(); | 126 setOdd.validate(); |
114 #endif | 127 #endif |
115 } | 128 } |
116 | 129 |
117 static void TestTSet(skiatest::Reporter* reporter) { | 130 static void TestTSet(skiatest::Reporter* reporter) { |
118 TestTSet_basic(reporter); | 131 TestTSet_basic(reporter); |
119 TestTSet_advanced(reporter); | 132 TestTSet_advanced(reporter); |
120 TestTSet_merge(reporter); | 133 TestTSet_merge(reporter); |
121 } | 134 } |
122 | 135 |
123 #include "TestClassDef.h" | 136 #include "TestClassDef.h" |
124 DEFINE_TESTCLASS("TSet", TSetTest, TestTSet) | 137 DEFINE_TESTCLASS("TSet", TSetTest, TestTSet) |
OLD | NEW |