6 #include <gtest/gtest.h>
12 TEST(BijectiveMapTests, TestBijectiveMapConstructors)
17 EXPECT_EQ(emptyBiMap.
Size(), 0u);
20 std::unordered_map<int, std::string> unordMap = { { 10,
"Ten" }, { 20,
"Twenty" } };
22 EXPECT_EQ(rangeBiMap.
Size(), 2u);
25 unordMap[30] =
"Twenty";
32 assert(biMap.
Size() == 2);
41 EXPECT_EQ(biMap2, biMap);
43 biMap2.
Insert(30,
"Thirty");
44 EXPECT_EQ(biMap2.
Size(), 3u);
45 EXPECT_NE(biMap2, biMap);
49 EXPECT_EQ(biMap3.
Size(), 2u);
51 EXPECT_EQ(biMap.
Size(), 0u);
55 EXPECT_EQ(biMap2.
Size(), 2u);
56 EXPECT_EQ(biMap2, biMap3);
59 biMap = std::move(biMap3);
60 EXPECT_EQ(biMap.
Size(), 2u);
61 EXPECT_EQ(biMap, biMap2);
62 EXPECT_EQ(biMap3.
Size(), 0u);
70 TEST(BijectiveMapTests, TestBijectiveMapClear)
77 EXPECT_EQ(squares.
Size(), 2u);
79 EXPECT_EQ(squares.
Size(), 0u);
81 EXPECT_EQ(squares.
Size(), 1u);
84 TEST(BijectiveMapTests, TestBijectiveMapInsert)
89 bool inserted = squares.
Insert(5, 25);
90 EXPECT_EQ(inserted && squares.
Size(), 1u);
91 EXPECT_TRUE(squares.
HasKey(5));
93 inserted = squares.
Insert(5, 45);
94 EXPECT_FALSE(inserted);
95 EXPECT_EQ(squares.
Size(), 1u);
101 inserted = squares.
Insert(6, 36);
102 EXPECT_TRUE(inserted);
103 EXPECT_EQ(squares.
Size(), 2u);
106 TEST(BijectiveMapTests, TestBijectiveMapInsertPairs)
117 biMap2.
Insert(100,
"six");
122 EXPECT_EQ(inserted, 2u);
123 EXPECT_EQ(biMap.
Size(), 5u);
124 EXPECT_FALSE(biMap.
HasKey(100));
125 EXPECT_FALSE(biMap.
HasValue(
"fire"));
130 TEST(BijectiveMapTests, TestBijectiveMapLookup)
136 EXPECT_EQ(biMap.LookupKey(1),
"one");
137 EXPECT_EQ(biMap.LookupKey(2),
"two");
138 EXPECT_EQ(biMap.LookupValue(
"one"), 1);
139 EXPECT_EQ(biMap.LookupValue(
"two"), 2);
145 TEST(BijectiveMapTests, TestBijectiveMapIterators)
154 size_t count = 0, sum = 0;
155 for (
const auto & [key, value] : biMap)
162 EXPECT_EQ(value,
"one");
165 EXPECT_EQ(value,
"two");
168 EXPECT_EQ(value,
"three");
171 FAIL() <<
"unreachable";
174 EXPECT_EQ(count, 3u);
178 TEST(BijectiveMapTests, TestBijectiveMapErase)
189 const auto first = biMap.
begin();
190 const auto second = std::next(first);
191 const auto third = std::next(second);
192 const auto fourth = std::next(third);
194 assert(fourth == biMap.end());
196 const auto afterErased = biMap.Erase(second);
197 EXPECT_EQ(afterErased, third);
198 EXPECT_EQ(afterErased, std::next(first));
199 EXPECT_EQ(biMap.Size(), 2u);
202 TEST(BijectiveMapTests, TestBijectiveMapRemoves)
207 EXPECT_TRUE(removed);
208 EXPECT_FALSE(biMap.HasKey(1));
209 EXPECT_FALSE(biMap.HasValue(
"one"));
210 EXPECT_EQ(biMap.Size(), 2u);
212 EXPECT_TRUE(removed);
213 EXPECT_FALSE(biMap.HasKey(2));
214 EXPECT_FALSE(biMap.HasValue(
"two"));
215 EXPECT_EQ(biMap.Size(), 1u);
218 EXPECT_FALSE(removed);
220 EXPECT_FALSE(removed);
223 TEST(BijectiveMapTests, TestBijectiveMapRemoveWhere)
235 const auto KVPredicate = [](
int key,
const std::string & value)
237 return key < 4 || value ==
"eight";
240 EXPECT_EQ(removed, 4u);
241 EXPECT_FALSE(biMap.HasKey(8));
242 EXPECT_FALSE(biMap.HasValue(
"three"));
244 removed = biMap.RemoveWhere(KVPredicate);
245 EXPECT_EQ(removed, 0u);
248 removed = biMap.RemoveKeysWhere(
253 EXPECT_EQ(removed, 2u);
254 EXPECT_FALSE(biMap.HasKey(5));
255 EXPECT_FALSE(biMap.HasValue(
"seven"));
258 removed = biMap.RemoveValuesWhere(
259 [&](
const std::string & value)
261 return value.size() > 3;
263 EXPECT_EQ(removed, 1u);
264 EXPECT_TRUE(!biMap.HasKey(4));
265 EXPECT_EQ(biMap.Size(), 1u);
266 EXPECT_TRUE(biMap.HasValue(
"six"));
TEST(BijectiveMapTests, TestBijectiveMapConstructors)
const V & LookupKey(const K &key) const
const K & LookupValue(const V &value) const
bool RemoveKey(const K &key)
size_t RemoveWhere(const F &match)
size_t InsertPairs(IteratorType begin, IteratorType end)
ConstIterator begin() const noexcept
std::size_t Size() const noexcept
ConstIterator end() const noexcept
bool RemoveValue(const V &value)
void InsertOrThrow(const K &key, const V &value)
bool Insert(const K &key, const V &value)
bool HasKey(const K &key) const noexcept
bool HasValue(const V &value) const noexcept