Files
hunjing/engine/tests/test_core.cpp
T
chenxin 3fbcd0437c 🎉 feat: 建立阶段 0 工程骨架与 OpenAPI 契约机器化(WP-01 起步)
- Makefile:统一命令入口(backend/engine/docker/openapi/generate,含 make help)
- backend:FastAPI + uv 最小工程,统一错误体(契约第 7 节)、ADR-015 平台 ID 生成与校验(uuid-utils);pytest 7 项、ruff、mypy strict、启动冒烟全部通过
- engine:灵台引擎 C++23/CMake 骨架,按 Lingtai C ABI 契约实现 lingtai.h(13 个 HjStatus、版本协商、句柄表防二次释放、线程局部错误上下文);doctest 5 用例通过,nm 验证仅导出 hj_* 符号
- openapi:OpenAPI 3.1 单一真源初始版(错误体/分页/Money/首批平台 ID/ContentBlock 全 21 类型/流事件 envelope),Redocly lint 0 错误、bundle 通过
- frontend:Next.js 最小骨架,openapi-typescript 生成 API 类型并通过 strict tsc
- docker:hunjing-postgres(pgvector:17)compose;.env.example 与 config 示例
- ADR-025:登记测试与契约工具链(doctest/libFuzzer/Redocly/openapi-typescript/uuid-utils)
- desktop:Tauri v2 占位与初始化说明(WP-10 启动)
2026-09-09 21:45:04 +08:00

40 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 灵台引擎核心测试(doctest,ADR-025)。
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>
#include "hunjing/lingtai.h"
TEST_CASE("ABI 版本协商") {
CHECK(hj_abi_version() == HJ_ABI_VERSION);
}
TEST_CASE("引擎创建与释放") {
HjEngine *engine = nullptr;
REQUIRE(hj_engine_new(HJ_ABI_VERSION, &engine) == HJ_OK);
REQUIRE(engine != nullptr);
CHECK(hj_engine_free(engine) == HJ_OK);
}
TEST_CASE("major 不匹配时拒绝初始化且不产生句柄") {
HjEngine *engine = reinterpret_cast<HjEngine *>(0x1);
CHECK(hj_engine_new(HJ_ABI_VERSION + 100, &engine) == HJ_ERR_UNSUPPORTED_ABI);
CHECK(engine == nullptr);
CHECK(std::string(hj_last_error()).find("ABI") != std::string::npos);
}
TEST_CASE("非法参数与二次释放不崩溃") {
CHECK(hj_engine_new(HJ_ABI_VERSION, nullptr) == HJ_ERR_INVALID_ARGUMENT);
CHECK(hj_last_error()[0] != '\0');
HjEngine *engine = nullptr;
REQUIRE(hj_engine_new(HJ_ABI_VERSION, &engine) == HJ_OK);
REQUIRE(hj_engine_free(engine) == HJ_OK);
CHECK(hj_engine_free(engine) == HJ_ERR_HANDLE_INVALID);
}
TEST_CASE("缓冲防御行为") {
CHECK(hj_buffer_free(nullptr) == HJ_ERR_INVALID_ARGUMENT);
CHECK(hj_buffer_data(nullptr) == nullptr);
CHECK(hj_buffer_len(nullptr) == 0);
}