2009-12-19 11 views
39

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?

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

+4

Coolest mod Ho visto tutta la settimana . –

Problemi correlati