flat_set/map: add hash_value tests

This commit is contained in:
Justin Viiret 2017-01-17 14:31:21 +11:00 committed by Matthew Barr
parent 27adea2224
commit e37fdb240a
3 changed files with 68 additions and 2 deletions

View 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);

View 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));
}
}

View 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));
}
}