OLD | NEW |
1 #include "SkChecksum.h" | 1 #include "SkChecksum.h" |
2 #include "SkString.h" | 2 #include "SkString.h" |
3 #include "SkTHash.h" | 3 #include "SkTHash.h" |
4 #include "Test.h" | 4 #include "Test.h" |
5 | 5 |
6 namespace { uint32_t hash_int(int k) { return SkChecksum::Mix(k); } } | 6 namespace { uint32_t hash_int(const int& k) { return SkChecksum::Mix(k); } } |
7 | 7 |
8 static void set_negative_key(int key, double* d) { *d = -key; } | 8 static void set_negative_key(int key, double* d) { *d = -key; } |
9 | 9 |
10 DEF_TEST(HashMap, r) { | 10 DEF_TEST(HashMap, r) { |
11 SkTHashMap<int, double, hash_int> map; | 11 SkTHashMap<int, double, hash_int> map; |
12 | 12 |
13 map.set(3, 4.0); | 13 map.set(3, 4.0); |
14 REPORTER_ASSERT(r, map.count() == 1); | 14 REPORTER_ASSERT(r, map.count() == 1); |
15 | 15 |
16 double* found = map.find(3); | 16 double* found = map.find(3); |
(...skipping 17 matching lines...) Expand all Loading... |
34 REPORTER_ASSERT(r, found); | 34 REPORTER_ASSERT(r, found); |
35 REPORTER_ASSERT(r, *found == i*2.0); | 35 REPORTER_ASSERT(r, *found == i*2.0); |
36 } | 36 } |
37 for (int i = N; i < 2*N; i++) { | 37 for (int i = N; i < 2*N; i++) { |
38 REPORTER_ASSERT(r, !map.find(i)); | 38 REPORTER_ASSERT(r, !map.find(i)); |
39 } | 39 } |
40 | 40 |
41 REPORTER_ASSERT(r, map.count() == N); | 41 REPORTER_ASSERT(r, map.count() == N); |
42 } | 42 } |
43 | 43 |
44 namespace { uint32_t hash_string(SkString s) { return (uint32_t)s.size(); } } | 44 namespace { uint32_t hash_string(const SkString& s) { return SkToInt(s.size());
} } |
45 | 45 |
46 DEF_TEST(HashSet, r) { | 46 DEF_TEST(HashSet, r) { |
47 SkTHashSet<SkString, hash_string> set; | 47 SkTHashSet<SkString, hash_string> set; |
48 | 48 |
49 set.add(SkString("Hello")); | 49 set.add(SkString("Hello")); |
50 set.add(SkString("World")); | 50 set.add(SkString("World")); |
51 | 51 |
52 REPORTER_ASSERT(r, set.count() == 2); | 52 REPORTER_ASSERT(r, set.count() == 2); |
53 | 53 |
54 REPORTER_ASSERT(r, set.contains(SkString("Hello"))); | 54 REPORTER_ASSERT(r, set.contains(SkString("Hello"))); |
55 REPORTER_ASSERT(r, set.contains(SkString("World"))); | 55 REPORTER_ASSERT(r, set.contains(SkString("World"))); |
56 REPORTER_ASSERT(r, !set.contains(SkString("Goodbye"))); | 56 REPORTER_ASSERT(r, !set.contains(SkString("Goodbye"))); |
57 } | 57 } |
| 58 |
| 59 namespace { |
| 60 |
| 61 class CopyCounter { |
| 62 public: |
| 63 CopyCounter() : fID(0), fCounter(NULL) {} |
| 64 |
| 65 CopyCounter(uint32_t id, uint32_t* counter) : fID(id), fCounter(counter) {} |
| 66 |
| 67 CopyCounter(const CopyCounter& other) |
| 68 : fID(other.fID) |
| 69 , fCounter(other.fCounter) { |
| 70 SkASSERT(fCounter); |
| 71 *fCounter += 1; |
| 72 } |
| 73 |
| 74 void operator=(const CopyCounter& other) { |
| 75 fID = other.fID; |
| 76 fCounter = other.fCounter; |
| 77 *fCounter += 1; |
| 78 } |
| 79 |
| 80 bool operator==(const CopyCounter& other) const { |
| 81 return fID == other.fID; |
| 82 } |
| 83 |
| 84 private: |
| 85 uint32_t fID; |
| 86 uint32_t* fCounter; |
| 87 }; |
| 88 |
| 89 uint32_t hash_copy_counter(const CopyCounter&) { |
| 90 return 0; // let them collide, what do we care? |
| 91 } |
| 92 |
| 93 } |
| 94 |
| 95 DEF_TEST(HashSetCopyCounter, r) { |
| 96 SkTHashSet<CopyCounter, hash_copy_counter> set; |
| 97 |
| 98 uint32_t globalCounter = 0; |
| 99 CopyCounter copyCounter1(1, &globalCounter); |
| 100 CopyCounter copyCounter2(2, &globalCounter); |
| 101 REPORTER_ASSERT(r, globalCounter == 0); |
| 102 |
| 103 set.add(copyCounter1); |
| 104 REPORTER_ASSERT(r, globalCounter == 1); |
| 105 REPORTER_ASSERT(r, set.contains(copyCounter1)); |
| 106 REPORTER_ASSERT(r, globalCounter == 1); |
| 107 set.add(copyCounter1); |
| 108 // We allow copies for same-value adds for now. |
| 109 REPORTER_ASSERT(r, globalCounter == 2); |
| 110 |
| 111 set.add(copyCounter2); |
| 112 REPORTER_ASSERT(r, globalCounter == 3); |
| 113 REPORTER_ASSERT(r, set.contains(copyCounter1)); |
| 114 REPORTER_ASSERT(r, set.contains(copyCounter2)); |
| 115 REPORTER_ASSERT(r, globalCounter == 3); |
| 116 set.add(copyCounter1); |
| 117 set.add(copyCounter2); |
| 118 // We allow copies for same-value adds for now. |
| 119 REPORTER_ASSERT(r, globalCounter == 5); |
| 120 } |
OLD | NEW |