Files
XCEngine/tests/containers/test_string.cpp
ssdfasd 34c75e7129 feat: 实现Containers、Memory、Threading核心模块及单元测试
- Containers: String, Array, HashMap 容器实现及测试
- Memory: Allocator, LinearAllocator, PoolAllocator, ProxyAllocator, MemoryManager 实现及测试
- Threading: Mutex, SpinLock, ReadWriteLock, Thread, Task, TaskSystem 实现及测试
- 修复Windows平台兼容性: _aligned_malloc, std::hash特化
- 修复构建错误和测试用例问题
2026-03-13 20:37:08 +08:00

134 lines
3.0 KiB
C++

#include <gtest/gtest.h>
#include <XCEngine/Containers/String.h>
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