streaming-commons-0.2.3.1: bench/builder-to-bytestring-io.hs
{-# LANGUAGE ScopedTypeVariables #-}
import Gauge.Main
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Builder as BB
import Data.Monoid
import qualified Data.Streaming.ByteString.Builder as BB
main :: IO ()
main = defaultMain [ bgroup "Data.Streaming.ByteString.Builder.toByteStringIO"
(benchmarks bIO b100_10000 b10000_100 b10000_10000)
, bgroup "Data.ByteString.Builder.toLazyByteString"
(benchmarks bLazy b100_10000 b10000_100 b10000_10000)
]
where
bIO = whnfIO . BB.toByteStringIO (const (return ()))
bLazy = nf BB.toLazyByteString
benchmarks run bld100_10000 bld10000_100 bld10000_10000 =
[ bench' run bld100_10000 100 10000
, bench' run bld10000_100 10000 100
, bench' run bld10000_10000 10000 10000
]
bench' :: (b -> Benchmarkable) -> b -> Int -> Int -> Benchmark
bench' run bld' len reps = bench (show len ++ "/" ++ show reps) (run bld')
b100_10000 = bld BB.byteString 100 10000
b10000_100 = bld BB.byteString 10000 100
b10000_10000 = bld BB.byteString 10000 10000
bld :: Data.Monoid.Monoid a => (S.ByteString -> a) -> Int -> Int -> a
bld f len reps = mconcat (replicate reps (f (S.replicate len 'x')))