Files
linuxcncWebWASM/docs/linuxcnc-web-wasm-source-test-execution-plan.md

3.1 KiB
Raw Blame History

LinuxCNC 源测试对标执行计划

本计划只服务于 LinuxCNC 仿真功能对标。LinuxCNC 源程序测试工具是行为来源,WASM/native/Worker 适配器必须保留原测试输入、期望输出、错误语义和资源依赖;不能把自建 smoke test 当作源测试替代品。

对标对象

  • linuxcnc/scripts/runtests:递归发现 test.hal、test.sh、test,执行 halrun/shell/executable,并按 expected 或 checkresult 判定。
  • linuxcnc/tests/**:HAL regression/functional、interp、remap、IO、motion、tool、startup、经典梯形图、限位和配置测试。
  • linuxcnc/unit_tests/interp:test_interp C++ 单元测试目标。
  • linuxcnc/unit_tests/tp:test_blendmath TP 单元测试目标。
  • linuxcnc/configs/sim/**:INI/HAL/程序/Python/VCP/CLP 启动闭包和用户工作流入口。

适配分类

  1. PURE_REGRESSION:只依赖 halrun/解释器/TP/固定 tick,保留 stdout 与 expected 字节对照。
  2. PURE_FUNCTIONAL:使用 checkresult,将检查输入和结果映射成稳定 JSON 状态。
  3. WORKER_SIM_ADAPTER:需要真实 Worker session、配置启动或数字孪生;输入保持源文件原样。
  4. UNIT_NATIVE_WASM:unit_tests C/C++ 目标建立 native 与 WASM 双 runner。
  5. HOST_EXCLUDED:sudo、TCP、真实设备、内核实时、动态模块、GUI/窗口或任意宿主路径;只记录稳定排除原因,不伪造通过。
  6. SOURCE_BLOCKED:源输入、expected、checkresult 或依赖缺失;保留 source_id 和诊断。

执行阶段

阶段 任务 产物
S5-01 发现并分类源测试,复制 runtests 判定语义 source-test matrix/report
S5-02 执行无宿主依赖的 runtests 纯仿真子集 native/WASM/Worker JSONL diff
S5-03 迁移 unit_tests/interp 与 unit_tests/tp CTest/WASM golden diff
S5-04 迁移 tests/interp/**、remap、O-word、filter block/error/canonical diff
S5-05 迁移 HAL regression/functional 和 .comp pin/signal/thread/output diff
S5-06 迁移 IO/startup/tool/limit/ClassicLadder device/task/recovery diff
S5-07 批量执行 configs/sim/** 启动和工作流 233 entrypoint READY/BLOCKED/diff matrix
S5-08 汇总差异、重复执行和恢复终点 full source-test parity report

每个测试的证据

每个 source test 必须记录:source_id、路径、来源 hash、runner 命令、输入 fixture hash、expected/checkresult hash、适配分类、状态、stdout/stderr hash、首个差异字段/行、逻辑 tick、state/event hash、失败原因和下一步任务。宿主排除不计入通过率;缺失输入不降级为通过。

通过条件

  • 源测试发现数与锁定 source index 一致,无孤儿、重复或静默跳过。
  • expected 测试逐字节一致;checkresult 测试使用同一判定条件并输出结构化差异。
  • native/WASM/Worker 使用同一输入和命令序列,首个差异可定位到 tick/字段/单位/错误列。
  • 1x、fast、single-step、recover 的源测试终点 hash 一致。
  • HOST_EXCLUDED、SOURCE_BLOCKED 独立统计,不伪造为 PASSED。