Index: third_party/grpc/test/core/support/murmur_hash_test.c |
diff --git a/third_party/WebKit/Source/core/layout/OrderIterator.cpp b/third_party/grpc/test/core/support/murmur_hash_test.c |
similarity index 51% |
copy from third_party/WebKit/Source/core/layout/OrderIterator.cpp |
copy to third_party/grpc/test/core/support/murmur_hash_test.c |
index 8813561b862d5882183732d768d453e309737a4f..562b9567e719f05161d8247ea63202106c35aa93 100644 |
--- a/third_party/WebKit/Source/core/layout/OrderIterator.cpp |
+++ b/third_party/grpc/test/core/support/murmur_hash_test.c |
@@ -1,5 +1,7 @@ |
/* |
- * Copyright (C) 2011 Google Inc. All rights reserved. |
+ * |
+ * Copyright 2015, Google Inc. |
+ * All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are |
@@ -26,66 +28,61 @@ |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ * |
*/ |
-#include "core/layout/OrderIterator.h" |
+#include "src/core/support/murmur_hash.h" |
+#include <grpc/support/log.h> |
+#include <grpc/support/string_util.h> |
+#include "test/core/util/test_config.h" |
-#include "core/layout/LayoutBox.h" |
+#include <string.h> |
-namespace blink { |
+typedef uint32_t (*hash_func)(const void *key, size_t len, uint32_t seed); |
-OrderIterator::OrderIterator(const LayoutBox* containerBox) |
- : m_containerBox(containerBox) |
- , m_currentChild(nullptr) |
- , m_isReset(false) |
-{ |
-} |
+/* From smhasher: |
+ This should hopefully be a thorough and uambiguous test of whether a hash |
+ is correctly implemented on a given platform */ |
-LayoutBox* OrderIterator::first() |
-{ |
- reset(); |
- return next(); |
-} |
+static void verification_test(hash_func hash, uint32_t expected) { |
+ uint8_t key[256]; |
+ uint32_t hashes[256]; |
+ uint32_t final = 0; |
+ size_t i; |
-LayoutBox* OrderIterator::next() |
-{ |
- do { |
- if (!m_currentChild) { |
- if (m_orderValuesIterator == m_orderValues.end()) |
- return nullptr; |
+ memset(key, 0, sizeof(key)); |
+ memset(hashes, 0, sizeof(hashes)); |
- if (!m_isReset) { |
- ++m_orderValuesIterator; |
- if (m_orderValuesIterator == m_orderValues.end()) |
- return nullptr; |
- } else { |
- m_isReset = false; |
- } |
+ /* Hash keys of the form {0}, {0,1}, {0,1,2}... up to N=255,using 256-N as |
+ the seed */ |
- m_currentChild = m_containerBox->firstChildBox(); |
- } else { |
- m_currentChild = m_currentChild->nextSiblingBox(); |
- } |
- } while (!m_currentChild || m_currentChild->style()->order() != *m_orderValuesIterator); |
+ for (i = 0; i < 256; i++) { |
+ key[i] = (uint8_t)i; |
+ hashes[i] = hash(key, i, (uint32_t)(256u - i)); |
+ } |
- return m_currentChild; |
-} |
+ /* Then hash the result array */ |
-void OrderIterator::reset() |
-{ |
- m_currentChild = nullptr; |
- m_orderValuesIterator = m_orderValues.begin(); |
- m_isReset = true; |
-} |
+ final = hash(hashes, sizeof(hashes), 0); |
-OrderIteratorPopulator::~OrderIteratorPopulator() |
-{ |
- m_iterator.reset(); |
-} |
+ /* The first four bytes of that hash, interpreted as a little-endian integer, |
+ is our |
+ verification value */ |
-void OrderIteratorPopulator::collectChild(const LayoutBox* child) |
-{ |
- m_iterator.m_orderValues.insert(child->style()->order()); |
+ if (expected != final) { |
+ gpr_log(GPR_INFO, "Verification value 0x%08X : Failed! (Expected 0x%08x)", |
+ final, expected); |
+ abort(); |
+ } else { |
+ gpr_log(GPR_INFO, "Verification value 0x%08X : Passed!", final); |
+ } |
} |
-} // namespace blink |
+int main(int argc, char **argv) { |
+ grpc_test_init(argc, argv); |
+ /* basic tests to verify that things don't crash */ |
+ gpr_murmur_hash3("", 0, 0); |
+ gpr_murmur_hash3("xyz", 3, 0); |
+ verification_test(gpr_murmur_hash3, 0xB0F57EE3); |
+ return 0; |
+} |