Quali sono le principali differenze tra QuickCheck 1 e QuickCheck 2? Dall'osservazione dei documenti di Haddock posso vedere che è diviso su più moduli, coarbitrary
è stato sostituito dal nuovo tipo Fun
e dalla classe FunArbitrary
(che mi sembra più facile da capire) e il testing del codice monadico è ora supportato. Di che altro dovrei essere a conoscenza?Novità di QuickCheck 2?
39
A
risposta
53
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]
questo, è davvero impressionante. Il metodo di restringimento è facoltativo, ma se è possibile fornire un elenco di riduzioni "potenzialmente vuote" del proprio tipo, quando QuickCheck trova un controllo errato, cercherà di ridurre al minimo i dati difettosi cercando di ridurlo e quindi di ridurlo. -Provalo. Si riduce fino a quando 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 non riescono esempio significa più veloce di debug :-)
Coolest mod Ho visto tutta la settimana . –