#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ run_unit_test.py — 录波触发与封存链路主机侧单元测试运行器 做什么:把 test/host/wave_trig/wave_trig_test.c 与生产源 App/algo/wave_ring.c、 App/algo/wave_store.c 一起用 MSVC cl.exe 编成主机可执行并跑一遍。 为什么要主机测:wave_ring / wave_store 是纯逻辑层(无 HAL / CMSIS / RTOS / FatFs), 但真正容易静默出错的是**并发语义**:ACK 前重录、冷却期当冻结窗、没交棒就 ACK 吃掉轮转号、打包游标把「列走完」误报成参数错。这些不需要板子,需要的是 把 1 kHz 逐拍状态机跑满一整段(触发后 160 拍 + 冷却 500 拍 + 超时 2000 拍) 再逐字节核对产出的段文件——台架上做同样的事要几十分钟且不可重复。 桩的边界:无。两份被测源零平台依赖,封存瞬间事实由测试自己按 §6.3 填 (所以不需要 test/host/common 下的 FatFs / dbg_log 假件)。 用法:python test/host/wave_trig/run_unit_test.py 退出码:0 = 全部通过;1 = 有用例失败;2 = 环境错误(找不到 cl.exe 等) 设计依据:docs/子系统设计/故障录波设计说明.md §4.2 §5.1 §5.2 §6.2 §6.3; docs/子系统设计/故障录波设计说明.md §10 板级判据「注入 1 V/50 Hz → FTP 拉回 → PC 量周波数 与幅值一致」里不需要板子的那一半(字节与语义),本套先把它钉住。 创建日期:2026-10-29 """ import os import sys HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE))) sys.path.insert(0, os.path.join(ROOT, "test", "host", "common")) from unit_test_harness import TestBuild, run_host_unit_test BUILD = TestBuild( name="Wave Trig Tests", src=os.path.join(HERE, "wave_trig_test.c"), include_dirs=[os.path.join(ROOT, "App", "algo"), HERE], summary_marker="=== Wave Trig Tests:", ) if __name__ == "__main__": sys.exit(run_host_unit_test(BUILD))