[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