mirror of https://github.com/OpenRCT2/OpenRCT2.git
Add tests for EnumMap
This commit is contained in:
parent
d9f9e7542a
commit
cd43cab999
|
@ -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)
|
||||
|
|
|
@ -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>();
|
||||
}
|
|
@ -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" />
|
||||
|
|
Loading…
Reference in New Issue