QuickCheck 1 と QuickCheck 2 の主な違いは何ですか? Haddock のドキュメントを見ると、より多くのモジュールに分割されており、新しい型とクラスcoarbitrary
に置き換えられており(これは私には理解しやすいようです)、モナディック コードのテストがサポートされていることがわかります。他に何を知っておくべきですか?Fun
FunArbitrary
2686 次
1 に答える
54
私は QuickCheck 2 で 1 つの大きな進歩を見てきました。それ以上ではないにしても、モナド コードのテストと同じくらい重要だと思います。
class Arbitrary a where
arbitrary :: Gen a
shrink :: a -> [a]
これは、本当に素晴らしいです。縮小メソッドはオプションですが、タイプの「空の可能性がある」リダクションのリストを提供できる場合、QuickCheck が欠陥のあるチェックを見つけると、欠陥のあるデータを縮小してから再試行することで、欠陥のあるデータを最小限に抑えようとします。 -試して。失敗する限り縮小します。
あなたを納得させるための小さなサンプル, 縮小せずに :
FormulaPrim deparsing : *** Failed! Falsifiable (after 4 tests):
Poly (Polynome "p" [(CoeffRatio (26 % 25),PolyRest (CoeffRatio (129 % 40))),(CoeffInt 96,PolyRest (CoeffInt 11)),(CoeffInt 29,PolyRest (CoeffRatio (147 % 121))),(CoeffRatio (62 % 9),PolyRest (CoeffRatio (90 % 43))),(CoeffInt 56,PolyRest (CoeffInt 27))])
と :
FormulaPrim deparsing : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])
失敗の例が短いほど、デバッグが速くなります :-)
于 2009-12-19T18:04:58.597 に答える