content: module Main (main) where
  
  import BenchRunner (mainWith)
  import BuildLib (Quickness(..))
  import Control.Applicative ((<|>))
  import Data.List (isInfixOf, isPrefixOf, isSuffixOf)
  
  -- tags with _grp and _cmp suffixes are special
   -- [(<benchmark name>", [<tags>])]
  targets :: [(String, [String])]
  targets =
      [ ("StreamlyPure", ["pure_stream_cmp"])
      , ("List", ["pure_stream_cmp"])
      , ("Streamly", ["io_stream_cmp"])
      , ("ByteStringLazy", ["io_stream_cmp"])
      , ("VectorStreams", [])
      -- , ("Streaming", [])
      -- , ("Machines", [])
      -- , ("Pipes", [])
      -- , ("Conduit", [])
      -- , ("Drinkery", [])
      ]
  
  rtsOpts :: String -> String -> String
  rtsOpts exeName benchName0 = unwords [general, exeSpecific, benchSpecific]
  
      where
  
      -- Drop All.
      benchName = drop 4 benchName0
      general
          -- | "o-1-sp" `isInfixOf` benchName = "-K36K -M16M"
          | otherwise = ""
      exeSpecific
          -- | "Prelude.Concurrent" `isSuffixOf` exeName = "-K512K -M384M"
          | otherwise = ""
      benchSpecific
          -- | "Data.Stream.StreamD/o-n-space.elimination.toList" == benchName = "-K2M"
          | otherwise = ""
  
  speedOpts :: String -> String -> Maybe Quickness
  speedOpts exeName benchName0 = exeSpecific <|> benchSpecific
  
      where
  
      -- slowestOf Quicker _ = Quicker
      -- slowestOf _ Quicker = Quicker
      -- slowestOf _ _ = SuperQuick
  
      -- Drop All.
      benchName = drop 4 benchName0
      exeSpecific
          -- | "Prelude.Concurrent" == exeName = Just SuperQuick
          | otherwise = Nothing
      benchSpecific
          -- | "Prelude.Parallel/o-n-heap.mapping.mapM" == benchName = Just SuperQuick
          | otherwise = Nothing
  
  main :: IO ()
  main = mainWith targets speedOpts rtsOpts
  