/*
- * 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:
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);
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));
+ }
+}
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));
+ }
+}