]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
flat_set/map: add hash_value tests
authorJustin Viiret <justin.viiret@intel.com>
Tue, 17 Jan 2017 03:31:21 +0000 (14:31 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 04:41:30 +0000 (14:41 +1000)
src/nfagraph/ng_equivalence.cpp
unit/internal/flat_map.cpp
unit/internal/flat_set.cpp

index 32a392a6de5cb0c3adfb7c5a16d5dde071295768..b9e2bd0df872d54c0aa6acb4567c927df74ddd4e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, Intel Corporation
+ * Copyright (c) 2015-2017, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -133,7 +133,7 @@ public:
 
     friend size_t hash_value(const ClassInfo &c) {
         size_t val = 0;
-        boost::hash_combine(val, boost::hash_range(begin(c.rs), end(c.rs)));
+        boost::hash_combine(val, c.rs);
         boost::hash_combine(val, c.vertex_flags);
         boost::hash_combine(val, c.cr);
         boost::hash_combine(val, c.adjacent_cr);
index 54372dece641ea947c0e00dbd50b0c99deb4b35e..966a5d8f2e48b5e45b9635bff832ef4e859b2b4d 100644 (file)
@@ -401,3 +401,41 @@ TEST(flat_map, max_size) {
     flat_map<string, string> f;
     ASSERT_LE(1ULL << 24, f.max_size());
 }
+
+TEST(flat_map, hash_value) {
+    const vector<pair<u32, u32>> input = {
+        {0, 0}, {3, 1}, {76, 2}, {132, 3}, {77, 4}, {99999, 5}, {100, 6}};
+    for (size_t len = 0; len < input.size(); len++) {
+        flat_map<u32, u32> f1(input.begin(), input.begin() + len);
+        flat_map<u32, u32> f2(input.rbegin() + input.size() - len,
+                              input.rend());
+        EXPECT_EQ(hash_value(f1), hash_value(f2));
+
+        // Try removing an element.
+        auto f3 = f1;
+        EXPECT_EQ(hash_value(f1), hash_value(f3));
+        EXPECT_EQ(hash_value(f2), hash_value(f3));
+        if (!f3.empty()) {
+            f3.erase(f3.begin());
+            EXPECT_NE(hash_value(f1), hash_value(f3));
+            EXPECT_NE(hash_value(f2), hash_value(f3));
+        }
+
+        // Try adding an element.
+        f3 = f1;
+        EXPECT_EQ(hash_value(f1), hash_value(f3));
+        EXPECT_EQ(hash_value(f2), hash_value(f3));
+        f3.emplace(32767, 7);
+        EXPECT_NE(hash_value(f1), hash_value(f3));
+        EXPECT_NE(hash_value(f2), hash_value(f3));
+
+        // Change a value, but not a key.
+        f3 = f1;
+        EXPECT_EQ(hash_value(f1), hash_value(f3));
+        EXPECT_EQ(hash_value(f2), hash_value(f3));
+        f3.erase(77);
+        f3.emplace(77, 10);
+        EXPECT_NE(hash_value(f1), hash_value(f3));
+        EXPECT_NE(hash_value(f2), hash_value(f3));
+    }
+}
index 7d45cbb205078cd6300e1e6129f59ee3b1dd4d73..3bee0edbe0bc591561f70dde8c85b3442efb494d 100644 (file)
@@ -392,3 +392,31 @@ TEST(flat_set, max_size) {
     flat_set<string> f;
     ASSERT_LE(1ULL << 24, f.max_size());
 }
+
+TEST(flat_set, hash_value) {
+    const vector<u32> input = {0,        15, 3,   1,   20,  32768,
+                               24000000, 17, 100, 101, 104, 99999};
+    for (size_t len = 0; len < input.size(); len++) {
+        flat_set<u32> f1(input.begin(), input.begin() + len);
+        flat_set<u32> f2(input.rbegin() + input.size() - len, input.rend());
+        EXPECT_EQ(hash_value(f1), hash_value(f2));
+
+        // Try removing an element.
+        auto f3 = f1;
+        EXPECT_EQ(hash_value(f1), hash_value(f3));
+        EXPECT_EQ(hash_value(f2), hash_value(f3));
+        if (!f3.empty()) {
+            f3.erase(f3.begin());
+            EXPECT_NE(hash_value(f1), hash_value(f3));
+            EXPECT_NE(hash_value(f2), hash_value(f3));
+        }
+
+        // Try adding an element.
+        f3 = f1;
+        EXPECT_EQ(hash_value(f1), hash_value(f3));
+        EXPECT_EQ(hash_value(f2), hash_value(f3));
+        f3.insert(32767);
+        EXPECT_NE(hash_value(f1), hash_value(f3));
+        EXPECT_NE(hash_value(f2), hash_value(f3));
+    }
+}