diff --git a/apps/openmw_test_suite/CMakeLists.txt b/apps/openmw_test_suite/CMakeLists.txt index 2300f97a3..24ea1835a 100644 --- a/apps/openmw_test_suite/CMakeLists.txt +++ b/apps/openmw_test_suite/CMakeLists.txt @@ -9,6 +9,8 @@ if (GTEST_FOUND) mwworld/test_store.cpp mwdialogue/test_keywordsearch.cpp + + esm/test_fixed_string.cpp ) source_group(apps\\openmw_test_suite FILES openmw_test_suite.cpp ${UNITTEST_SRC_FILES}) diff --git a/apps/openmw_test_suite/esm/test_fixed_string.cpp b/apps/openmw_test_suite/esm/test_fixed_string.cpp new file mode 100644 index 000000000..59dd7fe66 --- /dev/null +++ b/apps/openmw_test_suite/esm/test_fixed_string.cpp @@ -0,0 +1,75 @@ +#include +#include "components/esm/esmcommon.hpp" + +TEST(EsmFixedString, operator__eq_ne) +{ + { + SCOPED_TRACE("asdc == asdc"); + ESM::NAME name; + name.assign("asdc"); + char s[4] = {'a', 's', 'd', 'c'}; + std::string ss(s, 4); + + EXPECT_TRUE(name == s); + EXPECT_TRUE(name == ss.c_str()); + EXPECT_TRUE(name == ss); + } + { + SCOPED_TRACE("asdc == asdcx"); + ESM::NAME name; + name.assign("asdc"); + char s[5] = {'a', 's', 'd', 'c', 'x'}; + std::string ss(s, 5); + + EXPECT_TRUE(name != s); + EXPECT_TRUE(name != ss.c_str()); + EXPECT_TRUE(name != ss); + } + { + SCOPED_TRACE("asdc == asdc[NULL]"); + ESM::NAME name; + name.assign("asdc"); + char s[5] = {'a', 's', 'd', 'c', '\0'}; + std::string ss(s, 5); + + EXPECT_TRUE(name == s); + EXPECT_TRUE(name == ss.c_str()); + EXPECT_TRUE(name == ss); + } +} + +TEST(EsmFixedString, empty_strings) +{ + { + SCOPED_TRACE("4 bytes"); + ESM::NAME empty = ESM::NAME(); + EXPECT_TRUE(empty == ""); + EXPECT_TRUE(empty == static_cast(0)); + EXPECT_TRUE(empty != "some string"); + EXPECT_TRUE(empty != static_cast(42)); + } + { + SCOPED_TRACE("32 bytes"); + ESM::NAME32 empty = ESM::NAME32(); + EXPECT_TRUE(empty == ""); + EXPECT_TRUE(empty != "some string"); + } +} + +TEST(EsmFixedString, struct_size) +{ + ASSERT_EQ(4, sizeof(ESM::NAME)); + ASSERT_EQ(32, sizeof(ESM::NAME32)); + ASSERT_EQ(64, sizeof(ESM::NAME64)); + ASSERT_EQ(256, sizeof(ESM::NAME256)); +} + +TEST(EsmFixedString, DISABLED_is_pod) +{ + /* TODO: enable in C++11 + * ASSERT_TRUE(std::is_pod::value); + * ASSERT_TRUE(std::is_pod::value); + * ASSERT_TRUE(std::is_pod::value); + * ASSERT_TRUE(std::is_pod::value); + */ +}