[Haskell-cafe] Quick check finite data generation
mukesh tiwari
mukeshtiwari.iiitm at gmail.com
Fri Sep 23 00:52:14 CEST 2011
Hello all
I have a data type
data Index = Index {indexSize::Float, indexIds::[Int],
indexDown::(IntMap.IntMap Index)}
| IndexLeaf {indexSize::Float, indexIds::[Int]}
| IndexEmpty {indexSize::Float}
deriving ( Show , Eq )
I derived some thing like this for QuickCheck testing
instance Arbitrary a => Arbitrary ( IntMap a ) where
arbitrary = liftM IntMap.fromList arbitrary
instance Arbitrary Index where
arbitrary =
oneof [ liftM3 Index arbitrary arbitrary arbitrary , liftM2 IndexLeaf
arbitrary arbitrary , liftM IndexEmpty arbitrary ]
but its generating infinite list of data. After reading the paper QuickCheck:
A Lightweight Tool for Random Testing of Haskell
Programs<http://www.eecs.northwestern.edu/%7Erobby/courses/395-495-2009-fall/quick.pdf>
<http://www.eecs.northwestern.edu/%7Erobby/courses/395-495-2009-fall/quick.pdf>
i tried to write above one using sized but i am not sure how to write this
.
instance Arbitrary a => Arbitrary ( IntMap a ) where
arbitrary = liftM IntMap.fromList arbitrary
instance Arbitrary Index where
arbitrary = sized arbIndex
arbIndex 0 = liftM IndexEmpty arbitrary
arbIndex 1 = liftM2 IndexLeaf arbitrary arbitrary
arbIndex n = frequency [ ( 1 , liftM IndexEmpty arbitrary ) , ( 1 , liftM2
IndexLeaf arbitrary arbitrary ) , ( 2 , liftM2 Index arbitrary arbitrary (
arbIndex $ div n 2 ) ) ]
but from this type i can see arbIndex $ div n 2 will return Gen Index not
Gen ( IntMap Index ) and i am getting compiler error . Could some one
please tell me , how to write arbIndex n in terms of smaller n like in the
paper
arbTree 0 = liftM Leaf arbitrary
arbTree n = frequency[ ( 1 , liftM Leaf arbitrary ) , ( 4 , liftM2 Branch
( arbTree $ div n 2 ) ( arbTree $ div n 2 ) ) ]
Thank You
Mukesh Tiwari
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110923/c67ca68b/attachment.htm>
More information about the Haskell-Cafe
mailing list