packages feed

cereal-io-streams-0.0.1.0: bench/Main.hs

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