2009-12-19 6 views
39

¿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?¿Qué hay de nuevo en QuickCheck 2?

Respuesta

53

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

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

Este, es muy impresionante. 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 de convencerse que, 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))]) 

Shorter fallan ejemplo, la media de depuración más rápida :-)

+4

truco más fresco que he visto en toda la semana . –

Cuestiones relacionadas