module Main where import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar.Index as TarIndex import qualified Data.ByteString.Lazy as BS import Control.Exception import Criterion import Criterion.Main main = defaultMain benchmarks benchmarks :: [Benchmark] benchmarks = [ env loadTarFile $ \tarfile -> bench "read" (nf Tar.read tarfile) , env loadTarEntriesList $ \entries -> bench "write" (nf Tar.write entries) , env loadTarEntries $ \entries -> bench "index build" (nf TarIndex.build entries) , env loadTarIndex $ \entries -> bench "index rebuild" (nf (TarIndex.finalise . TarIndex.unfinalise) entries) ] loadTarFile :: IO BS.ByteString loadTarFile = BS.readFile "01-index.tar" loadTarEntries :: IO (Tar.Entries Tar.FormatError) loadTarEntries = fmap Tar.read loadTarFile loadTarEntriesList :: IO [Tar.Entry] loadTarEntriesList = fmap (Tar.foldEntries (:) [] throw) loadTarEntries loadTarIndex :: IO TarIndex.TarIndex loadTarIndex = fmap (either throw id . TarIndex.build) loadTarEntries