
module Main where

import BenchShow
import Gauge.Main
import Control.Exception
import Data.List (sortOn)
import Data.List.Split
import System.Environment (getArgs)

import BenchYields
import BenchPipes
import BenchCompare


main = do
  args <- getArgs
  if take 1 args == ["charts"]
     then renderCharts $ args !! 1
     else do
       defaultMain
        [ benchPipes
        , benchYields
        , benchCompare
        ]


renderCharts file = do
  stdgraph "mixed_naive" $ drop 1
  stdgraph "n_stages" $ drop 1
  stdgraph "mixed_optimised" $ drop 1
  
  graph file "yielding_vs_monadic" $
    defaultConfig
      { classifyBenchmark = \name ->
          case splitOn "/" name of
            ["pipes", b, c] -> Just (c, b)
            _               -> Nothing
      }

  where
    stdgraph name f =
      handle (\e -> print (e::SomeException)) $
        graph file name $
          defaultConfig
            { classifyBenchmark = \s ->
                case f (splitOn "/" s) of
                  [a, b, c] | a == name -> Just (c, b)
                  _                     -> Nothing
            , title = Just name
            , selectGroups = sortOn $ (/="piped") . fst
            }


module Main where

import BenchShow
import Gauge.Main
import Control.Exception
import Data.List (sortOn)
import Data.List.Split
import System.Environment (getArgs)

import BenchYields
import BenchPipes
import BenchCompare


main = do
  args <- getArgs
  if take 1 args == ["charts"]
     then renderCharts $ args !! 1
     else do
       defaultMain
        [ benchPipes
        , benchYields
        , benchCompare
        ]


renderCharts file = do
  stdgraph "mixed_naive" $ drop 1
  stdgraph "n_stages" $ drop 1
  stdgraph "mixed_optimised" $ drop 1
  
  graph file "yielding_vs_monadic" $
    defaultConfig
      { classifyBenchmark = \name ->
          case splitOn "/" name of
            ["pipes", b, c] -> Just (c, b)
            _               -> Nothing
      }

  where
    stdgraph name f =
      handle (\e -> print (e::SomeException)) $
        graph file name $
          defaultConfig
            { classifyBenchmark = \s ->
                case f (splitOn "/" s) of
                  [a, b, c] | a == name -> Just (c, b)
                  _                     -> Nothing
            , title = Just name
            , selectGroups = sortOn $ (/="piped") . fst
            }
