in libs/utils/gtest/src/HashMapTestSuite.cc [301:379]
void testMapsWithValues(const std::vector<std::tuple<std::string, long, T>>& values) {
auto* sMap = celix_stringHashMap_create();
auto* lMap = celix_longHashMap_create();
// test hashmap put
for (const auto& tuple : values) {
if constexpr (std::is_same_v<void*, T>) {
auto status = celix_stringHashMap_put(sMap, std::get<0>(tuple).c_str(), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_longHashMap_put(lMap, std::get<1>(tuple), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
} else if constexpr (std::is_same_v<long, T>) {
auto status = celix_stringHashMap_putLong(sMap, std::get<0>(tuple).c_str(), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_longHashMap_putLong(lMap, std::get<1>(tuple), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
} else if constexpr (std::is_same_v<double, T>) {
auto status = celix_stringHashMap_putDouble(sMap, std::get<0>(tuple).c_str(), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_longHashMap_putDouble(lMap, std::get<1>(tuple), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
} else if constexpr (std::is_same_v<bool, T>) {
auto status = celix_stringHashMap_putBool(sMap, std::get<0>(tuple).c_str(), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_longHashMap_putBool(lMap, std::get<1>(tuple), std::get<2>(tuple));
EXPECT_EQ(status, CELIX_SUCCESS);
} else {
FAIL() << "expected of the following value types: void*, long, double or bool";
}
}
ASSERT_EQ(values.size(), celix_stringHashMap_size(sMap));
ASSERT_EQ(values.size(), celix_longHashMap_size(lMap));
// test hashmap get
for (const auto& tuple : values) {
if constexpr (std::is_same_v<void*, T>) {
auto* value = celix_stringHashMap_get(sMap, std::get<0>(tuple).c_str());
EXPECT_EQ(value, std::get<2>(tuple));
value = celix_longHashMap_get(lMap, std::get<1>(tuple));
EXPECT_EQ(value, std::get<2>(tuple));
} else if constexpr (std::is_same_v<long, T>) {
auto value = celix_stringHashMap_getLong(sMap, std::get<0>(tuple).c_str(), 0);
EXPECT_EQ(value, std::get<2>(tuple));
value = celix_longHashMap_getLong(lMap, std::get<1>(tuple), 0);
EXPECT_EQ(value, std::get<2>(tuple));
} else if constexpr (std::is_same_v<double, T>) {
auto value = celix_stringHashMap_getDouble(sMap, std::get<0>(tuple).c_str(), 0.0);
EXPECT_EQ(value, std::get<2>(tuple));
value = celix_longHashMap_getDouble(lMap, std::get<1>(tuple), 0.0);
EXPECT_EQ(value, std::get<2>(tuple));
} else if constexpr (std::is_same_v<bool, T>) {
auto value = celix_stringHashMap_getBool(sMap, std::get<0>(tuple).c_str(), false);
EXPECT_EQ(value, std::get<2>(tuple));
value = celix_longHashMap_getBool(lMap, std::get<1>(tuple), false);
EXPECT_EQ(value, std::get<2>(tuple));
} else {
FAIL() << "expected of the following value types: void*, long, double or bool";
}
}
// test hashmap remove
for (const auto& tuple : values) {
celix_stringHashMap_remove(sMap, std::get<0>(tuple).c_str());
celix_longHashMap_remove(lMap, std::get<1>(tuple));
}
ASSERT_EQ(0, celix_stringHashMap_size(sMap));
ASSERT_EQ(0, celix_longHashMap_size(lMap));
celix_stringHashMap_destroy(sMap);
celix_longHashMap_destroy(lMap);
}