¿Qué hay de nuevo en QuickCheck 2?
-
20-09-2019 - |
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?
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: -)