2009-12-19 6 views
39

Quelles sont les principales différences entre QuickCheck 1 et QuickCheck 2? En regardant les docs Haddock je peux voir qu'il est divisé en plusieurs modules, coarbitrary a été remplacé par le nouveau type Fun et FunArbitrary (ce qui me semble plus facile à comprendre), et le test du code monadique est maintenant supporté. Que devrais-je savoir d'autre?Quoi de neuf dans QuickCheck 2?

Répondre

53

Je l'ai vu une avancée majeure dans QuickCheck 2, je pense aussi important que les tests de code monadique, sinon plus:

class Arbitrary a where 
    arbitrary :: Gen a 
    shrink :: a -> [a] 

Ce, est vraiment génial. La méthode shrink est facultative, mais si vous pouvez fournir une liste de réduction "potentiellement vide" de votre type, alors lorsque QuickCheck trouve une vérification défectueuse, elle essaiera de réduire au minimum vos données défectueuses en essayant de les réduire et ensuite -Essaye-le. Il rétrécit tant qu'il échoue.

Un petit échantillon pour vous convaincre, sans rétrécir:

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

Avec:

FormulaPrim deparsing : *** Failed! Falsifiable (after 2 tests and 3 shrinks): 
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))]) 

Shorter échouent par exemple :-) signifie débogage plus rapide

+4

Coolest bidouille J'ai vu toute la semaine . –