haskell quickcheck

haskell - ¿Qué hay de nuevo en QuickCheck 2?



(1)

¿Cuáles son las principales diferencias entre QuickCheck 1 y QuickCheck 2? Al mirar los documentos de Haddock puedo ver que está dividido en más módulos, coarbitrary ha sido reemplazado por el nuevo tipo Fun y la clase FunArbitrary (que me parece más fácil de entender), y ahora es compatible con probar el código monádico. ¿Qué más debería saber?


He visto un gran avance en QuickCheck 2, creo que es tan importante como las pruebas de código monádico, si no más:

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

Esto, es realmente increíble. El método de contracción es opcional, pero si puede proporcionar una lista de reducción "posiblemente vacía" de su tipo, cuando QuickCheck encuentre una verificación defectuosa, tratará de reducir sus datos defectuosos tratando de reducirlos y luego -Pruébalo. Se encoge mientras que falla.

Una pequeña muestra para convencerte, sin encogerse:

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

Con :

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

El ejemplo de falla más corta significa una depuración más rápida :-)