40 votes

Quoi de neuf dans QuickCheck 2 ?

Quelles sont les principales différences entre QuickCheck 1 et QuickCheck 2? En regardant la documentation de Haddock, je peux voir qu'il est divisé en plusieurs modules, coarbitrary a été remplacé par le nouveau type Fun et la classe FunArbitrary (qui semble plus facile à comprendre pour moi), et le test de code monadique est désormais pris en charge. De quoi d'autre devrais-je être conscient?

54voto

Raoul Supercopter Points 2943

J'ai vu une avancée majeure dans QuickCheck 2, que je considère aussi importante que les tests de code monadique, voire plus :

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

C'est vraiment génial. La méthode shrink est facultative, mais si vous pouvez fournir une liste de réductions "éventuellement vides" de votre type, alors lorsque QuickCheck trouve un test défectueux, il essaiera de réduire vos données défectueuses au minimum en essayant de les réduire, puis de les retester. Il les réduit tant qu'il échoue.

Un petit exemple pour vous convaincre, sans réduction :

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

Un exemple de fail plus court signifie un débogage plus rapide :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X