packages feed

bench-1.0.0: src/Main.hs

{-# LANGUAGE OverloadedStrings  #-}

module Main where

import Control.Applicative
import Data.Text (Text)
import Turtle (Parser)

import qualified Criterion
import qualified Criterion.Main         as Criterion
import qualified Criterion.Main.Options as Criterion
import qualified Data.Text              as Text
import qualified System.IO              as IO
import qualified System.IO.Silently     as Silently
import qualified Turtle

data Options = Options
    { command   :: Text
    , mode      :: Criterion.Mode
    }

parser :: Parser Options
parser =
        Options
    <$> Turtle.argText "command" "The command line to benchmark"
    <*> Criterion.parseWith Criterion.defaultConfig

main :: IO ()
main = do
    o <- Turtle.options "Command-line tool to benchmark other programs" parser
    let io        = Turtle.shells (command o) empty
    let benchmark = Criterion.nfIO (Silently.hSilence [IO.stdout, IO.stderr] io)
    let name      = Text.unpack (command o)
    Criterion.runMode (mode o) [ Criterion.bench name benchmark ]