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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top