検証
このガイドは、変更が通過すべき検査、テストが確かめること、そして意図的に主張しないことを挙げる。
ローカルでの確認
プルリクエストを出す前に、リポジトリのルートで実行する:
moon update
moon fmt
moon info
git diff -- src/pkg.generated.mbti
moon check --target all
moon test
moon test --target js
moon test --target native
moon info はインターフェースファイルを再生成する。その差分は公開 API の変更の一覧であり、意図したものでなければならない。moon check --target all はこのパッケージで警告なしに終わらなければならない。
未リリースの luna-generic と一緒に arithmetic を開発するときは、両方のチェックアウトを列挙した moon.work を持つワークスペースから moon check と moon test を実行し、テストの依存がローカルのコピーに解決されるようにする。
ドキュメントの検査
マニュアルは lunadoc で検査する:
lunadoc update .
lunadoc check --compile .
lunadoc status --pages .
update は doc/locale/manual.pot を再生成し、中国語と日本語のカタログにマージする。check は壊れた相対リンク、英語ページと一致しないカタログ、コンパイルできない Typst の添付で失敗する。nocheck の付いていない moonbit ブロックはどれも完全なテストか定義である。ページのブロックを、Luna-Flow/arithmetic を @lf_arith として(チュートリアルでは Luna-Flow/luna-generic も @lf_alg として)インポートする作業用パッケージの _test.mbt ファイルにコピーし、moon test を実行する。
テストが確かめること
trait_test.mbt は次を確かめる。非検査トレイトが luna-generic の境界とともに汎用コードで組み合わさること、Float と Double のすべての初等関数の代表的な値、Constants が両方の型で と を満たすこと、すべての整数型と BigInt の正確な Power、正しい入力・負の入力・・・ゼロ除数に対する検査付きの平方根と除算、CompareChecked による NaN の拒否、そしてゼロ指数・負の指数・ゼロの底・最も小さい負の Int に対する検査付き整数べき乗である。
contextual_test.mbt は次を確かめる。Float への Int の正確な埋め込みと丸めを伴う埋め込み、Double への正確な埋め込み、隣接値演算の IEEE の境界(符号付きゼロ、最小の非正規化数、最大の有限値、無限大、NaN)、そしてテスト内で定義した型を通して、コンテキスト付き双曲線関数の結果とコンテキスト付き定数の証明失敗がトレイトを変更なく通過することである。
certification_error_wbtest.mbt は、CertificationFailureDetail がすべてのフィールドとともに ArithmeticError::certification_failure を通り抜けること、そしてエラーの述語が互いに排他的であることを確かめる。
テストが主張しないこと
テストは、Float や Double の算術が証明付きであること、その初等関数が正しく丸められること、そのコンテキスト付きインスタンスが丸めを検出することを主張しない。確かめるのは、能力の語彙、固定形式での隣接値の意味、エラーの分類である。
継続的インテグレーション
CI はプルリクエストと main へのプッシュで実行される。全ターゲットをビルド・検査し、既定・JavaScript・ネイティブのテストスイートを実行し、pkg.generated.mbti がソースと一致することを確かめ、フォーマットを検査する。別のワークフローが doc/ 以下の変更に対して Luna Flow 共通のドキュメント検査を実行する。publish-package ワークフローは明示的なバージョンを受け取り、それが moon.mod のバージョンと等しいことを要求し、検査を繰り返して mooncakes に公開し、GitHub リリースを作成する。成功した実行はリポジトリとしての証拠であり、どのバックエンドについても数値的な適合性を主張するものではない。