Blame bench/builder-to-bytestring-io.hs

Packit de35d7
{-# LANGUAGE ScopedTypeVariables #-}
Packit de35d7
Packit de35d7
import qualified Blaze.ByteString.Builder as ZB
Packit de35d7
import Criterion.Main
Packit de35d7
import qualified Data.ByteString.Char8 as S
Packit de35d7
import qualified Data.ByteString.Builder as BB
Packit de35d7
import Data.Monoid (mconcat, Monoid)
Packit de35d7
import qualified Data.Streaming.ByteString.Builder as BB
Packit de35d7
Packit de35d7
main :: IO ()
Packit de35d7
main = defaultMain [ bgroup "Data.Streaming.ByteString.Builder.toByteStringIO"
Packit de35d7
                            (benchmarks bIO b100_10000 b10000_100 b10000_10000)
Packit de35d7
                   , bgroup "Blaze.ByteString.Builder.toByteStringIO"
Packit de35d7
                            (benchmarks zIO z100_10000 z10000_100 z10000_10000)
Packit de35d7
                   , bgroup "Data.ByteString.Builder.toLazyByteString"
Packit de35d7
                            (benchmarks bLazy b100_10000 b10000_100 b10000_10000)
Packit de35d7
                   , bgroup "Blaze.ByteString.Builder.toLazyByteString"
Packit de35d7
                            (benchmarks zLazy z100_10000 z10000_100 z10000_10000)
Packit de35d7
                   ]
Packit de35d7
  where
Packit de35d7
    bIO = whnfIO . BB.toByteStringIO (const (return ()))
Packit de35d7
    zIO = whnfIO . ZB.toByteStringIO (const (return ()))
Packit de35d7
    bLazy = nf BB.toLazyByteString
Packit de35d7
    zLazy = nf ZB.toLazyByteString
Packit de35d7
    benchmarks run bld100_10000 bld10000_100 bld10000_10000 =
Packit de35d7
        [ bench' run bld100_10000 100 10000
Packit de35d7
        , bench' run bld10000_100 10000 100
Packit de35d7
        , bench' run bld10000_10000 10000 10000
Packit de35d7
        ]
Packit de35d7
    bench' :: (b -> Benchmarkable) -> b -> Int -> Int -> Benchmark
Packit de35d7
    bench' run bld' len reps = bench (show len ++ "/" ++ show reps) (run bld')
Packit de35d7
    b100_10000 = bld BB.byteString 100 10000
Packit de35d7
    b10000_100 = bld BB.byteString 10000 100
Packit de35d7
    b10000_10000 = bld BB.byteString 10000 10000
Packit de35d7
    z100_10000 = bld ZB.fromByteString 100 10000
Packit de35d7
    z10000_100 = bld ZB.fromByteString 10000 100
Packit de35d7
    z10000_10000 = bld ZB.fromByteString 10000 10000
Packit de35d7
    bld :: Monoid a => (S.ByteString -> a) -> Int -> Int -> a
Packit de35d7
    bld f len reps = mconcat (replicate reps (f (S.replicate len 'x')))