Cosa c'è di nuovo in QuickCheck 2?
-
20-09-2019 - |
Domanda
Quali sono le principali differenze tra QuickCheck 1 e 2 QuickCheck? Guardando docs Haddock posso vedere che si è divisa su più moduli, coarbitrary
è stato sostituito dal nuovo tipo Fun
e la classe FunArbitrary
(che sembra più facile da capire per me), e testare il codice monadica è ora supportato. Che altro dovrei essere a conoscenza?
Soluzione
Ho visto un avanzamento importante nella QuickCheck 2, credo importante come test codice monadica, se non di più:
class Arbitrary a where
arbitrary :: Gen a
shrink :: a -> [a]
Questa, è davvero impressionante. Il metodo di strizzacervelli è opzionale, ma se è possibile fornire un elenco di riduzione "eventualmente vuota" del vostro tipo, poi quando QuickCheck trovare un controllo difettoso, si cercherà di ridurre i dati errati al minimo, cercando di ridurla e poi ri -Provalo. Si restringe il più a lungo non riesce.
Un po 'di esempio per convincere voi, senza ritiri:
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 fallire esempio significare più veloce di debug: -)