Pregunta

¿Cuáles son las principales diferencias entre QuickCheck 1 y 2 QuickCheck? De su análisis de documentos Haddock puedo ver que se divide en varios módulos, coarbitrary ha sido sustituido por el nuevo tipo y la clase Fun FunArbitrary (que parece más fácil de entender para mí), y probar código monádico es ahora compatible. ¿Qué más debo tener en cuenta?

¿Fue útil?

Solución

He visto un 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]

Esto, es realmente impresionante. El método de contracción es opcional, pero si se puede proporcionar una lista de reducción "posiblemente vacía" de su tipo, entonces cuando QuickCheck encontrar un cheque defectuoso, se tratará de reducir sus datos erróneos al mínimo al tratar de reducir su tamaño y luego volver -Pruébalo. Se encoge todo el tiempo que se produce un error.

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

Más corto fallar ejemplo significa depuración más rápida: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top