ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

跨平台质量把关:btest工具如何为B语言编译器bext-lang/b构建测试矩阵

2026/8/18 17:32:43 拓冰建站 浏览量
跨平台质量把关:btest工具如何为B语言编译器bext-lang/b构建测试矩阵 跨平台质量把关btest工具如何为B语言编译器bext-lang/b构建测试矩阵【免费下载链接】bCompiler for the B Programming Language implemented in Crust项目地址: https://gitcode.com/gh_mirrors/b8/b一款现代编译器要让人放心最有力的证明不是华丽的宣传语而是一张密密麻麻、真实可查的跨平台测试矩阵。由 CrustRust 方言实现的 B 语言编译器 bext-lang/b 项目内置了一个名为 btest 的测试工具它会在所有支持的目标平台上自动构建并运行测试用例输出一张清晰的矩阵报告。本文面向编译器和测试工具的新手带你零基础看懂 btest 如何完成跨平台质量把关。什么是btest编译器的体检医生btest 是 B 语言编译器项目自带的测试工具源码位于 btest.rs使用说明见 btest.md。它的职责很简单却很关键自动扫描 tests/ 目录下的全部测试用例在所有支持的目标平台上分别构建并运行这些用例收集每个平台的通过、失败状态汇总成一张测试矩阵报告。最贴心的一点是btest 遇到错误不会崩溃中断而是如实记录每个平台上的状态让你一眼掌握编译器的整体健康度。快速上手一键运行完整测试矩阵首次使用只需两条命令。执行make时btest 会随编译器一起自动构建$ make $ ./build/btest第二条命令会跑完所有测试矩阵的完整检查。编译器的其他目标平台如 uxn、6502-posix则需要额外配置对应运行环境详见 README.md。测试矩阵是怎样构成的平台 × 用例理解测试矩阵只需抓住两个维度维度内容举例目标平台targets编译器支持的代码生成后端gas-x86_64-linux、gas-x86_64-windows、gas-aarch64-darwin、uxn、6502-posix测试用例casestests/ 目录下的 .b 测试文件upper.b、vector、recursion、ternary平台定义来自 targets.rs 与 codegen/矩阵报告就是每个用例 × 每个平台的组合结果。按需切片用 -t 和 -c 精准选择测试范围跑全量矩阵有时太慢btest 提供了灵活的切片参数-t指定平台-c指定用例二者都支持 glob 通配符$ ./build/btest -t gas-x86_64-linux # 只测 Linux x86_64 $ ./build/btest -c upper -c vector # 只跑这两个用例 $ ./build/btest -t *linux -c *linux # 通配符批量筛选 $ ./build/btest -c upper -t uxn # 自由组合随意切片排除干扰项用 -xt 和 -xc 反向过滤除了正向选择btest 还支持反向排除-xt排除平台-xc排除用例同样支持 glob$ ./build/btest -xt *linux # 跳过所有 Linux 平台 $ ./build/btest -xt *linux -xc asm* # 排除平台并跳过 asm 开头的用例测试矩阵的五种操作模式btest 通过-a参数切换五种核心动作覆盖测试管理的完整闭环动作作用适用场景replay默认回放测试与 tests.json 中的期望输出比对日常回归测试record记录当前输出写入 tests.json新增用例或平台prune清理 tests.json 中已失效的记录删除平台/用例之后disable禁用指定切片中的测试临时屏蔽不适用用例count统计 tests.json 中的记录行数快速了解规模例如记录某个用例在特定平台上的输出$ ./build/btest -a record -c upper -t uxntests.json测试矩阵的标准答案档案每次 record 之后测试的期望输出都会以 JSON 形式保存在根目录 tests.json 中构成标准答案库。有趣的是不同平台的期望输出可能不同——比如 Windows 与 6502-posix 平台使用\r\n换行uxn 平台因为 16 位字长会把大整数截断。这些差异都被精确记录replay 时逐条比对。状态图例一眼看懂矩阵报告矩阵报告用彩色字母标注每个格子的状态✅K通过passed❌B构建失败build fail❌R运行错误runtime error⚪-已禁用disabledK输出未记录stdout is not recorded这样任何一行红字都能立刻定位到具体的平台和用例排错效率大幅提升。结语btest 用一张测试矩阵把跨平台质量从口号变成了可量化、可回放、可管理的日常流程。无论你是编译器爱好者还是想学习测试工具设计的新手都可以从 tests/ 的用例和 btest.rs 的实现中收获灵感。下一次make之后不妨亲手跑一次./build/btest看看你的编译器在全平台矩阵下的真实状态。【免费下载链接】bCompiler for the B Programming Language implemented in Crust项目地址: https://gitcode.com/gh_mirrors/b8/b创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考