refactor(编号): test/host 与 App/Drivers 注释去测试层级号(73 站点 / 64 文件)
同族第二道:代码注释面。41 个 run_unit_test.py 文件头与引用行、common harness 与两份 README、4 个 *_test.c 文件头、App/** 14 处(含 BOM 文件 App/cfg/cfg_file.c)、 GD5F nand_ftl.c 1 处,共 73 站点 / 64 文件;措辞取「主机侧纯逻辑单元测试运行器 (纯标准库)」避免同行「主机侧」重复。 零行为改动(机器证据,不是口头): - 17 个 .c/.h 剥掉注释后与 HEAD **逐字节相同**; - 42 个 .py 走 ast.dump 比较、仅归一 docstring(真实字符串字面量参与比较,故旗标或 输出文本被动过必然报红)→ 全部相等;behaviour_changed=0。 - py_compile 42/42;抽跑 watchdog 47/47、freq 46/46(动手前先取基线,改后同数); CR 字节 0、EF BF BD 0、BOM 与 HEAD 逐一一致、check_bom_drift rc=0。 刻意未动:6 处字符串字面量(FTP 应答 "215 UNIX Type: L8"、lftpd_test.c SYST 断言、 console_log_test.c 的 "L1\r\n"、phasor_test.c 的 "L2-in ring" 文案与 printf 标题)—— 改了就是改测试输出/行为;UI 设计令牌层 L0(ui_tokens.h、ui_content_page.c)与 test/host/README.md 的算法层号是**另外的族**。 两条 SyntaxWarning(ftp_cfg / net_cfg 文件头 \S 转义)**HEAD 同样存在**,已对 HEAD 副本 复现证明非本次引入,未顺手改。
This commit is contained in:
+1
-1
@@ -131,7 +131,7 @@ ADC 引脚电压 V)+ `adc_health_rail_watch()` ×9(「采样通道自检」
|
||||
- 本层**不进** `simulator/CMakeLists.txt`(UI 模拟器不跑采集链路):九个文件全部登记在
|
||||
`scripts/check_registration.py` 的 `SIM_EXEMPT`(附理由),`registration-check` 钩子反向校验(登记簿条目「rs485_task 白名单缺口」)。
|
||||
|
||||
### 4.2 主机侧单测(L0.5)——生产源文件以 `#include` 原样纳入
|
||||
### 4.2 主机侧纯逻辑单测——生产源文件以 `#include` 原样纳入
|
||||
|
||||
| 模块 | 命令 | pre-commit 钩子 |
|
||||
|---|---|---|
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@
|
||||
* 可调(注册进引擎必须先于 cfg_file_load,FTP 鉴权确立的契约);apply/flags
|
||||
* 任意上下文可读(cfg RAM 副本 4 字节对齐字读写在 Cortex-M4 上原子,
|
||||
* 与 defaultTask 的 load/poll 复位存在 µs 级混窗——设计接受,见 .c 头)。
|
||||
* 适用平台:STM32F407ZGTx(Cortex-M4F);主机侧 L0.5 单测 test/host/adc_cal/
|
||||
* 适用平台:STM32F407ZGTx(Cortex-M4F);主机侧纯逻辑单测 test/host/adc_cal/
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-25(道A 标定折算与落盘整定)
|
||||
* 修改记录:
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* ④ 错误计数增量:FRSTDATA 跳变 / HAL ADC·DMA 错误 / STM32 停摆计数。
|
||||
* ⚠ 本层**纯逻辑**:不碰寄存器、不取数、不打日志——输入是调用方
|
||||
* 采集的计数快照,输出是故障位;日志与自检上报由消费者
|
||||
* (`App/task/adc_task.c`)按位执行 → 主机侧可单测(L0.5)。
|
||||
* (`App/task/adc_task.c`)按位执行 → 主机侧可纯逻辑单测。
|
||||
* 适用平台:STM32F407ZGTx + TPAFE5160
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-11
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
* - 信号源优先级:UA 基波 → IA 基波(UA 无幅值时用 IA,台架只注电流亦可测频)。
|
||||
*
|
||||
* ⚠ 本层**纯算法**:不碰寄存器、不碰 RTOS、不自己取数(输入 = phasor 使用区)
|
||||
* → 主机侧可免桩单测(L0.5)。
|
||||
* → 主机侧可免桩纯逻辑单测。
|
||||
* 适用平台:STM32F407ZGTx(Cortex-M4F,硬件 FPU)
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-12(B8)
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
* 计算区后一次 store 翻转,读者先取索引再整体拷贝,全程无锁;
|
||||
* seq 只增,消费者据此判"是否换帧"。
|
||||
* 本层**纯算法**:不碰寄存器、不碰 RTOS、不自己取数(窗自 sample_ring、
|
||||
* 频率/品质由调用方注入)→ 主机侧免桩单测 test/host/meas/(L0.5)。
|
||||
* 频率/品质由调用方注入)→ 主机侧免桩纯逻辑单测 test/host/meas/。
|
||||
* 发布纪律:唯一发布者 = adcTask(在 phasor_run()/freq_run() 之后 200 ms 分频
|
||||
* 调 meas_tick())。评审判据 = 全仓 meas_tick 调用点数 == 1(「数据可信」
|
||||
* §8 风险表"快照双写"行);其余任务/模块**只读**。
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
*(保护功能清单见 docs/算法/继电保护功能复现规划.md)
|
||||
* 每 1 ms 滑动窗刷新 / 双区指针原子交换。
|
||||
* ⚠ 本层**纯算法**:不碰寄存器、不碰任务调度、不自己取数(输入由
|
||||
* `sample_ring` 提供)→ 主机侧可单测(L0.5)。
|
||||
* `sample_ring` 提供)→ 主机侧可纯逻辑单测。
|
||||
* 适用平台:STM32F407ZGTx(Cortex-M4F,硬件 FPU)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-10
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 容量取 **2 个周波(40 点)**,与参考系统 `CN_BUFSAM_CYCLE = 2`
|
||||
* (规划 §10.1)一致,为后续加长数据窗(1.5~2 周波,抗衰减直流,
|
||||
* 见 `傅氏算法详解.md` §9 Q4)预留空间。
|
||||
* 适用平台:STM32F407ZGTx(**纯算法**:不碰寄存器、不碰 RTOS → 可主机侧单测 L0.5)
|
||||
* 适用平台:STM32F407ZGTx(**纯算法**:不碰寄存器、不碰 RTOS → 可主机侧纯逻辑单测)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-10-10
|
||||
* 修改记录:
|
||||
|
||||
+1
-1
@@ -828,7 +828,7 @@ static int s_surgical(char *p_in, size_t in_len, char *p_out, size_t out_cap, si
|
||||
char v[80];
|
||||
/* s_encode 成功返回文本长度(≥1),失败返回 -1:
|
||||
* 故判成功必须 `< 0` 取反,不能写 `== 0`(恒假,
|
||||
* 使补写路径沦为死码,见 2026-10-02 L0.5 修复) */
|
||||
* 使补写路径沦为死码,见 2026-10-02 主机侧纯逻辑单测修复) */
|
||||
if (s_encode(p_key, (const uint8_t *)s_sections[idx].p_data + p_key->offset,
|
||||
v, sizeof(v)) >= 0) {
|
||||
if (s_emit_kv(p_out, out_cap, &off, p_key->name, v) != 0) {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
* ⚠ 边界(勿当成掉电保护):本板无掉电检测硬件,"掉电前强制 flush"
|
||||
* 不可行;"单次写事务进行中掉电"的丢失边界也不因本模块改变。
|
||||
* 适用平台:STM32F407ZGTx + FreeRTOS(CMSIS-RTOS V2);仅 MCU 端,
|
||||
* 主机侧 L0.5 单测 test/host/vol_idle_sync/
|
||||
* 主机侧纯逻辑单测 test/host/vol_idle_sync/
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-25(道F 批 2:写回缓存空闲 flush 收口)
|
||||
* 修改记录:
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
* 模块名称:SOE Record — 事件顺序记录编解码(纯逻辑,双端可测)
|
||||
* 模块功能:定长 64B SOE(Sequence-of-Events)记录的构建与解析:
|
||||
* CP56Time2a 时标 + 记录类型 + 元件号 + 单调序号 + 值 + 校验和。
|
||||
* **零 I/O、零 OS 依赖**(仅 stdint/string)→ 主机侧 L0.5 离线单测
|
||||
* **零 I/O、零 OS 依赖**(仅 stdint/string)→ 主机侧纯逻辑离线单测
|
||||
* (分层约束:协议/记录与硬件 I/O 分离)。
|
||||
* 记录口径(docs/算法/继电保护功能复现规划.md §3.4「SOE 记录」「动作记录」,B9):
|
||||
* 落盘文件 = /log/soe.log(8.3 合规;FF_USE_LFN=0 约束),定长 64B 一条
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
| 子目录 | 协议 | 说明 |
|
||||
|---|---|---|
|
||||
| `iec104/` | IEC 60870-5-104 被控站(TCP 2404 上行) | **纯逻辑**三件套(asdu/pts/link,零 I/O,数据源 vtable 注入)→ 全栈 L0.5 主机单测;板端胶水与点表决策 → `docs/子系统设计/IEC104上行设计说明.md` |
|
||||
| `iec104/` | IEC 60870-5-104 被控站(TCP 2404 上行) | **纯逻辑**三件套(asdu/pts/link,零 I/O,数据源 vtable 注入)→ 全栈主机侧纯逻辑单测;板端胶水与点表决策 → `docs/子系统设计/IEC104上行设计说明.md` |
|
||||
|
||||
## 何时使用本目录
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 模块名称:IEC 60870-5-104 ASDU 编解码(应用层,纯逻辑)
|
||||
* 模块功能:104 规约应用服务数据单元(ASDU)的类型/传送原因常量、组帧与解析。
|
||||
* **零 I/O、零平台依赖**(仅 stdint.h)→ 主机侧 L0.5 可离线单测
|
||||
* **零 I/O、零平台依赖**(仅 stdint.h)→ 主机侧可离线纯逻辑单测
|
||||
* (分层约束:协议解析与硬件 I/O 分离)。
|
||||
* 口径来源:docs/算法/继电保护功能复现规划.md §1.5(B0 产品定义)——
|
||||
* 公共地址 2 字节、传送原因 2 字节、信息体地址 IOA **3 字节**(101 为 2 字节);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* → clock_sync 回调)、试验(C_TS)与进程复位(C_RP,清快照)。
|
||||
* **零 I/O**:收 = on_rx 喂 TCP 流片段,发 = send_apdu 回调,
|
||||
* 时基 = 调用方注入 now_ms(tick ms,回绕安全:差值法)
|
||||
* → 全栈(asdu+pts+link)主机侧 L0.5 可离线跑(分层约束)。
|
||||
* → 全栈(asdu+pts+link)主机侧纯逻辑单测可离线跑(分层约束)。
|
||||
* 参数(DL/T 634.5104 标准默认,§1.5 未另定):k=12 w=8 t1=15s t2=10s t3=20s。
|
||||
* 端口:TCP **2404**(§1.5 B0 定义;本 DTU = 被控站/服务器,主站连入)。
|
||||
* 线程约定:单实例单任务上下文(板端 = 104 服务在 netTask 消息循环内驱动,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* (`prot_elm_run()`:phasor rms → 元件步进),并落实 自检失败闭锁 采样
|
||||
*(保护功能清单见 docs/算法/继电保护功能复现规划.md)
|
||||
* 故障闭锁(`adc_health_flags()` 电平位 → 元件状态复位 + 本拍不判据)。
|
||||
* 判据本体在 `App/algo/prot_elm.c`(纯逻辑,L0.5 已覆盖),本文件
|
||||
* 判据本体在 `App/algo/prot_elm.c`(纯逻辑,主机侧纯逻辑单测已覆盖),本文件
|
||||
* 只做消费/编排(AGENTS 目录地图:task 不装算法)。
|
||||
* 线程约定:仅本任务调 prot_elm_run / prot_set_selfcheck(prot_elm.h 线程约定);
|
||||
* prot_set 写在 P4 前无第二写者(104 定值写经 pts→prot_set,见注)。
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
* DHARA_PAGE_NONE)旧会被地址位截断成真实页 → 静默读写
|
||||
* 错页,现报 DHARA_E_CORRUPT_MAP(不能用 BAD_BLOCK:会
|
||||
* 误标无辜好块;不能用 RECOVER:会触发回收);
|
||||
* ③ 补主机侧移植层单测 test/host/nand_port/(L0.5);
|
||||
* ③ 补主机侧移植层纯逻辑单测 test/host/nand_port/;
|
||||
* ④ 几何字面量收成 FTL_LOG2_PAGE_SIZE / FTL_LOG2_PPB
|
||||
* 单一真源 + 两条负数组编译期守卫:越界上界依赖
|
||||
* log2_ppb,换料时只改 GD5F_* 而忘改字面量会**静默**
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@
|
||||
|
||||
## 相关文档
|
||||
|
||||
- `docs/测试说明/测试开发标准流程.md` — L0~L3 分层与门禁决策表
|
||||
- `docs/测试说明/测试开发标准流程.md` — 测试验证分层与门禁决策表
|
||||
- `docs/测试说明/自动化测试流程.md` — `@test` 细节与失败模式
|
||||
- 各模块测试指南:`docs/测试说明/*_Test_Guide.md`
|
||||
- `docs/测试说明/链路延迟测试说明.md`
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@
|
||||
|
||||
| 文件 | 作用 |
|
||||
|---|---|
|
||||
| `common/unit_test_harness.py` | **通用单测 harness**(L0.5):探测 MSVC → 拼 `INCLUDE`/`LIB` → 编译 → 运行 → 判定退出码。各模块运行器只做**声明式**配置(`TestBuild`),不含工具链细节 |
|
||||
| `common/unit_test_harness.py` | **通用单测 harness**(主机侧纯逻辑单测):探测 MSVC → 拼 `INCLUDE`/`LIB` → 编译 → 运行 → 判定退出码。各模块运行器只做**声明式**配置(`TestBuild`),不含工具链细节 |
|
||||
| `watchdog/run_unit_test.py` | **看门狗判定状态机单测**:声明 `TestBuild` 后调 harness,用 MSVC 离线编译真实 `App/util/task_watchdog.c`(可观测桩驱动),39 用例穷举边界。零硬件、秒级(退出码 0=PASS/1=FAIL/2=环境错误) |
|
||||
| `watchdog/watchdog_test.c` | 测试单元本体(`#include` 生产源码 + 平台钩子桩) |
|
||||
| `watchdog/stub/` | 桩头文件(`main.h`/`iwdg.h`/`dbg_log.h`),覆盖 MCU 版以在 PC 上编译 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""通道标定层(标定折算,adc_cal)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""通道标定层(标定折算,adc_cal)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/adc_cal/adc_cal_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""ADC 采样有效性校验的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""ADC 采样有效性校验的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/adc_health/adc_health_test.c(它以 #include 纳入
|
||||
@@ -26,7 +26,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/算法/继电保护功能复现规划.md §3.1(采样有效性校验);
|
||||
docs/测试说明/测试开发标准流程.md §4.2(L0.5 主机侧单测)。
|
||||
docs/测试说明/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
创建日期:2026-10-11
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""ADC 输入层(语义取数与有效性,adc_input)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""ADC 输入层(语义取数与有效性,adc_input)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/adc_input/adc_input_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""开机账本(boot_stats)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""开机账本(boot_stats)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/boot_stats/boot_stats_test.c(以 #include 纳入**生产源**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""配置引擎(cfg_file)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""配置引擎(cfg_file)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/cfg_file/cfg_file_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 模块名称:配置存储后端(cfg_file_store_mcu)主机侧单元测试(L0.5)
|
||||
* 模块名称:配置存储后端(cfg_file_store_mcu)主机侧纯逻辑单元测试
|
||||
* 模块功能:在 PC 上离线验证 App/cfg/cfg_file_store_mcu.c 的五个卷操作 + 三个堆操作:
|
||||
* cfg_store_read / cfg_store_write_atomic / cfg_store_stat /
|
||||
* cfg_store_remove / 两个路径 getter / alloc-free-heap_free
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""配置存储后端(cfg_file_store_mcu)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
r"""配置存储后端(cfg_file_store_mcu)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/cfg_file_store_mcu/cfg_file_store_mcu_test.c(以
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# test/host/common/ — 主机侧测试公共库
|
||||
|
||||
> L0.5 主机侧单元测试的**通用 harness**:被各模块的单测运行器共享,
|
||||
> 主机侧纯逻辑单测的**通用 harness**:被各模块的单测运行器共享,
|
||||
> 集中承载工具链探测与编译/运行/判定的公共细节。
|
||||
|
||||
## 文件一览
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
看门狗单测最早的运行器(`test/host/watchdog/run_unit_test.py`)把工具链探测、
|
||||
`INCLUDE`/`LIB` 拼接、GBK 解码、`/wd4819` 抑制、退出码契约**全写死在模块目录内**。
|
||||
第二个 L0.5 单测出现时须整段复制——工具链细节一旦修正(新增 VS 版本、SDK 布局
|
||||
第二个主机侧纯逻辑单测出现时须整段复制——工具链细节一旦修正(新增 VS 版本、SDK 布局
|
||||
变化、编码处理调整)就会发散。抽取后各模块运行器只剩"声明式"配置。
|
||||
|
||||
> **边界**:harness **不认识任何模块**——源码路径、桩目录、额外 include、断言
|
||||
@@ -72,7 +72,7 @@ raise SystemExit(run_host_unit_test(TestBuild(name="...", src="...", ...)))
|
||||
|
||||
## 环境要求
|
||||
|
||||
同 L0.5 通用要求(见 [`../../../docs/测试说明/测试开发标准流程.md`](../../../docs/测试说明/测试开发标准流程.md) §4.2):
|
||||
同主机侧纯逻辑单测通用要求(见 [`../../../docs/测试说明/测试开发标准流程.md`](../../../docs/测试说明/测试开发标准流程.md) §4.2):
|
||||
MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不调 `vcvars64.bat`**
|
||||
(内部 `reg.exe` 受限),直接拼环境变量调 `cl.exe`。
|
||||
|
||||
@@ -95,10 +95,10 @@ MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不
|
||||
二进制**——两棵树的 `summary_marker` 一模一样,harness 分辨不出来,等于拿别人的
|
||||
运行结果给自己下结论。2026-10-25 三条道并行时全量 `ci_local` 里 `test-cppcheck` /
|
||||
`test-coverage` 偶发 "files were modified by this hook"、单跑即绿,就是这一类。
|
||||
- **按工作树分家 + 每次跑独占**同时解决"跨树互踩"和"同树并发"(覆盖率钩子与手工 L0.5
|
||||
- **按工作树分家 + 每次跑独占**同时解决"跨树互踩"和"同树并发"(覆盖率钩子与手工主机侧纯逻辑单测
|
||||
同时跑同一棵树时也会撞)。不牺牲任何东西:每个测试单元就一个 `.c`,`cl` 每次整体
|
||||
重编,"共享 obj 省编译"本来就是错觉。**没有加锁**——这里没有需要互斥的独占资源,
|
||||
只是名字撞了;加锁等于把 L0.5 变成和 build/bench 一样的全局串行。
|
||||
只是名字撞了;加锁等于把主机侧纯逻辑单测变成和 build/bench 一样的全局串行。
|
||||
|
||||
两个开关(都写在 harness 顶部注释里,判据以 `unit_test_harness.host_build_root()` 为准):
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""unit_test_harness.py - 主机侧单元测试(L0.5)的通用运行器 harness。
|
||||
"""unit_test_harness.py - 主机侧纯逻辑单测的通用运行器 harness。
|
||||
|
||||
职责(**不认识任何具体模块**):
|
||||
探测本机 MSVC 工具链 -> 拼 INCLUDE/LIB -> 编译测试单元 -> 运行 -> 判定退出码。
|
||||
@@ -10,7 +10,7 @@
|
||||
为什么要 harness(2026-10-01 测试架构评审):
|
||||
看门狗单测的运行器(`test/host/watchdog/run_unit_test.py`,170 行)把工具链
|
||||
探测、`INCLUDE`/`LIB` 拼接、GBK 解码、`/wd4819` 抑制、退出码契约**全部写死在
|
||||
模块目录内**。第二个 L0.5 单测出现时须整段复制——工具链细节一旦修正(新增 VS
|
||||
模块目录内**。第二个主机侧纯逻辑单测出现时须整段复制——工具链细节一旦修正(新增 VS
|
||||
版本、SDK 布局变化、编码处理调整)就会发散。抽到这里后,各模块运行器只剩
|
||||
"声明式"配置。
|
||||
|
||||
@@ -134,7 +134,7 @@ class TestBuild:
|
||||
|
||||
|
||||
# ----------------------------- 产物目录归属(跨工作树并行) -----------------------------
|
||||
# 现象(2026-10-25 三条道并行开发实测):全量 ci_local 的 L0 里 test-cppcheck /
|
||||
# 现象(2026-10-25 三条道并行开发实测):全量 ci_local 的静态门禁里 test-cppcheck /
|
||||
# test-coverage 偶发 "files were modified by this hook",单独重跑即绿、工作树零改动。
|
||||
# 根因是旧写法把 obj/exe 直接落在**全机共用**的 %TEMP%,名字由套件名派生
|
||||
# (%TEMP%\net_socket_tests.exe 与 %TEMP%\net_socket_obj)。多棵工作树并行跑**同名
|
||||
@@ -147,7 +147,7 @@ class TestBuild:
|
||||
#
|
||||
# 口径:**按工作树分家**。产物根 = %TEMP%\dtu_host\<仓库根路径哈希>\,跨树天然不撞,
|
||||
# 同一棵树内仍复用同一份目录(33 套的编译缓存没必要白白重编)。**不用锁**——锁会把
|
||||
# L0.5 变成和 build/bench 一样的全局串行,而这里并没有需要互斥的独占资源,只是名字
|
||||
# 主机侧纯逻辑单测变成和 build/bench 一样的全局串行,而这里并没有需要互斥的独占资源,只是名字
|
||||
# 撞了。显式覆盖:DTU_HOST_BUILD=<目录>(CI/容器要固定路径时用)。
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""控制台单写者日志(console_log)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""控制台单写者日志(console_log)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/console_log/console_log_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""频率测量层(全周傅氏相量的派生量,B8)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""频率测量层(全周傅氏相量的派生量,B8)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/freq/freq_test.c(#include 纳入生产
|
||||
源文件 App/algo/freq.c + phasor.c + sample_ring.c),验证相位解缠绕
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""FTP 鉴权状态机(lftpd_auth)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""FTP 鉴权状态机(lftpd_auth)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/ftp_auth/ftp_auth_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""FTP 鉴权配置(ftp_cfg,[ftp] 段)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""FTP 鉴权配置(ftp_cfg,[ftp] 段)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/ftp_cfg/ftp_cfg_test.c(以 #include 纳入**生产源文件**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""IEC 60870-5-104 被控站协议栈(B4)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""IEC 60870-5-104 被控站协议栈(B4)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/iec104/iec104_test.c(#include 纳入
|
||||
生产源文件 iec104_asdu.c + iec104_pts.c + iec104_link.c,及数据源链接
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""IEC 104 上行服务生命周期(iec104_serv)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""IEC 104 上行服务生命周期(iec104_serv)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/iec104_serv/iec104_serv_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""FTP 控制通道协议层(lftpd)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""FTP 控制通道协议层(lftpd)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/lftpd/lftpd_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""FTP socket 适配层(lftpd_inet)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""FTP socket 适配层(lftpd_inet)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/lftpd_inet/lftpd_inet_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""FTP 文件 IO 层(lftpd_io + lftpd_string)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""FTP 文件 IO 层(lftpd_io + lftpd_string)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/lftpd_io/lftpd_io_test.c(同时纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""遥测快照层(全周傅氏相量发布侧,meas)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""遥测快照层(全周傅氏相量发布侧,meas)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/meas/meas_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""dhara NAND 移植层(nand_ftl)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""dhara NAND 移植层(nand_ftl)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/nand_port/nand_port_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""网络配置(net_cfg)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""网络配置(net_cfg)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_cfg/net_cfg_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""NET 层事件分发与周期对账(net_events)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""NET 层事件分发与周期对账(net_events)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_events/net_events_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""NET 层监听自动重建(net_listener)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""NET 层监听自动重建(net_listener)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_listener/net_listener_test.c(以 #include 纳入生产
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""NET 层挂起 recv / 挂起 send(net_pending)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""NET 层挂起 recv / 挂起 send(net_pending)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_pending/net_pending_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""NET 层 select/poll(net_select)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""NET 层 select/poll(net_select)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_select/net_select_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""NET 套接字核心(net_socket)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""NET 套接字核心(net_socket)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/net_socket/net_socket_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""相量层(全周傅氏相量)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""相量层(全周傅氏相量)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/phasor/phasor_test.c(它以 #include 纳入**生产源文件**
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
设计依据:docs/算法/继电保护功能复现规划.md §3.2(全周傅氏系数表 等);
|
||||
docs/算法/傅氏算法详解.md §2.3(系数口径);
|
||||
docs/测试说明/测试开发标准流程.md §4.2(L0.5 主机侧单测)。
|
||||
docs/测试说明/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
创建日期:2026-10-10
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""量纲回归用例(道A)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""量纲回归用例(道A)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
MSVC 编译 test/host/prot_dim/prot_dim_test.c(#include 纳入真实链:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""保护元件框架(保护判据,P1 子集)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""保护元件框架(保护判据,P1 子集)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/prot_elm/prot_elm_test.c(#include 纳入
|
||||
生产源文件 prot_elm.c + prot_set.c + phasor.c + sample_ring.c),验证
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""保护定值模型(P1)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""保护定值模型(P1)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/prot_set/prot_set_test.c(#include 纳入
|
||||
生产源文件 App/algo/prot_set.c),验证 Q10 定点模型 / 范围校验 /
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""保护定值持久化胶水层(prot_set_store)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""保护定值持久化胶水层(prot_set_store)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/prot_set_store/prot_set_store_test.c(同时纳入**生产源**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""运行参数段(run_par,「数据可信」这一项)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""运行参数段(run_par,「数据可信」这一项)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/run_par/run_par_test.c(#include 纳入
|
||||
run_par.c + cfg_file.c + adc_cal.c 真实链 + 内存虚拟盘桩),钉死 [run_par]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""SHA-256(sha256)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""SHA-256(sha256)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/sha256/sha256_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""SOE 记录编解码(B9)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""SOE 记录编解码(B9)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:用本机 MSVC 离线编译 test/host/soe/soe_test.c(#include 纳入
|
||||
生产源文件 soe_rec.c + iec104_asdu.c),验证 64B 定长记录构建/解析
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 模块名称:SOE 记录编解码主机侧单元测试(B9,L0.5)
|
||||
* 模块名称:SOE 记录编解码主机侧纯逻辑单元测试(B9)
|
||||
* 模块功能:离线验证 App/log/soe_rec.c——64B 定长记录构建/解析往返、
|
||||
* 校验和硬门槛(撕裂/半写拒绝)、版本门槛、CP56Time2a 时标
|
||||
* 编码正确性(与 iec104_asdu.c 的 CP56 解码交叉验证:同一算法族
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""SOE 落盘胶水层(soe_store)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
r"""SOE 落盘胶水层(soe_store)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/soe_store/soe_store_test.c(以 #include 纳入**生产源**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 模块名称:SOE 落盘胶水层(soe_store)主机侧单元测试(L0.5)
|
||||
* 模块名称:SOE 落盘胶水层(soe_store)主机侧纯逻辑单元测试
|
||||
* 模块功能:在 PC 上离线验证 App/log/soe_store.c 的四条对外契约与它自己的
|
||||
* "照 sys_log_mcu 的台架实证纪律"注释:
|
||||
* - post 侧**零文件系统、零日志**(protectTask 栈预算 + DoD 硬约束);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""系统时钟(sys_clock)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""系统时钟(sys_clock)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/sys_clock/sys_clock_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""运行/自检记录落盘后端(sys_log_mcu)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
r"""运行/自检记录落盘后端(sys_log_mcu)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/sys_log_mcu/sys_log_mcu_test.c(以 #include 纳入**生产源**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 模块名称:运行/自检记录落盘后端(sys_log_mcu)主机侧单元测试(L0.5)
|
||||
* 模块名称:运行/自检记录落盘后端(sys_log_mcu)主机侧纯逻辑单元测试
|
||||
* 模块功能:在 PC 上离线验证 App/log/sys_log_mcu.c 的四族契约——
|
||||
* A 64B 定长记录格式(时间戳 / epoch ASCII / 描述三段 + 截断 + 占位)
|
||||
* B 写侧(单条 s_append_rec、批量 s_append_many、日志读写放大收口的"一批一次
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""任务耗时探针(task_prof)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""任务耗时探针(task_prof)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/task_prof/task_prof_test.c(以 #include 纳入**生产源**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""时间同步(time_sync)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""时间同步(time_sync)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/time_sync/time_sync_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""UI 数据快照层(ui_data)主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""UI 数据快照层(ui_data)主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/ui_data/ui_data_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""ui_net_sink 心跳边界主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""ui_net_sink 心跳边界主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/ui_sink/ui_sink_test.c(以 #include 纳入生产源
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""写回缓存空闲 flush(vol_idle_sync)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""写回缓存空闲 flush(vol_idle_sync)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/vol_idle_sync/vol_idle_sync_test.c(它以 #include
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""卷锁(vol_lock)的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""卷锁(vol_lock)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/vol_lock/vol_lock_test.c(它以 #include 纳入
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""看门狗判定状态机的主机侧单元测试运行器(L0.5,纯标准库)。
|
||||
"""看门狗判定状态机的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||||
|
||||
做什么:
|
||||
用本机 MSVC 编译 test/host/watchdog/watchdog_test.c(它以 #include 纳入
|
||||
|
||||
Reference in New Issue
Block a user