Index: tests/HashTest.cpp |
diff --git a/tests/HashTest.cpp b/tests/HashTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..24032a5ec5652dc6f3d150fe175414b24af1f72a |
--- /dev/null |
+++ b/tests/HashTest.cpp |
@@ -0,0 +1,57 @@ |
+#include "SkChecksum.h" |
+#include "SkString.h" |
+#include "SkTHash.h" |
+#include "Test.h" |
+ |
+namespace { uint32_t hash_int(int k) { return SkChecksum::Mix(k); } } |
+ |
+static void set_negative_key(int key, double* d) { *d = -key; } |
+ |
+DEF_TEST(HashMap, r) { |
+ SkTHashMap<int, double, hash_int> map; |
+ |
+ map.set(3, 4.0); |
+ REPORTER_ASSERT(r, map.count() == 1); |
+ |
+ double* found = map.find(3); |
+ REPORTER_ASSERT(r, found); |
+ REPORTER_ASSERT(r, *found == 4.0); |
+ |
+ map.foreach(set_negative_key); |
+ found = map.find(3); |
+ REPORTER_ASSERT(r, found); |
+ REPORTER_ASSERT(r, *found == -3.0); |
+ |
+ REPORTER_ASSERT(r, !map.find(2)); |
+ |
+ const int N = 20; |
+ |
+ for (int i = 0; i < N; i++) { |
+ map.set(i, 2.0*i); |
+ } |
+ for (int i = 0; i < N; i++) { |
+ double* found = map.find(i);; |
+ REPORTER_ASSERT(r, found); |
+ REPORTER_ASSERT(r, *found == i*2.0); |
+ } |
+ for (int i = N; i < 2*N; i++) { |
+ REPORTER_ASSERT(r, !map.find(i)); |
+ } |
+ |
+ REPORTER_ASSERT(r, map.count() == N); |
+} |
+ |
+namespace { uint32_t hash_string(SkString s) { return s.size(); } } |
+ |
+DEF_TEST(HashSet, r) { |
+ SkTHashSet<SkString, hash_string> set; |
+ |
+ set.add(SkString("Hello")); |
+ set.add(SkString("World")); |
+ |
+ REPORTER_ASSERT(r, set.count() == 2); |
+ |
+ REPORTER_ASSERT(r, set.contains(SkString("Hello"))); |
+ REPORTER_ASSERT(r, set.contains(SkString("World"))); |
+ REPORTER_ASSERT(r, !set.contains(SkString("Goodbye"))); |
+} |