Quoi de neuf dans QuickCheck 2?
-
20-09-2019 - |
Question
Quelles sont les principales différences entre QuickCheck 1 et 2 QuickCheck? De la recherche Haddock docs, je vois qu'il est réparti sur plusieurs modules, coarbitrary
a été remplacé par le nouveau type de Fun
et classe FunArbitrary
(qui semble plus facile à comprendre pour moi), et tester le code monadique est maintenant pris en charge. Que dois-je savoir?
La solution
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]
, vraiment impressionnant. La méthode de retrait est facultative, mais si vous pouvez fournir une liste de « peut-être vide » réduction de votre type, puis quand QuickCheck trouver un chèque défectueux, il va essayer de réduire vos données erronées au minimum en essayant de le rétrécir et puis re -Essaye-le. Il rétrécit aussi longtemps qu'elle échoue.
Un petit échantillon pour vous convaincre, sans se rétracter:
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))])
Shorter échec exemple signifie plus rapide débogage: -)