Files
ViewDesignEngine/tests/core/test_version.cpp
T
茂之钳 5bfcbcb8e9
CI / Build & Test (push) Failing after 39s
CI / Release Build (push) Failing after 33s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v1.0.1): tangent_pull + error codes + version + license management
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)
2026-07-27 21:54:46 +08:00

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);
}