packages feed

streaming-benchmarks-0.2.0: Benchmarks/BenchmarkTH.hs

{-# LANGUAGE TemplateHaskell #-}

module Benchmarks.BenchmarkTH (createBgroup, createScaling) where

import Benchmarks.Common (benchIO, benchPure)
--import Benchmarks.Common (benchId)
import Language.Haskell.TH.Syntax (Q, Exp, mkName)
import Language.Haskell.TH.Lib (varE)

createBgroup :: String -> String -> Q Exp
createBgroup name fname =
    [|
        bgroup name
            [ benchIO "vector"    $(varE (mkName ("Vector.source")))
                                  $(varE (mkName ("Vector." ++ fname)))
            , benchIO "streamly"  $(varE (mkName ("Streamly.source")))
                                  $(varE (mkName ("Streamly." ++ fname)))
            , benchIO "streaming" $(varE (mkName ("Streaming.source")))
                                  $(varE (mkName ("Streaming." ++ fname)))
            , benchIO "machines"  $(varE (mkName ("Machines.source")))
                                  $(varE (mkName ("Machines." ++ fname)))
            , benchIO "pipes"     $(varE (mkName ("Pipes.source")))
                                  $(varE (mkName ("Pipes." ++ fname)))
            , benchIO "conduit"   $(varE (mkName ("Conduit.source")))
                                  $(varE (mkName ("Conduit." ++ fname)))
            , benchIO "drinkery"  $(varE (mkName ("Drinkery.source")))
                                  $(varE (mkName ("Drinkery." ++ fname)))
            , benchPure "list"    $(varE (mkName ("List.source")))
                                  $(varE (mkName ("List." ++ fname)))
            , benchPure "pure-vector" $(varE (mkName ("VectorPure.source")))
                                  $(varE (mkName ("VectorPure." ++ fname)))
            ]
    |]

createScaling :: String -> String -> Q Exp
createScaling name mname =
    [| let src = $(varE (mkName (mname ++ ".source")))
       in  bgroup name
            [ benchIO "1" src ($(varE (mkName (mname ++ ".composeScaling"))) 1)
            , benchIO "2" src ($(varE (mkName (mname ++ ".composeScaling"))) 2)
            , benchIO "3" src ($(varE (mkName (mname ++ ".composeScaling"))) 3)
            , benchIO "4" src ($(varE (mkName (mname ++ ".composeScaling"))) 4)
            ]
    |]