Quickcheck, Definieren beliebiger Instanzen mit einer Funktion, deren Ergebnis von ihren Argumenten abhängt
Ich habe eine FunktionarbExample
um ein zufälliges @ zu generierExample
Datentyp, der von einer Reihe von Funktionen abhängt.
Ich versuche, einige Eigenschaftstests durchzuführen, indem ichquickCheck prop_example
, das Problem ist, ich weiß nicht, wie man ein @ definieArbitrary
Instanz fürExample
welches verwendetarbExample
.
Ich möchte in der Lage sein, laufenquickCheck prop_example
bei der Angabe desGens
Datenstruktur welchearbExample
Verwendet
data Example = Example
{ myInt :: Int
, myList :: [String]
} deriving (Show)
data Gens = Gens
{ gen1 :: Gen Int
, gen2 :: Gen String }
arbExample :: Gens -> Gen Example
arbExample gens = do
i <- gen1 gens
xs <- vectorOf i (gen2 gens)
return Example{myInt=i, myList=xs}
prop_example :: Example -> Property
prop_example example = do
let len = length (myList example)
monadicIO $ do
-- result of running some program
successful <- run $ (\e -> return False) example
case successful of
True -> return ()
False -> fail "failure "
instance Arbitrary Example where
arbitrary = arbExample _ {- ??? -}