質問

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

役に立ちましたか?

解決

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))])

失敗例が短いほど、デバッグが速くなります :-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top