40

QuickCheck 1 と QuickCheck 2 の主な違いは何ですか? Haddock のドキュメントを見ると、より多くのモジュールに分割されており、新しい型とクラスcoarbitraryに置き換えられており(これは私には理解しやすいようです)、モナディック コードのテストがサポートされていることがわかります。他に何を知っておくべきですか?FunFunArbitrary

4

1 に答える 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 に答える