effectful-0.0.0.0: bench/Main.hs
{-# LANGUAGE CPP #-}
module Main (main) where
import Test.Tasty.Bench
import Countdown
main :: IO ()
main = defaultMain
[ bgroup "countdown"
[ bgroup "reference" $ mkCountdown nf countdownRef
, bgroup "shallow"
[ bgroup "efectful (SP)" $ mkCountdown nfAppIO countdownEffectfulStatic
, bgroup "efectful (SM)" $ mkCountdown nfAppIO countdownEffectfulMVar
, bgroup "efectful (DP)" $ mkCountdown nfAppIO countdownEffectfulDynPure
, bgroup "efectful (DM)" $ mkCountdown nfAppIO countdownEffectfulDynMVar
#ifdef VERSION_freer_simple
, bgroup "freer-simple" $ mkCountdown nf countdownFreerSimple
#endif
#ifdef VERSION_eff
, bgroup "eff" $ mkCountdown nf countdownEff
#endif
, bgroup "mtl" $ mkCountdown nf countdownMtl
#ifdef VERSION_fused_effects
, bgroup "fused-effects" $ mkCountdown nf countdownFusedEffects
#endif
#ifdef VERSION_polysemy
, bgroup "polysemy" $ mkCountdown nf countdownPolysemy
#endif
]
, bgroup "deep"
[ bgroup "efectful (SP)" $ mkCountdown nfAppIO countdownEffectfulStaticDeep
, bgroup "efectful (SM)" $ mkCountdown nfAppIO countdownEffectfulMVarDeep
, bgroup "efectful (DP)" $ mkCountdown nfAppIO countdownEffectfulDynPureDeep
, bgroup "efectful (DM)" $ mkCountdown nfAppIO countdownEffectfulDynMVarDeep
#ifdef VERSION_eff
, bgroup "eff" $ mkCountdown nf countdownEffDeep
#endif
#ifdef VERSION_freer_simple
, bgroup "freer-simple" $ mkCountdown nf countdownFreerSimpleDeep
#endif
#ifdef VERSION_polysemy
, bgroup "polysemy" $ mkCountdown nf countdownPolysemyDeep
#endif
, bgroup "mtl" $ mkCountdown nf countdownMtlDeep
#ifdef VERSION_fused_effects
, bgroup "fused-effects" $ mkCountdown nf countdownFusedEffectsDeep
#endif
]
]
]
mkCountdown :: (nf -> Integer -> Benchmarkable) -> nf -> [Benchmark]
mkCountdown f g = map (\n -> bench (show n) $ f g n) [100, 1000, 10000]