并入zoost库。

This commit is contained in:
2026-03-29 19:02:44 +08:00
parent 4419d606a8
commit 1346521ad0
269 changed files with 114399 additions and 12 deletions

255
test/bufferTest.cpp Normal file
View File

@@ -0,0 +1,255 @@
#include <gtest/gtest.h>
#include <zoost/zoost.h>
TEST(MutBufferTest, ConstructorAndGetSize)
{
zoostMutBuffer buffer;
EXPECT_EQ(buffer.GetSize(), 0);
}
TEST(MutBufferTest, PushAndGetSize)
{
zoostMutBuffer buffer;
const char data[] = "Hello";
buffer.Push(data, 5);
EXPECT_EQ(buffer.GetSize(), 5);
}
TEST(MutBufferTest, PushMultipleTimes)
{
zoostMutBuffer buffer;
const char data1[] = "Hello";
const char data2[] = "World";
buffer.Push(data1, 5);
buffer.Push(data2, 5);
EXPECT_EQ(buffer.GetSize(), 10);
}
TEST(MutBufferTest, GetBufferContent)
{
zoostMutBuffer buffer;
const char data[] = "Hello";
buffer.Push(data, 5);
const char* buffer_data = buffer.Data();
EXPECT_EQ(std::memcmp(buffer_data, data, 5), 0);
}
TEST(MutBufferTest, IndexOf_Found)
{
zoostMutBuffer buffer;
const char data[] = "HelloWorld";
buffer.Push(data, 10);
const char search[] = "World";
int index = buffer.IndexOf(search, 5, 0);
EXPECT_EQ(index, 5);
// 从指定位置开始搜索
index = buffer.IndexOf(search, 5, 5);
EXPECT_EQ(index, 5);
}
TEST(MutBufferTest, IndexOf_NotFound)
{
zoostMutBuffer buffer;
const char data[] = "Hello";
buffer.Push(data, 5);
const char search[] = "World";
int index = buffer.IndexOf(search, 5, 0);
EXPECT_EQ(index, -1);
}
TEST(MutBufferTest, IndexOf_InvalidParameters)
{
zoostMutBuffer buffer;
const char data[] = "Hello";
buffer.Push(data, 5);
const char search[] = "World";
// start 为负
int index = buffer.IndexOf(search, 5, -1);
EXPECT_EQ(index, -1);
// start 超过边界
index = buffer.IndexOf(search, 5, 10);
EXPECT_EQ(index, -1);
// size 为0或负
index = buffer.IndexOf(search, 0, 0);
EXPECT_EQ(index, -1);
index = buffer.IndexOf(search, -1, 0);
EXPECT_EQ(index, -1);
}
TEST(MutBufferTest, IndexOf_EmptyBuffer)
{
zoostMutBuffer buffer;
const char search[] = "Hello";
int index = buffer.IndexOf(search, 5, 0);
EXPECT_EQ(index, -1);
}
TEST(MutBufferTest, RemoveOf_NormalCase)
{
zoostMutBuffer buffer;
const char data[] = "HelloWorld";
buffer.Push(data, 10);
// 移除 "World"
buffer.RemoveOf(5, 5);
EXPECT_EQ(buffer.GetSize(), 5);
const char* buffer_data = buffer.Data();
EXPECT_EQ(std::memcmp(buffer_data, "Hello", 5), 0);
}
TEST(MutBufferTest, RemoveOf_PartialAtEnd)
{
zoostMutBuffer buffer;
const char data[] = "HelloWorld";
buffer.Push(data, 10);
// 尝试移除超过末尾的部分
buffer.RemoveOf(7, 5);
EXPECT_EQ(buffer.GetSize(), 7);
const char* buffer_data = buffer.Data();
EXPECT_EQ(std::memcmp(buffer_data, "HelloWo", 7), 0);
}
TEST(MutBufferTest, RemoveOf_InvalidParameters)
{
zoostMutBuffer buffer;
const char data[] = "Hello";
buffer.Push(data, 5);
// start 为负 - 应该不修改
buffer.RemoveOf(-1, 2);
EXPECT_EQ(buffer.GetSize(), 5);
// start 超过边界 - 应该不修改
buffer.RemoveOf(10, 2);
EXPECT_EQ(buffer.GetSize(), 5);
// size 为0或负 - 应该不修改
buffer.RemoveOf(0, 0);
EXPECT_EQ(buffer.GetSize(), 5);
buffer.RemoveOf(0, -1);
EXPECT_EQ(buffer.GetSize(), 5);
}
TEST(MutBufferTest, RemoveOf_RemoveAll)
{
zoostMutBuffer buffer;
const char data[] = "HelloWorld";
buffer.Push(data, 10);
buffer.RemoveOf(0, 10);
EXPECT_EQ(buffer.GetSize(), 0);
}
TEST(MutBufferTest, Clear)
{
zoostMutBuffer buffer;
const char data[] = "HelloWorld";
buffer.Push(data, 10);
EXPECT_EQ(buffer.GetSize(), 10);
buffer.Clear();
EXPECT_EQ(buffer.GetSize(), 0);
}
TEST(MutBufferTest, Clear_EmptyBuffer)
{
zoostMutBuffer buffer;
buffer.Clear();
EXPECT_EQ(buffer.GetSize(), 0);
}
TEST(MutBufferTest, ThreadSafety_PushAndGet)
{
zoostMutBuffer buffer;
// 模拟多线程同时操作
std::thread t1([&buffer]() {
for (int i = 0; i < 1000; ++i) {
const char data[] = "A";
buffer.Push(data, 1);
}
});
std::thread t2([&buffer]() {
for (int i = 0; i < 1000; ++i) {
const char data[] = "B";
buffer.Push(data, 1);
}
});
t1.join();
t2.join();
// 最终大小应该是2000
EXPECT_EQ(buffer.GetSize(), 2000);
}
TEST(MutBufferTest, CombinedOperations)
{
zoostMutBuffer buffer;
// 1. 添加数据
const char data1[] = "Hello ";
const char data2[] = "World ";
const char data3[] = "Test";
buffer.Push(data1, 6);
buffer.Push(data2, 6);
buffer.Push(data3, 4);
EXPECT_EQ(buffer.GetSize(), 16);
// 2. 搜索
const char search[] = "World";
int index = buffer.IndexOf(search, 5, 0);
EXPECT_EQ(index, 6);
// 3. 移除
buffer.RemoveOf(index, 5);
EXPECT_EQ(buffer.GetSize(), 11);
// 4. 验证剩余内容
const char* buffer_data = buffer.Data();
EXPECT_EQ(std::memcmp(buffer_data, "Hello Test", 11), 0);
// 5. 清除
buffer.Clear();
EXPECT_EQ(buffer.GetSize(), 0);
}
TEST(MutBufferTest, BinaryData)
{
zoostMutBuffer buffer;
// 测试二进制数据(包含空字符)
const unsigned char binary_data[] = {0x00, 0x01, 0x02, 0x03, 0x00, 0xFF};
buffer.Push(reinterpret_cast<const char*>(binary_data), 6);
EXPECT_EQ(buffer.GetSize(), 6);
// 搜索包含空字符的模式
const unsigned char pattern[] = {0x02, 0x03, 0x00};
int index = buffer.IndexOf(reinterpret_cast<const char*>(pattern), 3, 0);
EXPECT_EQ(index, 2);
}
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}