packages feed

lzlib-0.3.0.0: bench/Bench.hs

module Main (main) where

import           Codec.Lzip
import           Criterion.Main
import qualified Data.ByteString.Lazy as BSL
import           System.FilePath      ((</>))
import           System.IO.Temp       (withSystemTempDirectory)

roundtrip :: BSL.ByteString -> BSL.ByteString
roundtrip = compress . decompress

roundtrip' :: BSL.ByteString -> BSL.ByteString
roundtrip' = decompress . compress

unpack :: IO ()
unpack = withSystemTempDirectory "lzlib" $
    \fp -> BSL.writeFile (fp </> "lzlib.tar.lz") =<<
        (roundtrip <$> BSL.readFile "lzlib-1.10.tar.lz")

unpack' :: IO ()
unpack' = withSystemTempDirectory "lzlib" $
    \fp -> BSL.writeFile (fp </> "lzlib.tar") =<<
        (roundtrip' <$> BSL.readFile "lzlib-1.10.tar")

main :: IO ()
main =
    defaultMain [ env files $ \ ~(f, g) ->
                  bgroup "roundtrip"
                      [ bench "lzlib (lzlib)" $ nf roundtrip f
                      , bench "lzlib (gmp)" $ nf roundtrip g
                      ]
                , bgroup "unpack"
                      [ bench "lzlib" $ nfIO unpack ]
                , env decompressed $ \f ->
                  bgroup "roundtrip'"
                      [ bench "lzlib" $ nf roundtrip' f ]
                , bgroup "unpack"
                      [ bench "lzlib" $ nfIO unpack' ]
                ]
    where file = BSL.readFile "lzlib-1.10.tar.lz"
          bigFile = BSL.readFile "gmp-6.1.2.tar.lz"
          files = (,) <$> file <*> bigFile
          decompressed = BSL.readFile "lzlib-1.10.tar"