import Test.QuickCheck.Arbitrary import Test.QuickCheck.Gen import Criterion.Main import Data.ByteString.Arbitrary main :: IO () main = defaultMain [ bgroup "ArbByteString" [ bench "arbitrary" $ nfIO $ action (arbitrary :: Gen ArbByteString) , bench "arbitrary1M" $ nfIO $ action (arbitrary :: Gen ArbByteString1M) , bench "arbitrary10M" $ nfIO $ action (arbitrary :: Gen ArbByteString10M) , bgroup "fastRandBs" [ bench "10B" $ nfIO $ action (fastRandBs 10) , bench "1KB" $ nfIO $ action (fastRandBs 1024) , bench "1MB" $ nfIO $ action (fastRandBs (1024*1024)) ] , bgroup "slowRandBs" [ bench "10B" $ nfIO $ action (slowRandBs 10) , bench "1KB" $ nfIO $ action (slowRandBs 1024) , bench "10KB" $ nfIO $ action (slowRandBs 10240) ] ] ] where action :: Gen a -> IO () action act = do samples <- sample' act examine samples where examine :: [a] -> IO () examine [] = return () examine (hd:tl) = hd `seq` examine tl