packages feed

lz4-hs-0.1.5.2: bench/Bench.hs

module Main (main) where

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

decompressDump :: FilePath -> FilePath -> IO ()
decompressDump dir fp' =
    BSL.writeFile (dir </> "dump.tar") . decompress =<< BSL.readFile fp'

decompressFile :: FilePath -> IO ()
decompressFile fp' = forceBSL . decompress =<< BSL.readFile fp'

    where forceBSL = (`seq` mempty) . last . BSL.toChunks

compressDump :: FilePath -> FilePath -> IO ()
compressDump dir fp' =
    BSL.writeFile (dir </> "dump.tar.lz4") . compress =<< BSL.readFile fp'

main :: IO ()
main =
    withSystemTempDirectory "lz4" $ \dir ->
        defaultMain [ bgroup "decompress/dump"
                        [ bench "lz4" $ nfIO (decompressDump dir "valgrind-3.15.0.tar.lz4")
                        , bench "lz4" $ nfIO (decompressDump dir "llvm-9.0.0.src.tar.lz4")
                        ]
                    -- file writes on linux are slow?
                    , bgroup "decompress/file"
                        [ bench "lz4" $ nfIO (decompressFile "valgrind-3.15.0.tar.lz4")
                        , bench "lz4" $ nfIO (decompressFile "llvm-9.0.0.src.tar.lz4")
                        ]
                    , env lz4Files $ \ ~(v, l) ->
                      bgroup "decompress"
                        [ bench "lz4" $ nf decompress v
                        , bench "lz4" $ nf decompress l
                        ]
                    , bgroup "compress/dump"
                        [ bench "lz4" $ nfIO (compressDump dir "valgrind-3.15.0.tar")
                        , bench "lz4" $ nfIO (compressDump dir "llvm-9.0.0.src.tar")
                        ]
                    ]
    where lz4Files = (,) <$> valgrindFile <*> llvmFile
          valgrindFile = BSL.readFile "valgrind-3.15.0.tar.lz4"
          llvmFile = BSL.readFile "llvm-9.0.0.src.tar.lz4"