| 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 |