// 灵台引擎核心测试(doctest,ADR-025)。 #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include #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(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); }