2009-12-19 3 views
39

Was sind die Hauptunterschiede zwischen QuickCheck 1 und QuickCheck 2? Wenn ich Haddock-Dokumente betrachte, kann ich sehen, dass es auf mehrere Module aufgeteilt ist. coarbitrary wurde durch die neuen Klassen Fun und FunArbitrary ersetzt (was mir leichter zu verstehen scheint), und das Testen von monadischen Codes wird jetzt unterstützt. Was sollte ich noch beachten?Was ist neu in QuickCheck 2?

Antwort

53

ich einen großen Fortschritt in der Quick Check 2 gesehen habe, glaube ich, so wichtig wie monadischen Code-Tests, wenn nicht mehr:

class Arbitrary a where 
    arbitrary :: Gen a 
    shrink :: a -> [a] 

Dies ist wirklich genial. Die shrink-Methode ist optional, aber wenn Sie eine Liste der "möglicherweise leeren" Reduktion Ihres Typs angeben können, wird QuickCheck bei der Suche nach einer fehlerhaften Überprüfung versuchen, Ihre fehlerhaften Daten auf ein Minimum zu reduzieren, indem Sie versuchen, sie zu verkleinern und dann erneut zu laden -Probier es aus. Es verkleinert es, solange es versagt.

Eine kleine Probe, Sie zu überzeugen, ohne schrumpfen:

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

mit:

FormulaPrim deparsing : *** Failed! Falsifiable (after 2 tests and 3 shrinks): 
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))]) 

Shorter scheitern Beispiel bedeuten schneller debuggen :-)

+4

Coolest Hack Ich habe die ganze Woche gesehen . –