{-# 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) ] |]