on master help sign in
Add ADT ctor benchmarks
eaf4a03jmite
bench/CompilerBenchmarks.elm+4−1
@@ -15,7 +15,7 @@ import RecordBench
15import SmallRecordBench
15import SmallRecordBench
16import TupleBench
16import TupleBench
17import SmallTupleBench
17import SmallTupleBench
18−
18+import CtorBench
19
19
20{-| Compile this with --output=Benchmarks.html to generate
20{-| Compile this with --output=Benchmarks.html to generate
21 a webpage, which runs the benchmarks and shows the results.
21 a webpage, which runs the benchmarks and shows the results.
@@ -28,6 +28,7 @@ mySuite =
28 , Benchmark.bench1 "Access 9-field record 200 times: " SmallRecordBench.sumRandomElems indices200
28 , Benchmark.bench1 "Access 9-field record 200 times: " SmallRecordBench.sumRandomElems indices200
29 , Benchmark.bench1 "Access 9-field tuple 200 times: " TupleBench.sumRandomElems indices200
29 , Benchmark.bench1 "Access 9-field tuple 200 times: " TupleBench.sumRandomElems indices200
30 , Benchmark.bench1 "Access 3-field tuple 200 times: " SmallTupleBench.sumRandomElems indices200
30 , Benchmark.bench1 "Access 3-field tuple 200 times: " SmallTupleBench.sumRandomElems indices200
31+ , Benchmark.bench1 "Access 20-constructor Type 200 times: " CtorBench.sumFieldsList ctorData200
31
32
32 , Benchmark.bench1 "Make and sum dict, 10000 elems: " LargeDictionary.addNToDictAndSum 10000
33 , Benchmark.bench1 "Make and sum dict, 10000 elems: " LargeDictionary.addNToDictAndSum 10000
33 , Benchmark.bench1 "Make and sum dict, 50 elems: " LargeDictionary.addNToDictAndSum 50
34 , Benchmark.bench1 "Make and sum dict, 50 elems: " LargeDictionary.addNToDictAndSum 50
@@ -124,3 +125,5 @@ indices200 =
124timeSteps30s =
125timeSteps30s =
125 List.map (\x -> (1.0 / 30.0) * (toFloat x * Time.second) ) [1 .. 900]
126 List.map (\x -> (1.0 / 30.0) * (toFloat x * Time.second) ) [1 .. 900]
126
127
128+ctorData200 =
129+ List.map CtorBench.makeRandomData indices200
bench/src/CtorBench.elmnew file+135
@@ -0,0 +1,135 @@
1+module CtorBench where
2+
3+type ManyCtors =
4+ MyLongNamedCtor1 Float Float Float
5+ | MyLongNamedCtor2 Float Float
6+ | MyLongNamedCtor3 Float Float Float
7+ | MyLongNamedCtor4 Float Float
8+ | MyLongNamedCtor5 Float Float Float
9+ | MyLongNamedCtor6 Float Float
10+ | MyLongNamedCtor7 Float Float Float
11+ | MyLongNamedCtor8 Float Float
12+ | MyLongNamedCtor9 Float Float Float
13+ | MyLongNamedCtor10 Float Float
14+ | MyLongNamedCtor11 Float Float Float
15+ | MyLongNamedCtor12 Float Float
16+ | MyLongNamedCtor13 Float Float Float
17+ | MyLongNamedCtor14 Float Float
18+ | MyLongNamedCtor15 Float Float Float
19+ | MyLongNamedCtor16 Float Float
20+ | MyLongNamedCtor17 Float Float Float
21+ | MyLongNamedCtor18 Float Float
22+ | MyLongNamedCtor19 Float Float Float
23+ | MyLongNamedCtor20 Float Float
24+
25+
26+getFieldSum someData =
27+ case someData of
28+ MyLongNamedCtor1 x y z ->
29+ x + y + z
30+
31+ MyLongNamedCtor3 x y z ->
32+ x + y + z
33+
34+ MyLongNamedCtor5 x y z ->
35+ x + y + z
36+
37+ MyLongNamedCtor7 x y z ->
38+ x + y + z
39+
40+ MyLongNamedCtor9 x y z ->
41+ x + y + z
42+
43+ MyLongNamedCtor11 x y z ->
44+ x + y + z
45+
46+ MyLongNamedCtor13 x y z ->
47+ x + y + z
48+
49+ MyLongNamedCtor15 x y z ->
50+ x + y + z
51+
52+ MyLongNamedCtor17 x y z ->
53+ x + y + z
54+
55+ MyLongNamedCtor19 x y z ->
56+ x + y + z
57+
58+ MyLongNamedCtor20 x y ->
59+ x + y
60+
61+ MyLongNamedCtor18 x y ->
62+ x + y
63+
64+ MyLongNamedCtor16 x y ->
65+ x + y
66+
67+ MyLongNamedCtor14 x y ->
68+ x + y
69+
70+ MyLongNamedCtor12 x y ->
71+ x + y
72+
73+ MyLongNamedCtor10 x y ->
74+ x + y
75+
76+ MyLongNamedCtor8 x y ->
77+ x + y
78+
79+ MyLongNamedCtor6 x y ->
80+ x + y
81+
82+ MyLongNamedCtor4 x y ->
83+ x + y
84+
85+ MyLongNamedCtor2 x y ->
86+ x + y
87+
88+
89+makeRandomData i =
90+ case (i % 20) of
91+ 0 ->
92+ MyLongNamedCtor20 (toFloat i) (toFloat <| i*i)
93+ 1 ->
94+ MyLongNamedCtor1 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
95+ 2 ->
96+ MyLongNamedCtor2 (toFloat i) (toFloat <| i*i)
97+ 3 ->
98+ MyLongNamedCtor3 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
99+ 4 ->
100+ MyLongNamedCtor4 (toFloat i) (toFloat <| i*i)
101+ 5 ->
102+ MyLongNamedCtor5 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
103+ 6 ->
104+ MyLongNamedCtor6 (toFloat i) (toFloat <| i*i)
105+ 7 ->
106+ MyLongNamedCtor7 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
107+ 8 ->
108+ MyLongNamedCtor8 (toFloat i) (toFloat <| i*i)
109+ 9 ->
110+ MyLongNamedCtor9 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
111+ 10 ->
112+ MyLongNamedCtor10 (toFloat i) (toFloat <| i*i)
113+ 11 ->
114+ MyLongNamedCtor11 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
115+ 12 ->
116+ MyLongNamedCtor12 (toFloat i) (toFloat <| i*i)
117+ 13 ->
118+ MyLongNamedCtor13 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
119+ 14 ->
120+ MyLongNamedCtor14 (toFloat i) (toFloat <| i*i)
121+ 15 ->
122+ MyLongNamedCtor15 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
123+ 16 ->
124+ MyLongNamedCtor16 (toFloat i) (toFloat <| i*i)
125+ 17 ->
126+ MyLongNamedCtor17 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
127+ 18 ->
128+ MyLongNamedCtor18 (toFloat i) (toFloat <| i*i)
129+ 19 ->
130+ MyLongNamedCtor19 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
131+
132+
133+sumFieldsList : List ManyCtors -> Float
134+sumFieldsList dataList =
135+ List.foldr (\val sumSoFar -> (getFieldSum val) + sumSoFar ) 0.0 dataList