TEST( ConcurrentMapTests, SimpleTest ) { ConcurrentMap<int, string> stringMap; ASSERT_EQ(0u, stringMap.count(5)); ASSERT_EQ("", stringMap.get(5)); ASSERT_EQ(0u, stringMap.count(6)); stringMap.set(6, "hello"); ASSERT_EQ(1u, stringMap.count(6)); ASSERT_EQ("hello", stringMap.get(6)); stringMap.erase(6); ASSERT_EQ(0u, stringMap.count(6)); ASSERT_EQ("", stringMap.get(6)); ASSERT_EQ(1u, stringMap.count(6)); }
TEST_F(ConcurrentContainersTest, concurrentMapTest) { ConcurrentMap<std::string, uint32_t> map; run_on_samples([&map](const std::vector<uint32_t>& sample) { for (size_t i = 0; i < sample.size(); ++i) { std::string s = std::to_string(sample[i]); map.insert({s, sample[i]}); EXPECT_EQ(1, map.count(s)); } }); EXPECT_EQ(m_data_set.size(), map.size()); for (uint32_t x : m_data) { std::string s = std::to_string(x); EXPECT_EQ(1, map.count(s)); auto it = map.find(s); EXPECT_NE(map.end(), it); EXPECT_EQ(s, it->first); EXPECT_EQ(x, it->second); } std::unordered_map<uint32_t, size_t> occurrences; for (uint32_t x : m_data) { ++occurrences[x]; } run_on_samples([&map](const std::vector<uint32_t>& sample) { for (size_t i = 0; i < sample.size(); ++i) { std::string s = std::to_string(sample[i]); map.update( s, [&s, i](const std::string& key, uint32_t& value, bool key_exists) { EXPECT_EQ(s, key); EXPECT_TRUE(key_exists); ++value; }); } }); EXPECT_EQ(m_data_set.size(), map.size()); for (uint32_t x : m_data) { std::string s = std::to_string(x); EXPECT_EQ(1, map.count(s)); auto it = map.find(s); EXPECT_NE(map.end(), it); EXPECT_EQ(s, it->first); EXPECT_EQ(x + occurrences[x], it->second); } run_on_subset_samples([&map](const std::vector<uint32_t>& sample) { for (size_t i = 0; i < sample.size(); ++i) { map.erase(std::to_string(sample[i])); } }); for (uint32_t x : m_subset_data) { std::string s = std::to_string(x); EXPECT_EQ(0, map.count(s)); EXPECT_EQ(map.end(), map.find(s)); } run_on_samples([&map](const std::vector<uint32_t>& sample) { for (size_t i = 0; i < sample.size(); ++i) { map.erase(std::to_string(sample[i])); } }); EXPECT_EQ(0, map.size()); for (uint32_t x : m_data) { std::string s = std::to_string(x); EXPECT_EQ(0, map.count(s)); EXPECT_EQ(map.end(), map.find(s)); } map.insert({{"a", 1}, {"b", 2}, {"c", 3}}); EXPECT_EQ(3, map.size()); map.clear(); EXPECT_EQ(0, map.size()); }