验证

本页列出仓库中的各项主张是如何被检查的,以及每项检查无法证明什么。

快速循环

moon check --target native
moon test --target native
moon fmt
moon info

moon info 会重新生成每个 pkg.generated.mbti;这些文件中的差异就是公开接口的变化,必须反映到 API 页面中。

跨目标矩阵

moon check --target all
moon test --target native
moon test --target js
moon test --target wasm
moon test --target wasm-gc
目标运行内容
native每个测试,包括子进程工作者和超时(#cfg(target="native"))
js、wasm除仅限 native 的工作者测试之外的每个测试
wasm-gc同步测试;runner 的 async test 会被跳过,因为 moonbitlang/async 没有 wasm-gc 运行时

仅限 native 的源文件在 moon.pkg 中按目标选择(worker_native.mbt、main.mbt、replay_native.mbt);包含它们的包会屏蔽 unused_package 警告,因为有些导入只在 native 上使用。moon check --target all 必须不产生任何警告。

产物冒烟测试

tmpdir=$(mktemp -d)
moon run src/cli --target native -- report testdata/report/sample.jsonl "$tmpdir/report.html"
test -s "$tmpdir/report.html"
moon run src/cli --target native -- replay testdata/replay/sample.jsonl --dry-run

报告测试数据用于检查 JSONL 解析、规模投影和自包含输出。重放测试数据用于检查产物解析、命令还原和超时显示,而不执行任何东西。CI 运行相同的命令、覆盖率预算(moon coverage analyze,未覆盖的行至多 360 行)、接口检查(moon info 无差异)以及 moon fmt --check。

文档示例

doc/manual 中的每个 moonbit 块都是一个完整的测试或一个顶层定义;有意不完整的块用 moonbit nocheck 围栏标注。要检查它们,请把每个页面的块放入仓库之外某个临时模块的一个包中,该模块导入 mare_mark 的各个包(async test 还需导入 moonbitlang/async),再在 moon.work 中把它与仓库组合起来,然后运行 moon test。页面中 inspect 的内容就是经过验证的输出。依赖机器的输出(计时、基于真实测量的决策)从不展示。

目录与附件由 Luna-Flow 的 lunadoc 工具检查:lunadoc check --compile(链接、目录、Typst 附件)和 lunadoc status(翻译覆盖率)。

测试证明了什么,没有证明什么

  • stats:稳健摘要、决策阈值、无效输入错误,以及自助法区间是确定性的并位于差值的范围之内。未证明:区间的覆盖率、BCa 或分层重抽样。
  • runner:先验证再计时、各准备策略下的计时边界(同步、排除重置)、校准的界、平衡顺序、工作进程中止与超时、最小化的可重放失败、关系不匹配、结果计数。未证明:机器计时器的质量,或不存在来自其他进程的干扰。
  • report:投影规则、转义、版本关卡、自包含输出。未证明:在某个特定浏览器中的渲染效果。
  • tune 与 tune_gemm:中位数打分、与顺序无关的选择、Pareto 过滤、候选约束,以及分块 GEMM 与参考 GEMM 在所有布局(含尾部)上逐位一致。未证明:调优得到的候选在另一种 CPU 上也是最快的。
  • cli:参数解析、帮助文本、重放信息提取。native 的 main 只由冒烟测试覆盖。