mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-09-29 19:24:25 +03:00
flat_set/map: add hash_value tests
This commit is contained in:
committed by
Matthew Barr
parent
27adea2224
commit
e37fdb240a
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user