packages feed

lzlib-0.2.0.0: bench/Bench.hs

module Main (main) where

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

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

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

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

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

main :: IO ()
main =
    defaultMain [ env file $ \ f ->
                  bgroup "roundtrip"
                      [ bench "lzlib" $ nf roundtrip f ]
                , bgroup "unpack"
                      [ bench "lzlib" $ nfIO unpack ]
                , env decompressed $ \f ->
                  bgroup "roundtrip'"
                      [ bench "lzlib" $ nf roundtrip' f ]
                , bgroup "unpack"
                      [ bench "lzlib" $ nfIO unpack' ]
                ]
    where file = BS.readFile "lzlib-1.10.tar.lz"
          decompressed = BS.readFile "lzlib-1.10.tar"