{-# LANGUAGE PackageImports #-}

module Main (main) where

import           BZip.Dump
import qualified "bz2" Codec.Compression.BZip   as BZ2
#ifdef WITH_BZLIB
import qualified "bzlib" Codec.Compression.BZip as BZlib
#endif
import           Criterion.Main
import qualified Data.ByteString.Lazy           as BSL

decompressFile :: FilePath -> IO BSL.ByteString
decompressFile = fmap BZ2.decompress . BSL.readFile

compressFile :: FilePath -> IO BSL.ByteString
compressFile = fmap BZ2.compress . BSL.readFile

main :: IO ()
main =
    defaultMain [ bgroup "decompressDump"
                      [ bench "decompress + write to file (bz2)" $ nfIO (decompressDump BZ2.decompress)
#ifdef WITH_BZLIB
                      , bench "decompress + write to file (bzlib)" $ nfIO (decompressDump BZlib.decompress)
#endif
                      ]
                , bgroup "compressDump"
                      [ bench "compress + write to file (bz2)" $ nfIO (compressDump BZ2.compress)
#ifdef WITH_BZLIB
                      , bench "compress + write to file (bzlib)" $ nfIO (compressDump BZlib.compress)
#endif
                      ]
                , bgroup "decompress"
                      [ bench "decompress file" $ nfIO (decompressFile "test/data/sample1.bz2")
                      , bench "decompress file" $ nfIO (decompressFile "test/data/sample2.bz2")
                      , bench "decompress file" $ nfIO (decompressFile "test/data/sample3.bz2")
                      ]
                , bgroup "compress"
                      [ bench "compress file" $ nfIO (compressFile "test/data/sample1.ref")
                      , bench "compress file" $ nfIO (compressFile "test/data/sample2.ref")
                      , bench "compress file" $ nfIO (compressFile "test/data/sample3.ref")
                      ]
                ]