/** * @file test_version.cpp * @brief ViewDesignEngine 版本信息单元测试 */ #include #include "vde/core/version.h" #include using namespace vde::core; // ═══════════════════════════════════════════════════════════════ // 编译时版本宏测试 // ═══════════════════════════════════════════════════════════════ TEST(VersionMacro, MajorVersion) { EXPECT_EQ(VDE_VERSION_MAJOR, 1); } TEST(VersionMacro, MinorVersion) { EXPECT_EQ(VDE_VERSION_MINOR, 0); } TEST(VersionMacro, PatchVersion) { EXPECT_EQ(VDE_VERSION_PATCH, 1); } TEST(VersionMacro, VersionString) { EXPECT_STREQ(VDE_VERSION_STRING, "1.0.1"); } TEST(VersionMacro, VersionNum) { EXPECT_EQ(VDE_VERSION_NUM, 10001); // 1*10000 + 0*100 + 1 } TEST(VersionMacro, VersionCodeFunction) { EXPECT_EQ(VDE_VERSION_CODE(2, 3, 4), 20304); EXPECT_EQ(VDE_VERSION_CODE(0, 0, 1), 1); EXPECT_EQ(VDE_VERSION_CODE(10, 20, 30), 102030); } // ═══════════════════════════════════════════════════════════════ // 构建信息测试 // ═══════════════════════════════════════════════════════════════ TEST(BuildInfo, BuildTypeDefined) { EXPECT_TRUE(std::string(VDE_BUILD_TYPE).size() > 0); } TEST(BuildInfo, CompilerInfoDefined) { EXPECT_TRUE(std::string(VDE_COMPILER_INFO).size() > 0); } TEST(BuildInfo, CppStandardString) { std::string cpp = VDE_CPP_STANDARD_STRING; EXPECT_TRUE(cpp == "C++20" || cpp == "C++17" || cpp == "C++14" || cpp == "C++11" || cpp == "C++03"); // 项目要求 C++20 EXPECT_EQ(cpp, "C++20"); } // ═══════════════════════════════════════════════════════════════ // VersionInfo 结构体测试 // ═══════════════════════════════════════════════════════════════ TEST(VersionInfo, DefaultConstruction) { VersionInfo info = vde_version(); EXPECT_EQ(info.major, 1); EXPECT_EQ(info.minor, 0); EXPECT_EQ(info.patch, 1); EXPECT_EQ(info.version_string, "1.0.1"); EXPECT_FALSE(info.build_type.empty()); EXPECT_FALSE(info.compiler_info.empty()); EXPECT_EQ(info.cpp_standard, "C++20"); } TEST(VersionInfo, BuildTimestamp) { VersionInfo info = vde_version(); // 时间戳可能为 unknown 或 ISO 8601 格式 EXPECT_FALSE(info.build_timestamp.empty()); } // ═══════════════════════════════════════════════════════════════ // vde_version_string 测试 // ═══════════════════════════════════════════════════════════════ TEST(VersionString, Format) { std::string vs = vde_version_string(); // 格式:ViewDesignEngine v1.0.1 (C++20, GCC x.x) EXPECT_TRUE(vs.find("ViewDesignEngine v1.0.1") != std::string::npos); EXPECT_TRUE(vs.find("C++20") != std::string::npos); EXPECT_TRUE(vs.find("(") != std::string::npos); EXPECT_TRUE(vs.find(")") != std::string::npos); } TEST(VersionString, NonEmpty) { EXPECT_FALSE(vde_version_string().empty()); EXPECT_GT(vde_version_string().size(), 20u); } // ═══════════════════════════════════════════════════════════════ // vde_version_compare 测试 // ═══════════════════════════════════════════════════════════════ TEST(VersionCompare, Equality) { EXPECT_EQ(vde_version_compare(1, 0, 1, 1, 0, 1), 0); EXPECT_EQ(vde_version_compare(2, 0, 0, 2, 0, 0), 0); } TEST(VersionCompare, Less) { EXPECT_LT(vde_version_compare(1, 0, 0, 1, 0, 1), 0); EXPECT_LT(vde_version_compare(1, 0, 0, 2, 0, 0), 0); EXPECT_LT(vde_version_compare(1, 9, 9, 2, 0, 0), 0); } TEST(VersionCompare, Greater) { EXPECT_GT(vde_version_compare(2, 0, 0, 1, 0, 0), 0); EXPECT_GT(vde_version_compare(1, 0, 2, 1, 0, 1), 0); EXPECT_GT(vde_version_compare(1, 1, 0, 1, 0, 99), 0); } TEST(VersionCompare, Transitivity) { // 1.0.0 < 1.0.1 < 1.1.0 < 2.0.0 int cmp1 = vde_version_compare(1, 0, 0, 1, 0, 1); int cmp2 = vde_version_compare(1, 0, 1, 1, 1, 0); int cmp3 = vde_version_compare(1, 1, 0, 2, 0, 0); EXPECT_LT(cmp1, 0); EXPECT_LT(cmp2, 0); EXPECT_LT(cmp3, 0); }