From 40bfd175c4722ecb817708d6bedd3be61a59e5dd Mon Sep 17 00:00:00 2001 From: chentianya Date: Fri, 21 Aug 2026 22:33:14 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B5=20D=20=E6=AD=A5=E9=AA=A4=201?= =?UTF-8?q?0=EF=BC=9A=E6=B5=8B=E8=AF=95=E5=9B=BA=E5=8C=96=EF=BC=88CLI=20?= =?UTF-8?q?=E7=BA=A7=20+=20=E5=86=99=E4=BE=A7=E8=87=AA=E6=A3=80=EF=BC=89?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - codegen_test line1:compiler::StbView 自检(model_matches STATOR1 + sha_ok), 篡改一字节 → sha 校验失败 - CTest 新增:cli_compile(--machine 编译退出 0)、cli_missing_machine(缺参 WILL_FAIL) - 冻结哈希确认:工程哈希只依赖源文件内容(0xc3fe4ae74ad45900 不变,compiler_test 通过) - 全量 ctest 14/14 全绿(新增 2 个 CLI 用例) --- tests/CMakeLists.txt | 10 ++++++++++ tests/src/codegen_test.cpp | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 966d654..e05b6e8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -4,6 +4,16 @@ add_test(NAME stcompiler_version add_test(NAME bytecode_executor_version COMMAND BytecodeExecutor) +# CLI 级:编译需 --machine;缺参必须失败(WILL_FAIL) +add_test(NAME cli_compile + COMMAND STCompiler ${CMAKE_SOURCE_DIR}/tests/cases/01_empty_main/project.toml + -o ${CMAKE_CURRENT_BINARY_DIR}/cli_case01.stb + --machine ${CMAKE_SOURCE_DIR}/compiler/machine.toml) +add_test(NAME cli_missing_machine + COMMAND STCompiler ${CMAKE_SOURCE_DIR}/tests/cases/01_empty_main/project.toml + -o ${CMAKE_CURRENT_BINARY_DIR}/cli_nope.stb) +set_tests_properties(cli_missing_machine PROPERTIES WILL_FAIL TRUE) + # isa 合同测试:链接 isa 库,断言覆盖饱和/编解码/disasm/哈希/映像/sidecar add_executable(isa_test ./src/isa_test.cpp) diff --git a/tests/src/codegen_test.cpp b/tests/src/codegen_test.cpp index 4f28b18..2146d57 100644 --- a/tests/src/codegen_test.cpp +++ b/tests/src/codegen_test.cpp @@ -698,6 +698,16 @@ static bool test_line1() { CHECK(std::strcmp(buf, "STORE_Q r8, 3") == 0); // Q0_0(io.output) isa::disasm(im[16], buf, sizeof buf); CHECK(std::strcmp(buf, "RET") == 0); + + // 12.13 写侧自检:型号标识 + SHA-256(compiler::StbView) + const compiler::StbView self = compiler::StbView::from(img); + CHECK(self.ok()); + CHECK(self.model_matches("STATOR", 1)); + CHECK(self.sha_ok()); + std::vector tampered = img; + tampered[100] ^= 0x01; // 篡改代码段一字节 + const compiler::StbView bad = compiler::StbView::from(tampered); + CHECK(bad.ok() && !bad.sha_ok()); // 结构可解析但 SHA 校验失败 return true; }