mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 04:26:42 +00:00 
			
		
		
		
	In function ‘bool ESM::operator==(const FixedString<capacity>&, const T* const&) [with long unsigned int capacity = 5; T = char; <template-parameter-1-3> = void]’,
    inlined from ‘testing::AssertionResult testing::internal::CmpHelperEQ(const char*, const char*, const T1&, const T2&) [with T1 = ESM::FixedString<5>; T2 = const char*]’ at /home/elsid/dev/googletest/build/gcc/release/install/include/gtest/gtest.h:1358:11,
    inlined from ‘static testing::AssertionResult testing::internal::EqHelper::Compare(const char*, const char*, const T1&, const T2&) [with T1 = ESM::FixedString<5>; T2 = const char*; typename std::enable_if<((! std::is_integral<_Tp>::value) || (! std::is_pointer<_Dp>::value))>::type* <anonymous> = 0]’ at /home/elsid/dev/googletest/build/gcc/release/install/include/gtest/gtest.h:1377:64,
    inlined from ‘virtual void {anonymous}::EsmFixedString_equality_operator_for_not_convertible_to_uint32_with_const_char_pointer_Test::TestBody()’ at apps/openmw_test_suite/esm/test_fixed_string.cpp:165:9:
components/esm/esmcommon.hpp:134:19: warning: array subscript 5 is outside array bounds of ‘const char [5]’ [-Warray-bounds]
  134 |         return rhs[capacity] == '\0';
      |                ~~~^
apps/openmw_test_suite/esm/test_fixed_string.cpp: In member function ‘virtual void {anonymous}::EsmFixedString_equality_operator_for_not_convertible_to_uint32_with_const_char_pointer_Test::TestBody()’:
apps/openmw_test_suite/esm/test_fixed_string.cpp:164:20: note: at offset 5 into object ‘other’ of size 5
  164 |         const char other[5] = { 'a', 'b', 'c', 'd', '\0' };
      |                    ^~~~~
		
	
			
		
			
				
	
	
		
			188 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "components/esm/defs.hpp"
 | 
						|
#include "components/esm/esmcommon.hpp"
 | 
						|
#include <gtest/gtest.h>
 | 
						|
 | 
						|
