From 77d7fd4e006e3aa46b05b9312cbd9e408eadc404 Mon Sep 17 00:00:00 2001 From: Lveyou <1339484752@qq.com> Date: Fri, 4 Sep 2026 10:55:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dl/math/dl_texture_pack.h | 1 + project/dl_unit_test/test_base.cpp | 31 +++++++++++++ project/dl_unit_test/test_io.cpp | 65 ++++++++++++++++++++++++++++ project/dl_unit_test/test_math.cpp | 46 ++++++++++++++++++++ project/dl_unit_test/test_memory.cpp | 32 ++++++++++++++ 5 files changed, 175 insertions(+) diff --git a/dl/math/dl_texture_pack.h b/dl/math/dl_texture_pack.h index bbcff6e6..d3fc4d41 100644 --- a/dl/math/dl_texture_pack.h +++ b/dl/math/dl_texture_pack.h @@ -19,6 +19,7 @@ #include #include "dl_type.h" +#include "dl_align.h" //! 纹理打包算法 namespace dl::TexturePack diff --git a/project/dl_unit_test/test_base.cpp b/project/dl_unit_test/test_base.cpp index d1944cc8..ed857040 100644 --- a/project/dl_unit_test/test_base.cpp +++ b/project/dl_unit_test/test_base.cpp @@ -502,3 +502,34 @@ TEST(EraseTest, First) EXPECT_EQ(v[1], 3); EXPECT_EQ(v[2], 2); } + +//------------------------------Any------------------------------ +TEST(AnyTest, Equal) +{ + std::vector v = { 1, 2, 3 }; + EXPECT_TRUE(dl::Any::Equal(v, 2)); + EXPECT_FALSE(dl::Any::Equal(v, 5)); +} + +TEST(AnyTest, Zero) +{ + std::vector v = { 1, 0, 3 }; + EXPECT_TRUE(dl::Any::Zero(v)); + + std::vector v2 = { 1, 2, 3 }; + EXPECT_FALSE(dl::Any::Zero(v2)); +} + +TEST(AnyTest, Yes) +{ + std::vector v = { 1, 3, 5, 8 }; + EXPECT_TRUE(dl::Any::Yes(v, [](int x) { return x % 2 == 0; })); + EXPECT_FALSE(dl::Any::Yes(v, [](int x) { return x > 100; })); +} + +TEST(AnyTest, Less) +{ + std::vector v = { 5, 10, 15 }; + EXPECT_TRUE(dl::Any::Less(v, 10)); + EXPECT_FALSE(dl::Any::Less(v, 5)); +} diff --git a/project/dl_unit_test/test_io.cpp b/project/dl_unit_test/test_io.cpp index ddf9dd16..c8639337 100644 --- a/project/dl_unit_test/test_io.cpp +++ b/project/dl_unit_test/test_io.cpp @@ -14,6 +14,7 @@ #include "io/dl_json.h" #include "io/dl_file.h" #include "memory/dl_code_cvt.h" +#include "render/dl_factory.h" TEST(JsonTest, ParseArray) { @@ -63,6 +64,26 @@ TEST(JsonTest, ParseInvalid) EXPECT_TRUE(j.is_null()); } +TEST(JsonTest, SaveFileDump) +{ + json j = dl::Json::ParseString(R"({"a": 1, "b": "hello"})"); + + // Dump 成字符串 + std::string dump = dl::Json::Dump(j); + EXPECT_NE(dump.find("\"a\""), std::string::npos); + EXPECT_NE(dump.find("1"), std::string::npos); + + // SaveFile + ParseFile 往返 + std::string path = dl::g_factory->GetPathTemp() + "dl_json_save_test.json"; + ASSERT_TRUE(dl::Json::SaveFile(j, path)); + + json j2 = dl::Json::ParseFile(path); + EXPECT_EQ(j2["a"], 1); + EXPECT_EQ(j2["b"], "hello"); + + dl::File::Delete(path); +} + //------------------------------File------------------------------ TEST(FileTest, GetExtension) { @@ -124,3 +145,47 @@ TEST(CodeCvtTest, Utf32Roundtrip) std::string back = dl::CodeCvt::Utf32ToUtf8(u32); EXPECT_EQ(back, u8); } + +//------------------------------File 文件操作------------------------------ +TEST(FileTest, CreateReadDelete) +{ + std::string dir = dl::g_factory->GetPathTemp() + "dl_file_test/"; + dl::File::Delete(dir, true); + + ASSERT_TRUE(dl::File::CreateFolder(dir)); + EXPECT_TRUE(dl::File::IsExist(dir)); + + std::string file = dir + "a.txt"; + ASSERT_TRUE(dl::File::SaveString("hello", file)); + EXPECT_TRUE(dl::File::IsExist(file)); + EXPECT_FALSE(dl::File::IsExist(dir + "none.txt")); + + EXPECT_EQ(dl::File::GetString(file), "hello"); + + EXPECT_TRUE(dl::File::Delete(file)); + EXPECT_FALSE(dl::File::IsExist(file)); + + dl::File::Delete(dir, true); +} + +TEST(FileTest, CopyRename) +{ + std::string dir = dl::g_factory->GetPathTemp() + "dl_file_test/"; + dl::File::Delete(dir, true); + ASSERT_TRUE(dl::File::CreateFolder(dir)); + + std::string src = dir + "src.txt"; + std::string dst = dir + "dst.txt"; + ASSERT_TRUE(dl::File::SaveString("data", src)); + + EXPECT_TRUE(dl::File::Copy(src, dst)); + EXPECT_TRUE(dl::File::IsExist(dst)); + EXPECT_EQ(dl::File::GetString(dst), "data"); + + std::string dst2 = dir + "dst2.txt"; + EXPECT_TRUE(dl::File::Rename(dst, dst2)); + EXPECT_TRUE(dl::File::IsExist(dst2)); + EXPECT_FALSE(dl::File::IsExist(dst)); + + dl::File::Delete(dir, true); +} diff --git a/project/dl_unit_test/test_math.cpp b/project/dl_unit_test/test_math.cpp index 593e1904..92591558 100644 --- a/project/dl_unit_test/test_math.cpp +++ b/project/dl_unit_test/test_math.cpp @@ -13,6 +13,7 @@ #include "math/dl_math.h" #include "math/dl_random.h" +#include "math/dl_texture_pack.h" TEST(MathTest, Pow) { @@ -189,3 +190,48 @@ TEST(RandomTest, Select) EXPECT_GE(sel, 1); EXPECT_LE(sel, 5); } + +//------------------------------TexturePack------------------------------ +TEST(TexturePackTest, Dynamic) +{ + dl::TexturePack::Dynamic<2> pack; + pack.Reset({ 100, 100 }); + + dl::RectU r1; + EXPECT_TRUE(pack.Add({ 30, 30 }, r1)); + EXPECT_EQ(r1[0], 0u); + EXPECT_EQ(r1[1], 0u); + EXPECT_EQ(r1[2], 30u); + EXPECT_EQ(r1[3], 30u); + + dl::RectU r2; + EXPECT_TRUE(pack.Add({ 30, 30 }, r2)); + EXPECT_EQ(r2[0], 30u); // 同一行,x 偏移 + EXPECT_EQ(r2[1], 0u); + + dl::RectU r3; + EXPECT_TRUE(pack.Add({ 30, 30 }, r3)); + EXPECT_EQ(r3[0], 60u); + EXPECT_EQ(r3[1], 0u); + + dl::RectU r4; + EXPECT_TRUE(pack.Add({ 30, 30 }, r4)); + EXPECT_EQ(r4[0], 0u); // 换行 + EXPECT_EQ(r4[1], 30u); +} + +TEST(TexturePackTest, Static) +{ + dl::TexturePack::Static pack; + pack.SetSize({ 100, 100 }); + + std::list boxes = { {50, 50}, {50, 50}, {100, 50} }; + std::vector results; + pack.Calc(boxes, + [](const dl::Size& s) { return s; }, + [&](const dl::Size& s, const dl::PointU& lt) { results.push_back(lt); }); + + // 3 个箱子总面积 10000 = 100*100,能全部放下 + EXPECT_TRUE(boxes.empty()); + EXPECT_EQ(results.size(), 3u); +} diff --git a/project/dl_unit_test/test_memory.cpp b/project/dl_unit_test/test_memory.cpp index 98cead21..b9da604e 100644 --- a/project/dl_unit_test/test_memory.cpp +++ b/project/dl_unit_test/test_memory.cpp @@ -164,3 +164,35 @@ TEST(StreamTest, WriteReadUnorderedMap) EXPECT_EQ(m2["x"], 10); EXPECT_EQ(m2["y"], 20); } + +//------------------------------Buffer------------------------------ +TEST(BufferTest, Hex) +{ + // "Hello" 的十六进制 + dl::Buffer buf = dl::CreateBufferHex("48656c6c6f"); + ASSERT_EQ(buf.size(), 5u); + EXPECT_EQ(dl::to_string(buf), "Hello"); + EXPECT_EQ(dl::to_string_hex(buf), "48656c6c6f"); + EXPECT_EQ(dl::to_string_hex(buf, false, true), "0x48656c6c6f"); +} + +TEST(BufferTest, Append) +{ + dl::Buffer buf = dl::CreateBuffer(dl::CreateBufferView(std::string("hello"))); + dl::BufferAppend(buf, dl::CreateBufferView(std::string(" world"))); + EXPECT_EQ(dl::to_string(buf), "hello world"); +} + +TEST(BufferTest, Basic) +{ + dl::Buffer buf; + EXPECT_TRUE(buf.empty()); + + buf.resize(10); + EXPECT_EQ(buf.size(), 10u); + EXPECT_FALSE(buf.empty()); + + buf.clear(); + EXPECT_TRUE(buf.empty()); + EXPECT_EQ(buf.size(), 0u); +}