packages feed

bytestring-typenats-1.0.0: benches/bench.hs

{-# LANGUAGE DataKinds #-}
#ifdef UseArbitrary
import Test.QuickCheck.Arbitrary
import Test.QuickCheck.Gen
import Criterion.Main

import Data.ByteString.TypeNats
#endif

main :: IO ()
#ifdef UseArbitrary
main = defaultMain
  [ bench "arbitrary"    $ nfIO $ action (arbitrary :: Gen (ByteString 10))
  , bench "arbitrary1M"  $ nfIO $ action (arbitrary :: Gen (ByteString 1000000))
  , bench "arbitrary10M" $ nfIO $ action (arbitrary :: Gen (ByteString 10000000))
  , 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
#else
main = putStrLn "Arbitrary disabled; nothing to benchmark"
#endif