Quickcheck, que define instancias arbitrarias utilizando una función cuyo resultado depende de sus argumentos
Tengo una funcionarbExample
para generar un azarExample
tipo de datos que depende de varias funciones.
Estoy tratando de hacer algunas pruebas de propiedad haciendoquickCheck prop_example
, el problema es que no sé cómo definir unArbitrary
instancia paraExample
que usaarbExample
.
Me gusta poder correrquickCheck prop_example
mientras especifica elGens
estructura de datos quearbExample
usos.
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 _ {- ??? -}