検証
このページでは、リポジトリの主張がどのように検査されるか、そして各検査が何を証明しないかを示します。
高速なループ
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 | 同期的なテスト。moonbitlang/async には wasm-gc のランタイムがないため、runner の async test はスキップされます |
native 専用のソースファイルは moon.pkg でターゲットごとに選択されます(worker_native.mbt、main.mbt、replay_native.mbt)。一部のインポートは native でしか使われないため、それらを含むパッケージは unused_package を抑制しています。moon check --target all は警告を 1 つも出してはなりません。
アーティファクトのスモークテスト
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
report のフィクスチャは、JSONL の解析、スケーリングの射影、自己完結型の出力を検査します。replay のフィクスチャは、何も実行せずに、アーティファクトの解析、コマンドの復元、タイムアウトの表示を検査します。CI は同じコマンドに加え、カバレッジの予算(moon coverage analyze、未カバーの行は最大 360 行)、インターフェースの検査(差分のない moon info)、moon fmt --check を実行します。
ドキュメントの例
doc/manual 内のすべての moonbit ブロックは、完全なテストまたはトップレベルの定義です。意図的に部分的なブロックは moonbit nocheck でフェンスされています。これらを検査するには、各ページのブロックを、リポジトリ外にあって mare_mark のパッケージ(async test のために moonbitlang/async も)をインポートするスクラッチモジュールの 1 つのパッケージに入れ、moon.work でリポジトリと結合して moon test を実行します。ページ内の inspect の内容は検証済みの出力です。マシンに依存する出力(計時値、実際の計測に基づく判断)は決して示しません。
カタログと添付資料は Luna-Flow の lunadoc ツールで検査します。lunadoc check --compile(リンク、カタログ、Typst の添付資料)と lunadoc status(翻訳のカバレッジ)です。
テストが証明すること、しないこと
stats: 頑健な要約、判断の閾値、不正な入力に対するエラー、そしてブートストラップ区間が決定的で差の範囲内に収まること。証明しないこと: 区間の被覆確率、BCa や階層的な再標本化。runner: 計時の前の検証、セットアップポリシーごとの計時の境界(同期、リセットの除外)、キャリブレーションの上下限、バランスの取れた順序、ワーカーの異常終了とタイムアウト、最小化されたリプレイ可能な失敗、関係による不一致、結果の集計。証明しないこと: マシンのタイマーの品質や、他のプロセスによる干渉がないこと。report: 射影の規則、エスケープ、バージョンによる関門、自己完結型の出力。証明しないこと: 特定のブラウザでの描画。tuneとtune_gemm: 中央値によるスコア付け、順序に依存しない選択、パレートのフィルタリング、候補の制約、端数を含むすべてのレイアウトにおけるブロック化 GEMM と参照 GEMM のビット単位の一致。証明しないこと: チューニングした候補が別の CPU でも最速であること。cli: 引数の解析、ヘルプテキスト、リプレイ情報の抽出。native のmainはスモークテストでのみ実行されます。