packages feed

bytestring-arbitrary-0.0.4: benches/bench.hs

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