packages feed

pipes-extra-0.2.0: bench/zlib.hs

{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Lazy as L
import qualified Codec.Compression.GZip as GZip
import Criterion.Main
import qualified Data.Conduit as C
import qualified Data.Conduit.Binary as CB
import qualified Data.Conduit.Zlib as CZ
import qualified Data.Enumerator as E
import qualified Data.Enumerator.Binary as EB
import qualified Codec.Zlib.Enum as EZ
import qualified System.IO as SIO

import Control.Pipe
import qualified Control.Pipe.Binary as PB
import qualified Control.Pipe.Zlib as PZ

filePath :: FilePath
filePath = "bench/sample.gz"

tmpFile :: FilePath
tmpFile = "dist/build/autogen/bench-tmp"

lazyIO :: IO ()
lazyIO = do
    compressed <- L.readFile filePath
    L.writeFile tmpFile $ GZip.decompress compressed

conduits1 :: IO ()
conduits1 = C.runResourceT
    $ CB.sourceFile filePath
    C.$$ CZ.ungzip
    C.=$ CB.sinkFile tmpFile

conduits2 :: IO ()
conduits2 = C.runResourceT
    $ CB.sourceFile filePath
    C.$= CZ.ungzip
    C.$$ CB.sinkFile tmpFile

enumerator :: IO ()
enumerator = SIO.withBinaryFile tmpFile SIO.WriteMode $ \h -> E.run_
    $ EB.enumFile filePath
    E.$$ EZ.ungzip
    E.=$ EB.iterHandle h

pipes :: IO ()
pipes = runPipe
  $ PB.fileReader filePath
  >+> PZ.gunzip
  >+> PB.fileWriter tmpFile

main :: IO ()
main = defaultMain
    [ bench "pipes" pipes
    , bench "conduits1" conduits1
    , bench "conduits2" conduits2
    , bench "enumerator1" enumerator
    , bench "lazyIO" lazyIO
    ]