Add tests for EnumMap

This commit is contained in:
ZehMatt 2021-07-22 20:51:28 +03:00
parent d9f9e7542a
commit cd43cab999
No known key found for this signature in database
GPG Key ID: 18CE582C71A225B0
3 changed files with 156 additions and 0 deletions

View File

@ -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)

146
test/tests/EnumMapTest.cpp Normal file
View File

@ -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 <gtest/gtest.h>
#include <openrct2/core/EnumMap.hpp>
enum class TestEnumClassContinous
{
A,
B,
C,
D,
E,
F,
G
};
enum class TestEnumClassNonContinous
{
A = 1,
B,
C = 7,
D,
E,
F,
G
};
template<typename TEnum> void TestEnumKeyLookup()
{
// clang-format off
EnumMap<TEnum> 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<typename TEnum> void TestEnumValueLookup()
{
// clang-format off
EnumMap<TEnum> 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<TestEnumClassContinous>();
}
TEST(EnumMapTest, LookupContiniousByValue)
{
TestEnumValueLookup<TestEnumClassContinous>();
}
TEST(EnumMapTest, LookupNonContinousByKey)
{
TestEnumKeyLookup<TestEnumClassNonContinous>();
}
TEST(EnumMapTest, LookupNonContiniousByValue)
{
TestEnumValueLookup<TestEnumClassNonContinous>();
}

View File

@ -60,6 +60,7 @@
<ClCompile Include="CLITests.cpp" />
<ClCompile Include="CryptTests.cpp" />
<ClCompile Include="Endianness.cpp" />
<ClCompile Include="EnumMapTest.cpp" />
<ClCompile Include="FormattingTests.cpp" />
<ClCompile Include="LanguagePackTest.cpp" />
<ClCompile Include="ImageImporterTests.cpp" />