mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
flat_set/map: add hash_value tests
This commit is contained in:
parent
27adea2224
commit
e37fdb240a
@ -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);
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user