File: Main.hs

package info (click to toggle)
haskell-tar 0.5.1.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 256 kB
  • sloc: haskell: 2,340; makefile: 4
file content (45 lines) | stat: -rw-r--r-- 1,092 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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