srfi.78
- 軽量なテスト ¶このsrfiは、テストを書くためのマクロcheck
とcheck-ec
、
およびいくつかの補助手続きを定義します。
特に、check-ec
はSRFI-42スタイルの内包表記で
パラメータを様々に変えてテストしたい式を評価することができます。
Gaucheでは、このモジュールはgauche.test
とうまく協働するようになっています
(gauche.test
- 単体テスト参照)。
gauche.test
がアクティブ (つまりtest-start
とtest-end
の間)に
checkマクロが呼ばれた場合、それはgauche.test
のtest
マクロの
ラッパーとなり、テストの結果はgauche.test
側でまとめられて報告されます。
このモジュールがgauche.test
と一緒ではなく、単独で使われた場合は、
結果報告も含めsrfiで述べられている通りに動きます。つまり、このsrfiで書かれた
テストは2通りの方法で実行できるということです。それ単独でロードされた場合は
素のSRFI-78として、そしてgauche.test
を使うテストファイルからincludeされた
場合はgauche.test
の一部として。
[SRFI-78]{srfi.78
}
expectedとequalを評価し、次にexprを評価してその結果を
expectedの結果とequalを使って比べます。
最初の形式では、equalとしてequal?
が使われます。
[SRFI-78]{srfi.78
}
qualifierで指定される変数束縛の全ての組み合わせの下で、
expr、equal、expectedを繰り返し評価し、
その度にexprとexpectedをequalで比較します。
もし異なっていれば、それが失敗として記録され、check-ec
全体が失敗として
終了します。全ての組み合わせにおいてexprとexpectedの結果が一致すれば、
check-ec
全体が成功とみなされます。
qualifierの指定方法はSRFI-42に準じます。
詳しくはsrfi.42
- 先行評価的内包表記を参照してください。
次のテストは、フェルマー数 (2^2^n + 1) が素数かどうかを順に調べています。 F_5は合成数なのでテストは失敗します。
(use math.prime)
(check-ec (: n 6)
(:let fn (+ (expt 2 (expt 2 n)) 1))
(bpsw-prime? fn)
=> #t (n))
⇒
prints Checking (bpsw-prime? fn), expecting #t => ERROR: got #f, with n: 5
レポートの観点からは、check-ec
全体がひとつのチェックとして扱われます。
[SRFI-78]{srfi.78
}
このモジュールが単独で使われた場合、現在の出力ポートにこれまでのテスト結果のまとめを
出力します。
このモジュールがgauche.test
と一緒に使われた場合は何もしません。
テスト結果報告はgauche.test
によって行われます。
[SRFI-78]{srfi.78
}
テストの進行と結果をどう報告するかを指定します。これはgauche.test
と一緒に
使われた時には意味を持ちません。
modeには次のシンボルのいずれかを指定します。
off
(check-report)
も含め、結果は一切報告しません。
summary
(chec-report)
が呼ばれた時にまとめを報告するだけです。
report-failed
summary
の動作に加え、チェックが失敗した場合にその都度報告します。
report
summary
の動作に加え、チェック毎にその成功失敗を報告します。
デフォルトはreport
です。
[SRFI-78]{srfi.78
}
内部のテスト結果記録をクリアします。gauche.test
の結果記録には影響を及ぼしません。
[SRFI-78]{srfi.78
}
これはプログラム内から、最後のcheck-reset!
もしくはプログラム開始以降に
期待した数のテストが成功したかどうかを調べるのに使えます。
expected-total-countには期待される成功したテストの数を渡します。
テスト失敗がなく、成功したテストの数がexpected-total-countに一致すれば
#t
が、そうでなければ#f
が返されます。
これはgauche.test
と一緒に使った場合でも有効です。ただし、
カウントされるのはcheck
とcheck-ec
の結果のみです。