質問
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))])
失敗例が短いほど、デバッグが速くなります :-)
所属していません StackOverflow