File: bench.hs

package info (click to toggle)
haskell-terminal-progress-bar 0.4.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 100 kB
  • sloc: haskell: 509; makefile: 3
file content (51 lines) | stat: -rw-r--r-- 1,901 bytes parent folder | download | duplicates (3)
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
46
47
48
49
50
51
{-# language PackageImports #-}
module Main where

import "base" Data.Monoid ( (<>) )
import "criterion" Criterion.Main
import "terminal-progress-bar" System.ProgressBar
import "time" Data.Time.Clock ( UTCTime(..) )

main :: IO ()
main = defaultMain
       [ renderProgressBarBenchmark  10   0
       , renderProgressBarBenchmark  10  50
       , renderProgressBarBenchmark  10 100
       , renderProgressBarBenchmark 100   0
       , renderProgressBarBenchmark 100  50
       , renderProgressBarBenchmark 100 100
       , renderProgressBarBenchmark 200   0
       , renderProgressBarBenchmark 200  50
       , renderProgressBarBenchmark 200 100
       , labelBenchmark "percentage" percentage (Progress   0 100 ())
       , labelBenchmark "percentage" percentage (Progress  50 100 ())
       , labelBenchmark "percentage" percentage (Progress 100 100 ())
       , labelBenchmark "exact"      exact      (Progress   0 100 ())
       , labelBenchmark "exact"      exact      (Progress  50 100 ())
       , labelBenchmark "exact"      exact      (Progress 100 100 ())
       ]

renderProgressBarBenchmark :: Int -> Int -> Benchmark
renderProgressBarBenchmark width done =
    bench name $ nf (\(s, p, t) -> renderProgressBar s p t)
        ( defStyle{styleWidth = ConstantWidth width}
        , Progress done 100 ()
        , someTiming
        )
  where
    name = "progressBar/default - "
           <> show width <> " wide - progress " <> show done <> " % 100"

labelBenchmark :: String -> Label () -> Progress () -> Benchmark
labelBenchmark labelName label progress =
    bench name $ nf (\(p, t) -> runLabel label p t) (progress, someTiming)
  where
    name = "label/" <> labelName <> " "
           <> show (progressDone progress) <> " % "
           <> show (progressTodo progress)

someTime :: UTCTime
someTime = UTCTime (toEnum 0) 0

someTiming :: Timing
someTiming = Timing someTime someTime