1{-# OPTIONS_GHC -fno-warn-orphans #-} 2module Utils where 3 4import qualified Data.ByteString.Lazy as BL 5import qualified Data.ByteString as BS 6 7import Test.QuickCheck 8 9------------------- 10-- QuickCheck Utils 11 12maxStrSize :: Double 13maxStrSize = 500 14 15-- convert a QC size parameter into one for generating long lists, 16-- growing inverse exponentially up to maxStrSize 17strSize :: Int -> Int 18strSize n = floor (maxStrSize * (1 - 2 ** (-fromIntegral n/100))) 19 20instance Arbitrary BL.ByteString where 21 arbitrary = sized $ \sz -> fmap BL.fromChunks $ listOf $ resize (sz `div` 2) arbitrary 22 shrink = map BL.pack . shrink . BL.unpack 23 24instance Arbitrary BS.ByteString where 25 arbitrary = sized $ \sz -> resize (strSize sz) $ fmap BS.pack $ listOf $ arbitrary 26 shrink = map BS.pack . shrink . BS.unpack 27 28 29