From cd43cab9991d87d4305a4d7f9b668ce8d7214da5 Mon Sep 17 00:00:00 2001 From: ZehMatt Date: Thu, 22 Jul 2021 20:51:28 +0300 Subject: [PATCH] Add tests for EnumMap --- test/tests/CMakeLists.txt | 9 +++ test/tests/EnumMapTest.cpp | 146 +++++++++++++++++++++++++++++++++++++ test/tests/tests.vcxproj | 1 + 3 files changed, 156 insertions(+) create mode 100644 test/tests/EnumMapTest.cpp diff --git a/test/tests/CMakeLists.txt b/test/tests/CMakeLists.txt index 191c63e1e9..703871f2d9 100644 --- a/test/tests/CMakeLists.txt +++ b/test/tests/CMakeLists.txt @@ -248,3 +248,12 @@ SET_CHECK_CXX_FLAGS(test_s6importexporttests) target_link_libraries(test_s6importexporttests ${GTEST_LIBRARIES} libopenrct2 ${LDL} z) target_link_platform_libraries(test_s6importexporttests) add_test(NAME s6importexporttests COMMAND test_s6importexporttests) + +# EnumMap Test +set(ENUMMAP_TEST_SOURCES "${CMAKE_CURRENT_LIST_DIR}/EnumMapTest.cpp.cpp" + "${CMAKE_CURRENT_LIST_DIR}/TestData.cpp") +add_executable(test_enummap ${S6IMPORTEXPORT_TEST_SOURCES}) +SET_CHECK_CXX_FLAGS(test_enummap) +target_link_libraries(test_enummap ${GTEST_LIBRARIES} libopenrct2 ${LDL} z) +target_link_platform_libraries(test_enummap) +add_test(NAME enummaptests COMMAND test_enummap) diff --git a/test/tests/EnumMapTest.cpp b/test/tests/EnumMapTest.cpp new file mode 100644 index 0000000000..98efbc8e73 --- /dev/null +++ b/test/tests/EnumMapTest.cpp @@ -0,0 +1,146 @@ +/***************************************************************************** + * Copyright (c) 2014-2021 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ +#include +#include + +enum class TestEnumClassContinous +{ + A, + B, + C, + D, + E, + F, + G +}; + +enum class TestEnumClassNonContinous +{ + A = 1, + B, + C = 7, + D, + E, + F, + G +}; + +template void TestEnumKeyLookup() +{ + // clang-format off + EnumMap enumMap = { + { "A", TEnum::A }, + { "B", TEnum::B }, + { "C", TEnum::C }, + { "D", TEnum::D }, + { "E", TEnum::E }, + { "F", TEnum::F }, + { "G", TEnum::G }, + }; + // clang-format on + + ASSERT_EQ(enumMap.find("Z"), enumMap.end()); + + auto itA = enumMap.find("A"); + ASSERT_NE(itA, enumMap.end()); + ASSERT_EQ(itA->second, TEnum::A); + + auto itB = enumMap.find("B"); + ASSERT_NE(itB, enumMap.end()); + ASSERT_EQ(itB->second, TEnum::B); + + auto itC = enumMap.find("C"); + ASSERT_NE(itC, enumMap.end()); + ASSERT_EQ(itC->second, TEnum::C); + + auto itD = enumMap.find("D"); + ASSERT_NE(itD, enumMap.end()); + ASSERT_EQ(itD->second, TEnum::D); + + auto itE = enumMap.find("E"); + ASSERT_NE(itE, enumMap.end()); + ASSERT_EQ(itE->second, TEnum::E); + + auto itF = enumMap.find("F"); + ASSERT_NE(itF, enumMap.end()); + ASSERT_EQ(itF->second, TEnum::F); + + auto itG = enumMap.find("G"); + ASSERT_NE(itG, enumMap.end()); + ASSERT_EQ(itG->second, TEnum::G); + + SUCCEED(); +} + +template void TestEnumValueLookup() +{ + // clang-format off + EnumMap enumMap = { + { "A", TEnum::A }, + { "B", TEnum::B }, + { "C", TEnum::C }, + { "D", TEnum::D }, + { "E", TEnum::E }, + { "F", TEnum::F }, + { "G", TEnum::G }, + }; + // clang-format on + + ASSERT_EQ(enumMap.find("Z"), enumMap.end()); + + auto itA = enumMap.find(TEnum::A); + ASSERT_NE(itA, enumMap.end()); + ASSERT_EQ(itA->second, TEnum::A); + + auto itB = enumMap.find(TEnum::B); + ASSERT_NE(itB, enumMap.end()); + ASSERT_EQ(itB->second, TEnum::B); + + auto itC = enumMap.find(TEnum::C); + ASSERT_NE(itC, enumMap.end()); + ASSERT_EQ(itC->second, TEnum::C); + + auto itD = enumMap.find(TEnum::D); + ASSERT_NE(itD, enumMap.end()); + ASSERT_EQ(itD->second, TEnum::D); + + auto itE = enumMap.find(TEnum::E); + ASSERT_NE(itE, enumMap.end()); + ASSERT_EQ(itE->second, TEnum::E); + + auto itF = enumMap.find(TEnum::F); + ASSERT_NE(itF, enumMap.end()); + ASSERT_EQ(itF->second, TEnum::F); + + auto itG = enumMap.find(TEnum::G); + ASSERT_NE(itG, enumMap.end()); + ASSERT_EQ(itG->second, TEnum::G); + + SUCCEED(); +} + +TEST(EnumMapTest, LookupContinousByKey) +{ + TestEnumKeyLookup(); +} + +TEST(EnumMapTest, LookupContiniousByValue) +{ + TestEnumValueLookup(); +} + +TEST(EnumMapTest, LookupNonContinousByKey) +{ + TestEnumKeyLookup(); +} + +TEST(EnumMapTest, LookupNonContiniousByValue) +{ + TestEnumValueLookup(); +} diff --git a/test/tests/tests.vcxproj b/test/tests/tests.vcxproj index 53a49a7ca0..a49cf5a70c 100644 --- a/test/tests/tests.vcxproj +++ b/test/tests/tests.vcxproj @@ -60,6 +60,7 @@ +