diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test_hash_map.cpp | 91 |
1 files changed, 89 insertions, 2 deletions
diff --git a/test/test_hash_map.cpp b/test/test_hash_map.cpp index c55eda3..9f01766 100644 --- a/test/test_hash_map.cpp +++ b/test/test_hash_map.cpp @@ -59,8 +59,16 @@ TEST(FudHash, InsertMoveKeyMoveValue) auto stringList{testStrings()}; HashMap<int, String> mapInt2String{}; for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + EXPECT_FALSE(mapInt2String.contains(index)); + EXPECT_FALSE(mapInt2String.contains(index * 1)); auto insertStatus = mapInt2String.insert(index * 1, String::from(stringList[index]).takeOkay()); EXPECT_EQ(insertStatus, FudStatus::Success); + EXPECT_TRUE(mapInt2String.contains(index)); + EXPECT_TRUE(mapInt2String.contains(index * 1)); + } + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto insertStatus = mapInt2String.insert(index * 1, String::from(stringList[index]).takeOkay()); + EXPECT_EQ(insertStatus, FudStatus::Exists); } EXPECT_EQ(mapInt2String.size(), stringList.size()); EXPECT_GT(mapInt2String.capacity(), mapInt2String.size()); @@ -76,9 +84,15 @@ TEST(FudHash, InsertMoveKeyCopyValue) auto stringList{testStrings()}; HashMap<String, int> mapString2Int{}; for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { - auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index * 1); + EXPECT_FALSE(mapString2Int.contains(stringList[index])); + auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index); + EXPECT_TRUE(mapString2Int.contains(stringList[index])); EXPECT_EQ(insertStatus, FudStatus::Success); } + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index); + EXPECT_EQ(insertStatus, FudStatus::Exists); + } EXPECT_EQ(mapString2Int.size(), stringList.size()); EXPECT_GT(mapString2Int.capacity(), mapString2Int.size()); @@ -104,6 +118,10 @@ TEST(FudHash, InsertCopyKeyMoveValue) auto insertStatus = mapInt2String.insert(index, String::from(stringList[index]).takeOkay()); EXPECT_EQ(insertStatus, FudStatus::Success); } + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto insertStatus = mapInt2String.insert(index, String::from(stringList[index]).takeOkay()); + EXPECT_EQ(insertStatus, FudStatus::Exists); + } EXPECT_EQ(mapInt2String.size(), stringList.size()); EXPECT_GT(mapInt2String.capacity(), mapInt2String.size()); @@ -123,6 +141,10 @@ TEST(FudHash, InsertCopyKeyCopyValue) auto insertStatus = mapView2Int.insert(stringViewList[index], index); EXPECT_EQ(insertStatus, FudStatus::Success); } + for (int index = 0; index < static_cast<int>(stringViewList.size()); ++index) { + auto insertStatus = mapView2Int.insert(stringViewList[index], index); + EXPECT_EQ(insertStatus, FudStatus::Exists); + } EXPECT_EQ(mapView2Int.size(), stringViewList.size()); EXPECT_GT(mapView2Int.capacity(), mapView2Int.size()); @@ -138,7 +160,7 @@ TEST(FudHash, RemoveKeyConstRef) auto stringList{testStrings()}; HashMap<String, int> mapString2Int{}; for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { - auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index * 1); + auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index); EXPECT_EQ(insertStatus, FudStatus::Success); } @@ -194,4 +216,69 @@ TEST(FudHash, RemoveKeyMoveRef) } } +TEST(FudHash, ExtractConstKey) +{ + auto stringList{testStrings()}; + HashMap<String, int> mapString2Int{}; + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto insertStatus = mapString2Int.insert(String::from(stringList[index]).takeOkay(), index); + EXPECT_EQ(insertStatus, FudStatus::Success); + } + + EXPECT_EQ(mapString2Int.size(), stringList.size()); + EXPECT_GT(mapString2Int.capacity(), mapString2Int.size()); + + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + const int invalid = -1; + EXPECT_EQ(mapString2Int.get(stringList[index]).valueOr(invalid), index); + } + + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto valueOpt{mapString2Int.extract(stringList[index])}; + ASSERT_TRUE(valueOpt.hasValue()); + EXPECT_EQ(valueOpt.value(), index); + } + + for (const auto& entry : stringList) { + EXPECT_TRUE(mapString2Int.extract(entry).isNone()); + } + + for (const auto& entry : stringList) { + const int invalid = -1; + EXPECT_EQ(mapString2Int.get(entry).valueOr(invalid), invalid); + } +} + +TEST(FudHash, ExtractMoveKey) +{ + auto stringList{testStrings()}; + HashMap<int, String> mapInt2String{}; + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto insertStatus = mapInt2String.insert(index, String::from(stringList[index]).takeOkay()); + EXPECT_EQ(insertStatus, FudStatus::Success); + } + + EXPECT_EQ(mapInt2String.size(), stringList.size()); + EXPECT_GT(mapInt2String.capacity(), mapInt2String.size()); + + const String invalid{String::makeFromCString("Invalid").takeOkay()}; + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + EXPECT_EQ(mapInt2String.getConstRef(index).valueOr(invalid), stringList[index]); + } + + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + auto valueOpt{mapInt2String.extract(index * 1)}; + ASSERT_TRUE(valueOpt.hasValue()); + EXPECT_EQ(valueOpt.value(), stringList[index]); + } + + for (int index = 0; index < stringList.size(); ++index) { + EXPECT_TRUE(mapInt2String.extract(index * 1).isNone()); + } + + for (int index = 0; index < static_cast<int>(stringList.size()); ++index) { + EXPECT_EQ(mapInt2String.getConstRef(index).valueOr(invalid), invalid); + } +} + } // namespace fud |