{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Main
( main
) where
-------------------------------------------------------------------------------
import Criterion.Main
import Data.ByteString (ByteString)
import Data.Conduit
import qualified Data.Conduit.Cereal as Conduit
import qualified Data.Conduit.List as Conduit
import qualified Data.Conduit.Binary as Conduit
import Data.Monoid
import Data.Serialize
import GHC.Generics
-------------------------------------------------------------------------------
import qualified System.IO.Streams as Streams
import System.IO.Streams.Cereal
-------------------------------------------------------------------------------
main :: IO ()
main = do
let lstring = mconcat $ map (runPutLazy . put) foos
foos = replicate 1000 exFoo
exFoo = Foo 42 "oh look, a Foo!"
defaultMain
[ bgroup "getEachStream cereal-io-streams" [
bench "1000 items" $ whnfIO $ benchCIS lstring ]
, bgroup "getEachStream cereal-conduit" [
bench "1000 items" $ whnfIO $ benchCC lstring ]
]
where
benchCIS lstring = do
os <- Streams.nullOutput
Streams.connectTo os =<< getEachStream get' =<< Streams.fromLazyByteString lstring
benchCC lstring = do
Conduit.sourceLbs lstring $= Conduit.conduitGet get' $$ Conduit.sinkNull
get' :: Get Foo
get' = get
-------------------------------------------------------------------------------
data Foo = Foo Int ByteString deriving (Generic,Show,Eq)
instance Serialize Foo