Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1023)

Side by Side Diff: tests/HashTest.cpp

Issue 919193002: Minimize SkTHash object copying (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: relaxed same-val copy expectations Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkTHash.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « src/core/SkTHash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698