namespace
 | 
						|
{
 | 
						|
    TEST(EsmFixedString, operator__eq_ne)
 | 
						|
    {
 | 
						|
        {
 | 
						|
            SCOPED_TRACE("asdc == asdc");
 | 
						|
            constexpr ESM::NAME name("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");
 | 
						|
            constexpr ESM::NAME name("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]");
 | 
						|
            const ESM::NAME name("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, operator__eq_ne_const)
 | 
						|
    {
 | 
						|
        {
 | 
						|
            SCOPED_TRACE("asdc == asdc (const)");
 | 
						|
            constexpr ESM::NAME name("asdc");
 | 
						|
            const 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 (const)");
 | 
						|
            constexpr ESM::NAME name("asdc");
 | 
						|
            const 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] (const)");
 | 
						|
            constexpr ESM::NAME name("asdc");
 | 
						|
            const 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<uint32_t>(0));
 | 
						|
            EXPECT_TRUE(empty != "some string");
 | 
						|
            EXPECT_TRUE(empty != static_cast<uint32_t>(42));
 | 
						|
        }
 | 
						|
        {
 | 
						|
            SCOPED_TRACE("32 bytes");
 | 
						|
            ESM::NAME32 empty = ESM::NAME32();
 | 
						|
            EXPECT_TRUE(empty == "");
 | 
						|
            EXPECT_TRUE(empty != "some string");
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assign_should_zero_untouched_bytes_for_4)
 | 
						|
    {
 | 
						|
        ESM::NAME value;
 | 
						|
        value = static_cast<uint32_t>(0xFFFFFFFFu);
 | 
						|
        value.assign(std::string(1, 'a'));
 | 
						|
        EXPECT_EQ(value, static_cast<uint32_t>('a')) << value.toInt();
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assign_should_only_truncate_for_4)
 | 
						|
    {
 | 
						|
        ESM::NAME value;
 | 
						|
        value.assign(std::string(5, 'a'));
 | 
						|
        EXPECT_EQ(value, std::string(4, 'a'));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assign_should_truncate_and_set_last_element_to_zero)
 | 
						|
    {
 | 
						|
        ESM::FixedString<17> value;
 | 
						|
        value.assign(std::string(20, 'a'));
 | 
						|
        EXPECT_EQ(value, std::string(16, 'a'));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assign_should_truncate_and_set_last_element_to_zero_for_32)
 | 
						|
    {
 | 
						|
        ESM::NAME32 value;
 | 
						|
        value.assign(std::string(33, 'a'));
 | 
						|
        EXPECT_EQ(value, std::string(31, 'a'));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assign_should_truncate_and_set_last_element_to_zero_for_64)
 | 
						|
    {
 | 
						|
        ESM::NAME64 value;
 | 
						|
        value.assign(std::string(65, 'a'));
 | 
						|
        EXPECT_EQ(value, std::string(63, 'a'));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, assignment_operator_is_supported_for_uint32)
 | 
						|
    {
 | 
						|
        ESM::NAME value;
 | 
						|
        value = static_cast<uint32_t>(0xFEDCBA98u);
 | 
						|
        EXPECT_EQ(value, static_cast<uint32_t>(0xFEDCBA98u)) << value.toInt();
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, construction_from_uint32_is_supported)
 | 
						|
    {
 | 
						|
        constexpr ESM::NAME value(0xFEDCBA98u);
 | 
						|
        EXPECT_EQ(value, static_cast<std::uint32_t>(0xFEDCBA98u)) << value.toInt();
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, construction_from_RecNameInts_is_supported)
 | 
						|
    {
 | 
						|
        constexpr ESM::NAME value(ESM::RecNameInts::REC_ACTI);
 | 
						|
        EXPECT_EQ(value, static_cast<std::uint32_t>(ESM::RecNameInts::REC_ACTI)) << value.toInt();
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_for_not_convertible_to_uint32_with_string_literal)
 | 
						|
    {
 | 
						|
        const ESM::FixedString<5> value("abcd");
 | 
						|
        EXPECT_EQ(value, "abcd");
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_for_not_convertible_to_uint32_with_fixed_size_char_array)
 | 
						|
    {
 | 
						|
        const ESM::FixedString<5> value("abcd");
 | 
						|
        const char other[5] = { 'a', 'b', 'c', 'd', '\0' };
 | 
						|
        EXPECT_EQ(value, other);
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_for_not_convertible_to_uint32_with_const_char_pointer)
 | 
						|
    {
 | 
						|
        const ESM::FixedString<5> value("abcd");
 | 
						|
        const char other[5] = { 'a', 'b', 'c', 'd', '\0' };
 | 
						|
        EXPECT_EQ(value, static_cast<const char*>(other));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_for_not_convertible_to_uint32_with_string)
 | 
						|
    {
 | 
						|
        const ESM::FixedString<5> value("abcd");
 | 
						|
        EXPECT_EQ(value, std::string("abcd"));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_for_not_convertible_to_uint32_with_string_view)
 | 
						|
    {
 | 
						|
        const ESM::FixedString<5> value("abcd");
 | 
						|
        const std::string other("abcd");
 | 
						|
        EXPECT_EQ(value, std::string_view(other));
 | 
						|
    }
 | 
						|
 | 
						|
    TEST(EsmFixedString, equality_operator_should_not_get_out_of_bounds)
 | 
						|
    {
 | 
						|
        ESM::FixedString<5> value;
 | 
						|
        const char other[5] = { 'a', 'b', 'c', 'd', 'e' };
 | 
						|
        std::memcpy(value.mData, other, sizeof(other));
 | 
						|
        EXPECT_EQ(value, static_cast<const char*>(other));
 | 
						|
    }
 | 
						|
}
 |