- Containers: String, Array, HashMap 容器实现及测试 - Memory: Allocator, LinearAllocator, PoolAllocator, ProxyAllocator, MemoryManager 实现及测试 - Threading: Mutex, SpinLock, ReadWriteLock, Thread, Task, TaskSystem 实现及测试 - 修复Windows平台兼容性: _aligned_malloc, std::hash特化 - 修复构建错误和测试用例问题
134 lines
3.0 KiB
C++
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
|