#include #include using namespace XCEngine::Containers; namespace { TEST(Containers_String, DefaultConstructor_EmptyString) { String s; EXPECT_EQ(s.Length(), 0u); EXPECT_STREQ(s.CStr(), ""); EXPECT_TRUE(s.Empty()); } TEST(Containers_String, ConstructorFromCString) { String s("Hello"); EXPECT_EQ(s.Length(), 5u); EXPECT_STREQ(s.CStr(), "Hello"); } TEST(Containers_String, CopyConstructor) { String s1("Hello"); String s2(s1); EXPECT_EQ(s2.Length(), 5u); EXPECT_STREQ(s2.CStr(), "Hello"); } TEST(Containers_String, MoveConstructor) { String s1("Hello"); String s2(std::move(s1)); EXPECT_EQ(s2.Length(), 5u); EXPECT_STREQ(s2.CStr(), "Hello"); } TEST(Containers_String, CopyAssignment) { String s1("Hello"); String s2; s2 = s1; EXPECT_EQ(s2.Length(), 5u); EXPECT_STREQ(s2.CStr(), "Hello"); } TEST(Containers_String, MoveAssignment) { String s1("Hello"); String s2; s2 = std::move(s1); EXPECT_EQ(s2.Length(), 5u); EXPECT_STREQ(s2.CStr(), "Hello"); } TEST(Containers_String, OperatorPlusEqual_String) { String s("Hello"); s += String(" World"); EXPECT_EQ(s.Length(), 11u); EXPECT_STREQ(s.CStr(), "Hello World"); } TEST(Containers_String, OperatorPlusEqual_CString) { String s("Hello"); s += " World"; EXPECT_EQ(s.Length(), 11u); EXPECT_STREQ(s.CStr(), "Hello World"); } TEST(Containers_String, Substring) { String s("Hello World"); String sub = s.Substring(0, 5); EXPECT_STREQ(sub.CStr(), "Hello"); String sub2 = s.Substring(6); EXPECT_STREQ(sub2.CStr(), "World"); String sub3 = s.Substring(6, 3); EXPECT_STREQ(sub3.CStr(), "Wor"); } TEST(Containers_String, Trim) { String s(" Hello "); String trimmed = s.Trim(); EXPECT_STREQ(trimmed.CStr(), "Hello"); } TEST(Containers_String, ToLower) { String s("HELLO"); String lower = s.ToLower(); EXPECT_STREQ(lower.CStr(), "hello"); } TEST(Containers_String, ToUpper) { String s("hello"); String upper = s.ToUpper(); EXPECT_STREQ(upper.CStr(), "HELLO"); } TEST(Containers_String, Find_Found) { String s("Hello World"); EXPECT_EQ(s.Find("World"), 6u); EXPECT_EQ(s.Find("Hello"), 0u); } TEST(Containers_String, Find_NotFound) { String s("Hello"); EXPECT_EQ(s.Find("World"), String::npos); } TEST(Containers_String, StartsWith) { String s("Hello World"); EXPECT_TRUE(s.StartsWith("Hello")); EXPECT_TRUE(s.StartsWith(String("Hello"))); EXPECT_FALSE(s.StartsWith("World")); } TEST(Containers_String, EndsWith) { String s("Hello World"); EXPECT_TRUE(s.EndsWith("World")); EXPECT_TRUE(s.EndsWith(String("World"))); EXPECT_FALSE(s.EndsWith("Hello")); } TEST(Containers_String, Clear) { String s("Hello"); s.Clear(); EXPECT_EQ(s.Length(), 0u); EXPECT_TRUE(s.Empty()); } TEST(Containers_String, Reserve) { String s("Hi"); s.Reserve(100); EXPECT_GE(s.Capacity(), 100u); } } // namespace