{-# 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