5bfcbcb8e9
Remaining P3 item: - tangent_pull: maintain G1 tangency when pulling faces System infrastructure: - Unified ErrorCode (0-7xxx): ErrorInfo with Chinese messages - Version system: VDE_VERSION_MAJOR/MINOR/PATCH macros, vde_version() → VersionInfo, vde_version_string() - License management: LicenseTier (Community/Professional/Enterprise), LicenseKey (VDE-XXXX-XXXX, Base32 + HMAC-SHA256 signature), LicenseManager singleton with trial support - Convenience header: vde/vde_version.h Tests: 43 total (26 license + 17 version)
131 lines
5.1 KiB
C++
131 lines
5.1 KiB
C++
/**
|
|
* @file test_version.cpp
|
|
* @brief ViewDesignEngine 版本信息单元测试
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include "vde/core/version.h"
|
|
#include <string>
|
|
|
|
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);
|
|
}
|