Index: tests/THashCache.cpp |
diff --git a/tests/THashCache.cpp b/tests/THashCache.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7797431553b078c455460a90fb0a77814a047709 |
--- /dev/null |
+++ b/tests/THashCache.cpp |
@@ -0,0 +1,91 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "Test.h" |
+#include "SkTHashCache.h" |
+ |
+ |
+// Tests the SkTHashCache<T> class template. |
+ |
+struct Tint { |
+ uint32_t value; |
+ |
+ bool operator==(const Tint& rhs) const { |
+ return value == rhs.value; |
+ } |
+}; |
+ |
+class Element { |
+public: |
+ |
+ bool operator==(const Element& rhs) const { |
+ return value == rhs.value && key == rhs.key; |
+ } |
+ |
+ static const Tint& GetKey(const Element& element) { |
+ return element.key; |
+ } |
+ |
+ static uint32_t Hash(const Tint& key) { |
+ return key.value; |
+ } |
+ |
+ Element(Tint key, int value) : key(key), value(value) { |
+ } |
+ |
+ Tint key; |
+ int value; |
+}; |
+ |
+typedef SkTHashCache<Element, Tint> CacheType; |
+ |
+DEF_TEST(THashCache, reporter) { |
+ Tint k11 = {11}; |
+ Element e11(k11, 22); |
+ |
+ e11.value = e11.value; |
+ Element e11Collision(k11, 0); |
+ // Element e42(4, 2); |
+ |
+ //Some tests for the class Element |
+ REPORTER_ASSERT(reporter, Element::GetKey(e11) == k11); |
+ REPORTER_ASSERT(reporter, Element::Hash(k11) == 11); |
+ |
+ CacheType cache; |
+ |
+ // Is the cahce correctly initialized ? |
+ REPORTER_ASSERT(reporter, 0 == cache.size()); |
+ REPORTER_ASSERT(reporter, NULL == cache.find(k11)); |
+ |
+ Element& e11_c = cache.add(e11); |
+ e11_c.value = e11_c.value; |
+ |
+ // Tests for simple insertion, verifying that the returned element |
+ // has the same values as the original one |
+ REPORTER_ASSERT(reporter, 1 == cache.size()); |
+ REPORTER_ASSERT(reporter, NULL != cache.find(k11)); |
+ REPORTER_ASSERT(reporter, e11_c == e11); |
+ |
+ Element& e11Collision_c = cache.add(e11Collision); |
+ // Verifying that, in case of collision, the element alerady in the cache is not removed |
+ REPORTER_ASSERT(reporter, e11Collision_c == e11); |
+ REPORTER_ASSERT(reporter, 1 == cache.size()); |
+ |
+ Tint k42 = {42}; |
+ Element e42(k42, 2); |
+ cache.add(e42); |
+ // Can we add more than one element? |
+ REPORTER_ASSERT(reporter, NULL != cache.find(k11)); |
+ REPORTER_ASSERT(reporter, NULL != cache.find(k42)); |
+ REPORTER_ASSERT(reporter, 2 == cache.size()); |
+ |
+ cache.reset(); |
+ // Does clear do its job? |
+ REPORTER_ASSERT(reporter, 0 == cache.size()); |
+ REPORTER_ASSERT(reporter, NULL == cache.find(k11)); |
+ REPORTER_ASSERT(reporter, NULL == cache.find(k42)); |
+} |