Skip to content

テストマトリクス ​

テストの対象範囲は make test 1 つに収まりません。Formulon は 1 つのソースツリーから複数パッケージを出荷するため、コア、Oracle、パッケージング、実行環境間の一致を別々に検証します。

用語: CTest のラベル

CTest はテストにテキストのラベル(SLOW / BENCH / TSAN / PARITY / VARIANT)を付けます。ラベルのないテストが高速な層です。ターゲットはラベルで対象を含めたり除外したりできるので、コミット前は遅いテストや診断用テストを省き、CI ではそれらも実行できます。

コアOracleパッケージング実行環境間の一致make testSLOW / BENCH / TSAN を除外make test-all有効なテストをすべて実行make oracle-verifyゴールデンとの比較VARIANT テストFORMULON_ORACLE_VARIANTS=ONWASMwasm / test-wasm /npm-testPythonpython-testNative Nodenode-testCLItests/cli の CTestmake parity-testCLI・WASM・Python を比較コアOracleパッケージング実行環境間の一致make testSLOW / BENCH / TSAN を除外make test-all有効なテストをすべて実行make oracle-verifyゴールデンとの比較VARIANT テストFORMULON_ORACLE_VARIANTS=ONWASMwasm / test-wasm / npm-testPythonpython-testNative Nodenode-testCLItests/cli の CTestmake parity-testCLI・WASM・Python を比較
一致テストが比べるのは Formulon の各実行環境どうしで、Excel と比べるのは Oracle テストだけです。

コアテスト ​

sh
make build
make test
make test-slow
make test-all

make test は SLOW・BENCH・TSAN ラベルを除外します。make test-slow は SLOW を含め、BENCH・TSAN は除外します。make test-all は現在のビルド設定で有効なテストをすべて実行します。コミット前に make test、コアを変更する PR の前に make test-all を実行します。

Oracle テスト ​

sh
make oracle-verify

Oracle 検証は Excel 由来のゴールデンデータと Formulon 出力を比較します。Excel を起動しないので CI でも安全です。

バリアント Oracle テストは明示的に有効化します。

sh
cmake -B build-variants -DCMAKE_BUILD_TYPE=Debug -DFORMULON_ORACLE_VARIANTS=ON
cmake --build build-variants --target formulon_oracle_variant_tests formulon_workbook_oracle_variant_tests --parallel
ctest --test-dir build-variants -L VARIANT --output-on-failure

検証済みの取得元情報があるバリアントだけが対象です。オプションを有効にしても、取得済みデータがすべて自動的にテスト対象になるわけではありません。プロファイル固有差分の調査や、対応するプロファイルを追加する前に使います。

現在のプロファイルカタログは 14 ロケール、28 個の ID です。数式 Oracle のゲートは Mac 14 プロファイルを対象とし、Windows のワークブックターゲットは実測済みの win-365-ja_JP です。残り 13 個の Windows プロファイルは、Mac での実測値と Windows ホストの規則から推定しています。Windows の Excel 取得がなくても、ロケール切り替え、数式変換、ロケール情報の取得はコアとバインディングのテストで検証します。

パッケージングのスモークテスト ​

実行環境コマンド
WASMmake wasm、make test-wasm、make npm-test
Pythonmake python-test
Native Nodemake node-test
CLItests/cli 配下の CTest ターゲット

各バインディングの load → mutate → recalc → save ループがコア変更後も成立することを確認します。ホスト側の値変換とリソースの寿命も検証します。

実行環境間の一致 ​

sh
make parity-test

一致を検証するツールは、ローカルで利用できる CLI・npm WASM・Python の実行環境を比較します。利用できない実行環境はスキップします。比較には 2 つ以上の実行環境が必要で、足りない場合は終了コード 77 を返すため、make は正常終了しません。結果の不一致、評価エラー、検証用データの期待値との不一致で失敗します。Native Node、pthread 版 npm 入口、MCP、セル UI は別途検証します。

パリティと Oracle の違い

パリティは利用可能な実行環境同士の一致を確認します。Oracle はコアと Excel の一致を確認します。リリース前には両方の結果が必要です。

診断 ​

コマンド目的
ctest -R RegistryCatalog.CoverageReport -V --output-on-failure(make build の後、build ディレクトリで実行)正規カタログに対する実行時の関数登録状態
make function-statusカテゴリごとの認識数、実装数、スタブ数、環境依存の数。ビルドせずにカタログファイルから読む
make behavior-status細かな挙動のカタログの状態
make coverageローカルカバレッジ診断
make mutationローカルミューテーションテスト診断

RegistryCatalog.CoverageReport は診断専用の gtest ケースです。常に成功し、カバレッジ比率を標準出力に出すだけなので、ctest -V を付けたときにしか表示されません。合否の判定ではなく、現在の数値を読むために使ってください。

追加の診断 ​

ターゲット目的
make benchBENCH ラベルのベンチマーク検査を実行します。build/ をリリース構成に変更します
make fuzz / make fuzz-longパーサ、評価器、ファイル形式、印刷設定のファジングハーネスを実行します
bash tools/ci/run_tsan.shCI で使う ThreadSanitizer テストを実行します

ファジングハーネスは -DFM_BUILD_FUZZ=ON で構成したビルドにだけ存在し、そこでは SLOW ラベルが付きます。既定のビルドにも CI にも含まれません。libFuzzer ランタイムを同梱した Clang が必要で、Apple のツールチェーンには含まれないため、macOS では別途 LLVM を用意します。macOS では AddressSanitizer も既定で無効です。最近の動的リンカーと組み合わせると、ASan 自身のシャドウメモリ初期化でデッドロックするためです。そのため macOS でのファジングで検出できるのはクラッシュ、タイムアウト、未定義動作までで、ヒープ破壊は検出できません。

次に読むもの ​