git.iko.soy/effects-benchmarks
on master help sign in
Use weigh for allocations testing
eb05140Patrick Thomson
effects-benchmarks.cabal+11
@@ -33,6 +33,14 @@ library instances-for-shallow
33 , Shallow.Stateful
33 , Shallow.Stateful
34 , Shallow.StatefulExcept
34 , Shallow.StatefulExcept
35
35
36+library instances-for-exteff
37+ import: shared
38+ hs-source-dirs: instances
39+ exposed-modules: ExtEff.Stateful
40+ , ExtEff.StatefulExcept
41+ , ExtEff.HTTP
42+ build-depends: extensible-effects ^>= 5.0.0.1
43+
36library instances-for-mtl
44library instances-for-mtl
37 import: shared
45 import: shared
38 hs-source-dirs: instances
46 hs-source-dirs: instances
@@ -75,8 +83,10 @@ benchmark effects-benchmarks
75 , instances-for-freer-simple
83 , instances-for-freer-simple
76 , instances-for-polysemy
84 , instances-for-polysemy
77 , instances-for-shallow
85 , instances-for-shallow
86+ , instances-for-exteff
78 , dump-core
87 , dump-core
79 , gauge
88 , gauge
89+ , weigh
80 , polysemy
90 , polysemy
81 main-is: Main.hs
91 main-is: Main.hs
82 mixins: benchmark-signatures (Bench.Countdown as MTL.Countdown, Bench.HTTP as MTL.HTTPM) requires (Bench.Signature.Stateful as MTLStateful, Bench.Signature.StatefulExcept as MTL.StatefulExcept, Bench.Signature.HTTP as MTL.HTTP)
92 mixins: benchmark-signatures (Bench.Countdown as MTL.Countdown, Bench.HTTP as MTL.HTTPM) requires (Bench.Signature.Stateful as MTLStateful, Bench.Signature.StatefulExcept as MTL.StatefulExcept, Bench.Signature.HTTP as MTL.HTTP)
@@ -84,3 +94,4 @@ benchmark effects-benchmarks
84 , benchmark-signatures (Bench.Countdown as Simple.Countdown, Bench.HTTP as Simple.HTTPM) requires (Bench.Signature.Stateful as FSStateful, Bench.Signature.StatefulExcept as Freer.StatefulExcept, Bench.Signature.HTTP as Freer.HTTP)
94 , benchmark-signatures (Bench.Countdown as Simple.Countdown, Bench.HTTP as Simple.HTTPM) requires (Bench.Signature.Stateful as FSStateful, Bench.Signature.StatefulExcept as Freer.StatefulExcept, Bench.Signature.HTTP as Freer.HTTP)
85 , benchmark-signatures (Bench.Countdown as Shallow.Countdown, Bench.HTTP as Shallow.HTTPM) requires (Bench.Signature.Stateful as Shallow.Stateful, Bench.Signature.StatefulExcept as Shallow.StatefulExcept, Bench.Signature.HTTP as Shallow.HTTP)
95 , benchmark-signatures (Bench.Countdown as Shallow.Countdown, Bench.HTTP as Shallow.HTTPM) requires (Bench.Signature.Stateful as Shallow.Stateful, Bench.Signature.StatefulExcept as Shallow.StatefulExcept, Bench.Signature.HTTP as Shallow.HTTP)
86 , benchmark-signatures (Bench.Countdown as Poly.Countdown, Bench.HTTP as Poly.HTTPM) requires (Bench.Signature.Stateful as Poly.Stateful, Bench.Signature.StatefulExcept as Poly.StatefulExcept, Bench.Signature.HTTP as Poly.HTTP)
96 , benchmark-signatures (Bench.Countdown as Poly.Countdown, Bench.HTTP as Poly.HTTPM) requires (Bench.Signature.Stateful as Poly.Stateful, Bench.Signature.StatefulExcept as Poly.StatefulExcept, Bench.Signature.HTTP as Poly.HTTP)
97+ , benchmark-signatures (Bench.Countdown as ExtEff.Countdown, Bench.HTTP as ExtEff.HTTPM) requires (Bench.Signature.Stateful as ExtEff.Stateful, Bench.Signature.StatefulExcept as ExtEff.StatefulExcept, Bench.Signature.HTTP as ExtEff.HTTP)
src/Main.hs+34−17
@@ -4,46 +4,63 @@ module Main where
4
4
5import Gauge (bench, bgroup, nf, nfAppIO)
5import Gauge (bench, bgroup, nf, nfAppIO)
6import Gauge.Main (defaultMain)
6import Gauge.Main (defaultMain)
7+import qualified Weigh
7
8
8import qualified Fused.Countdown as Fused
9import qualified Fused.Countdown as Fused
9import qualified Simple.Countdown as Simple
10import qualified Simple.Countdown as Simple
10import qualified Shallow.Countdown as Shallow
11import qualified Shallow.Countdown as Shallow
11import qualified MTL.Countdown as MTL
12import qualified MTL.Countdown as MTL
12import qualified Poly.Countdown as Poly
13import qualified Poly.Countdown as Poly
14+import qualified ExtEff.Countdown as ExtEff
13
15
14import qualified Fused.HTTPM as Fused
16import qualified Fused.HTTPM as Fused
15import qualified Simple.HTTPM as Simple
17import qualified Simple.HTTPM as Simple
16import qualified MTL.HTTPM as MTL
18import qualified MTL.HTTPM as MTL
17import qualified Shallow.HTTPM as Shallow
19import qualified Shallow.HTTPM as Shallow
18import qualified Poly.HTTPM as Poly
20import qualified Poly.HTTPM as Poly
21+import qualified ExtEff.HTTPM as ExtEff
22+
23+#define MEMSUITE(nam,v) sequence_ [ Weigh.func "fused-effects" Fused.nam v \
24+ , Weigh.func "mtl" MTL.nam v \
25+ , Weigh.func "polysemy" Poly.nam v \
26+ , Weigh.func "freer-simple" Simple.nam v \
27+ , Weigh.func "extensible-effects" ExtEff.nam v \
28+ , Weigh.func "shallow" Shallow.nam v ]
19
29
20#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
30#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
21 , bench "mtl" (nf MTL.nam v) \
31 , bench "mtl" (nf MTL.nam v) \
22 , bench "polysemy" (nf Poly.nam v) \
32 , bench "polysemy" (nf Poly.nam v) \
23 , bench "freer-simple" (nf Simple.nam v) \
33 , bench "freer-simple" (nf Simple.nam v) \
34+ , bench "extensible-effects" (nf ExtEff.nam v) \
24 , bench "shallow" (nf Shallow.nam v) ]
35 , bench "shallow" (nf Shallow.nam v) ]
25
36
37+wruns :: Int
38+wruns = 1
39+
26runs :: Int
40runs :: Int
27runs = 10000
41runs = 10000
28
42
29main :: IO ()
43main :: IO ()
44+main = do
45+ putStrLn "*** Time benchmarks ***"
30−main = defaultMain
46+ defaultMain
31− [
47+ [
32− bgroup "Countdown"
48+ bgroup "Countdown"
33− [ bgroup "Put" SUITE(countDownPut, runs)
49+ [ bgroup "Put" SUITE(countDownPut, runs)
34− , bgroup "Put+Exc" SUITE(countDownExc, runs)
50+ , bgroup "Put+Exc" SUITE(countDownExc, runs)
35− ]
51+ ]
36− , bgroup "HTTP"
52+ , bgroup "HTTP"
37− [ bench "fused-effects" (nfAppIO Fused.doHTTP runs)
53+ [ bench "fused-effects" (nfAppIO Fused.doHTTP runs)
38− , bench "polysemy" (nfAppIO Poly.doHTTP runs)
54+ , bench "polysemy" (nfAppIO Poly.doHTTP runs)
55+ , bench "extensible-effects" (nfAppIO ExtEff.doHTTP runs)
39− , bench "Deep embedding" (nfAppIO MTL.doHTTP runs)
56+ , bench "Deep embedding" (nfAppIO MTL.doHTTP runs)
40− , bench "Shallow embedding" (nfAppIO Shallow.doHTTP runs)
57+ , bench "Shallow embedding" (nfAppIO Shallow.doHTTP runs)
41− , bench "freer-simple" (nfAppIO Simple.doHTTP runs)
58+ , bench "freer-simple" (nfAppIO Simple.doHTTP runs)
59+ ]
42 ]
60 ]
43− ]
44
61
45−bareDown :: Int -> (Int, Int)
62+ putStrLn "*** Space benchmarks (these will take some time to run) ***"
46−bareDown st = if st <= 0 then (st, st) else bareDown (st - 1)
63+ Weigh.mainWith $ do
64+ Weigh.wgroup "Countdown" $ MEMSUITE(countDownPut, wruns)
65+ Weigh.wgroup "Countdown + exc" $ MEMSUITE(countDownExc, wruns)
47
66
48−bareDownExc :: Int -> Either String (Int, Int)
49−bareDownExc st = if st <= 0 then Left "what" else bareDownExc (st - 1)