Skip to content

feat: mcpp test capability batch — isolation, parallel, filter, list, timeout, JSON (0.0.104)#274

Merged
Sunrisepeak merged 22 commits into
mainfrom
feat/test-isolation-json
Jul 23, 2026
Merged

feat: mcpp test capability batch — isolation, parallel, filter, list, timeout, JSON (0.0.104)#274
Sunrisepeak merged 22 commits into
mainfrom
feat/test-isolation-json

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

mcpp test 能力批次 — 0.0.104

mcpp test 从「单次构建 + 顺序运行」升级为练习级/CI 级可用的测试运行器。两轮批次合并交付,设计评审与路线图见 .agents/docs/2026-07-24-mcpp-test-design-review.md,实施计划见 .agents/docs/2026-07-23-test-isolation-json-plan.md2026-07-24-test-batch2-plan.md

新增

  • 逐测试编译隔离:两阶段构建,包级失败(lib/deps)是构建错误而非 N 个红测试;单个测试编译失败只标记该测试,其余照常编译运行
  • Phase B 并行化:keep-going 全量预构建(-k 0)+ 逐测试缓存命中验证——49 测试全量墙钟 29s → 3.7s
  • tests 相对路径命名:tests/00-a/0.cpp00-a/0,子目录布局可用
  • mcpp test <pattern>:按名字子串过滤(只作用于构建/运行,compile_commands 保持完整)
  • mcpp test --list:枚举测试不构建;JSON 记录供工具消费
  • mcpp test --timeout <secs>:每测试运行截止(POSIX)
  • --message-format json:逐测试 NDJSON(status/exit_code/signal/duration_ms/timed_out/compile_output/run_output)+ 包级错误记录 + summary
  • [build].flags glob 覆盖测试 TU;死 glob 警告改为查磁盘
  • BuildOptions::ninjaTargets/keepGoing:后端 goal 子集构建的通用接口

修复

  • 信号退出码规范化:WIFSIGNALED → 128+WTERMSIG(此前 SIGTERM 死亡伪装成 exit 15)
  • 嵌套 mcpp LD_LIBRARY_PATH 段错误根治:merged_environ 剥离私有 glibc loader 条目(下游 d2x/d2mcpp 的 unsetenv workaround 可删)
  • 输出交错:每测试 Compiling → 结果 → 诊断 连续块,删除误导性中场 Finished 横幅
  • docs:"(gtest style)" → 框架无关表述(zh+en);记录合成测试名含 / 的命名豁免

验证

  • e2e 新增 152–160 共 9 个脚本;全量回归 150+2(01 为版本常量同步后已修,22 为宿主 xlings 环境既有偶发,与本批次无关)
  • glibc 与 musl 静态双构建全绿;下游 d2mcpp「练习即测试」迁移(zh/en 各 52/52)与 d2x checker 链路已用本分支二进制端到端验证

… — nested mcpp no longer segfaults its tools
@Sunrisepeak
Sunrisepeak merged commit 5c33642 into main Jul 23, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant