on fbc5b30 help sign in
effectful/bench/Main.hs
97 lines 3.2 kB history raw
1{-# LANGUAGE CPP #-}
2module Main (main) where
4#ifdef VERSION_criterion
5import Criterion
6import Criterion.Main
7#endif
9#ifdef VERSION_tasty_bench
10import Test.Tasty.Bench
11#endif
13import Countdown
14import FileSizes
16main :: IO ()
17main = defaultMain
18 [ bgroup "countdown" $ map countdown [1000, 10000]
19 , bgroup "filesize" $ map filesize [100, 1000]
20 ]
22countdown :: Integer -> Benchmark
23countdown n = bgroup (show n)
24 [ bgroup "shallow"
25 [ bench "reference" $ nf countdownRef n
26 , bench "effectful (pure-static)" $ nf countdownEffectfulStatic n
27 , bench "effectful (pure-dynamic)" $ nf countdownEffectfulDynPure n
28 , bench "effectful (MVar-static)" $ nf countdownEffectfulMVar n
29 , bench "effectful (MVar-dynamic)" $ nf countdownEffectfulDynMVar n
30#ifdef VERSION_freer_simple
31 , bench "freer-simple" $ nf countdownFreerSimple n
32#endif
33#ifdef VERSION_eff
34 , bench "eff" $ nf countdownEff n
35#endif
36 , bench "mtl" $ nf countdownMtl n
37#ifdef VERSION_fused_effects
38 , bench "fused-effects" $ nf countdownFusedEffects n
39#endif
40#ifdef VERSION_polysemy
41 , bench "polysemy" $ nf countdownPolysemy n
42#endif
43 ]
44 , bgroup "deep"
45 [ bench "effectful (pure-static)" $ nf countdownEffectfulStaticDeep n
46 , bench "effectful (pure-dynamic)" $ nf countdownEffectfulDynPureDeep n
47 , bench "effectful (MVar-static)" $ nf countdownEffectfulMVarDeep n
48 , bench "effectful (MVar-dynamic)" $ nf countdownEffectfulDynMVarDeep n
49#ifdef VERSION_freer_simple
50 , bench "freer-simple" $ nf countdownFreerSimpleDeep n
51#endif
52#ifdef VERSION_eff
53 , bench "eff" $ nf countdownEffDeep n
54#endif
55#ifdef VERSION_polysemy
56 , bench "polysemy" $ nf countdownPolysemyDeep n
57#endif
58 , bench "mtl" $ nf countdownMtlDeep n
59#ifdef VERSION_fused_effects
60 , bench "fused-effects" $ nf countdownFusedEffectsDeep n
61#endif
62 ]
63 ]
65filesize :: Int -> Benchmark
66filesize n = bgroup (show n)
67 [ bgroup "shallow"
68 [ bench "reference" $ nfAppIO ref_calculateFileSizes (take n files)
69 , bench "effectful" $ nfAppIO effectful_calculateFileSizes (take n files)
70#ifdef VERSION_freer_simple
71 , bench "freer-simple" $ nfAppIO fs_calculateFileSizes (take n files)
72#endif
73 , bench "mtl" $ nfAppIO mtl_calculateFileSizes (take n files)
74#ifdef VERSION_eff
75 , bench "eff" $ nfAppIO eff_calculateFileSizes (take n files)
76#endif
77#ifdef VERSION_polysemy
78 , bench "polysemy" $ nfAppIO poly_calculateFileSizes (take n files)
79#endif
80 ]
81 , bgroup "deep"
82 [ bench "effectful" $ nfAppIO effectful_calculateFileSizesDeep (take n files)
83#ifdef VERSION_freer_simple
84 , bench "freer-simple" $ nfAppIO fs_calculateFileSizesDeep (take n files)
85#endif
86#ifdef VERSION_eff
87 , bench "eff" $ nfAppIO eff_calculateFileSizesDeep (take n files)
88#endif
89#ifdef VERSION_polysemy
90 , bench "polysemy" $ nfAppIO poly_calculateFileSizesDeep (take n files)
91#endif
92 , bench "mtl" $ nfAppIO mtl_calculateFileSizesDeep (take n files)
93 ]
94 ]
95 where
96 files :: [FilePath]
97 files = repeat "effectful.cabal"