---
name: zhouyilab-testing
description: 为 ZhouYiLab 排盘或分析变更设计回归测试、运行示例并核验报告时区分独立基准和契约检查。
---

## 回归与示例分离

- `tests/` 放独立回归目标并注册 CTest；`examples/` 演示真实入口与完整排盘报告，不承担另一份算法或大量断言语料。测试链接生产模块，不复制生产算法算“预期”。
- 固定预期注明参考来源、输入历法、地点/时间口径及流派。修复前保留失败案例；不能因新结果不同就自动刷新预期，也不能只看报告读起来合理。
- 每条新规则覆盖成立、不成立、边界和组合场景，检查方向、参与位置、角色互斥、来源去重及原局/岁运一致性。半合不能当三合成化，同支/同柱/自刑按条件分别断言。
- 例如盲派跨层修复可保留 2023 三合、2033 三刑、2025 争合、2017 自刑/交运/填实这组结构回归；它们验证规则检出，不证明个人事件可预测。
- 所有时间入口检查未提供 location 时原时间不变、有地点时统一修正、跨日/节气及无效日期。新增报告字段同时检查 JSON、中文映射和 Markdown 表格，验证结果而非仅检查字段存在。

## 执行与隔离

```sh
cmake -S . -B build -DBUILD_EXAMPLES=ON -DBUILD_TESTING=ON
cmake --build build --config Debug --parallel
ctest --test-dir build -C Debug --output-on-failure --no-tests=error
```

首次配置还须按实际平台选择编译器、生成器及模块模式；不得混用已有构建目录的工具链。

- CTest 报告工作目录在 `build/tests/reports/<术数>/`。手工运行测试也用隔离目录，不能覆盖源码 `docs/`。用户要求更新示例 txt 时才运行对应输出流程并核对目标路径。
- 修改 C++ 模块至少构建受影响目标并运行相关测试；公共契约、基础规则、构建链路变更运行全量现有回归及示例编译。
- 现有三套 CTest 为紫微、奇门、梅花，详见 `tests/README.md`；其他模块若缺独立测试应补测试，不以“全量 CTest 通过”声称所有术数均有覆盖。
- 编译、链接、执行、独立预期逐值核对、穷举契约检查和展示检查分别记录。性能提升若没有测量，只能说明减少了哪些重复工作，不报虚构百分比。
