|
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')))
|