summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_hash_map.cpp91
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