consistency チュートリアル
このページでは、パッケージ横断の一貫性テストを実行する方法と、変更が複数の数値パッケージにまたがる場合に新しい法則を追加する方法を、メンテナ向けに説明します。
クイックスタート
モジュールを含むワークスペースからスイートを実行します(リポジトリのラッパーを使うとビルドディレクトリが汚れません)。
sh tools/run_moon_clean_exec.sh test -p Luna-Flow/floating/consistency --target native
合格した実行は passed: N, failed: 0 で終わります。このスイートは just pr にも含まれています。
日常的なタスク
1 つのテストを実行する
sh tools/run_moon_clean_exec.sh test -p Luna-Flow/floating/consistency \
--filter "decimal quantize*"
パッケージ横断の法則を追加する
core_wbtest.mbt(算術の法則)または api_audit_wbtest.mbt(観測可能な API の振る舞い)にホワイトボックステストを書きます。可能な限り、法則は厳密なオラクルに対して記述してください。
///|
test "bin_float addition of small dyadics is exact" {
let a = @bin_float.BinFloat::from_int(3)
let b = @bin_float.BinFloat::from_int(5)
let sum = @semantic.SemanticScalar::from_bin_float(a + b)
let exact = @semantic.SemanticScalar::from_bin_float(
@bin_float.BinFloat::from_int(8),
)
assert_true(sum == exact)
}
GDA のコホートやフラグの規則をテストする際は、公式の decTest の行を固定の証拠として用い、テスト名にその行 ID を記してください。
テストの置き場所を決める
1 つのパッケージに関する法則は、そのパッケージ自身のテストに置きます。2 つ以上のパッケージが必要なテスト、パッケージ外から internal のヘルパーを使うテスト、semantic の厳密な有理数のようなオラクルを必要とするテストはここに置きます。
さらに進んで
- 適合性コーパス(検証)は各コアを外部の参照実装に対して検査します。このスイートはコア同士、およびコアと厳密演算とを照合します。
- いくつかのテストが使用するヘルパーについては internal チュートリアル で説明しています。
よくある落とし穴
- ワークスペースから実行してください。 このパッケージは兄弟関係にある Luna-Flow モジュールをインポートします。リポジトリのラッパーか、それらを解決できるワークスペースを使ってください。
- テストは決定的に保ってください。 固定のシードと明示的なコンテキストを使い、タイミングやターゲットの
Doubleの書式に依存するテストを書いてはいけません。
次のステップ
- ファイル構成については consistency API。
- このスイートが何を証明するかについては consistency 設計。