on master help sign in
Add benchmark for small number of ctors
commit12b05d8c57a963eeecb93ed5fbfde7cba3ce10e1 authorjmite <jmitdase@gmail.com> dateThu 20 Aug 2015, 13:58 (11 years ago) parenteaf4a03
2 files changed+83−1
bench/CompilerBenchmarks.elm+7−1 bench/src/SmallCtorBench.elm+76
bench/CompilerBenchmarks.elm+7−1
@@ -16,6 +16,7 @@ import SmallRecordBench
1616import TupleBench
1717import SmallTupleBench
1818import CtorBench
19+import SmallCtorBench
1920
2021{-| Compile this with --output=Benchmarks.html to generate
2122 a webpage, which runs the benchmarks and shows the results.
@@ -29,6 +30,7 @@ mySuite =
2930 , Benchmark.bench1 "Access 9-field tuple 200 times: " TupleBench.sumRandomElems indices200
3031 , Benchmark.bench1 "Access 3-field tuple 200 times: " SmallTupleBench.sumRandomElems indices200
3132 , Benchmark.bench1 "Access 20-constructor Type 200 times: " CtorBench.sumFieldsList ctorData200
33+ , Benchmark.bench1 "Access 10-constructor Type 200 times: " SmallCtorBench.sumFieldsList smallCtorData200
3234
3335 , Benchmark.bench1 "Make and sum dict, 10000 elems: " LargeDictionary.addNToDictAndSum 10000
3436 , Benchmark.bench1 "Make and sum dict, 50 elems: " LargeDictionary.addNToDictAndSum 50
@@ -126,4 +128,8 @@ timeSteps30s =
126128 List.map (\x -> (1.0 / 30.0) * (toFloat x * Time.second) ) [1 .. 900]
127129
128130ctorData200 =
129− List.map CtorBench.makeRandomData indices200
131+ List.map CtorBench.makeRandomData indices200
132+
133+
134+smallCtorData200 =
135+ List.map SmallCtorBench.makeRandomData indices200
bench/src/SmallCtorBench.elmnew file+76
@@ -0,0 +1,76 @@
1+module SmallCtorBench 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+
15+
16+getFieldSum someData =
17+ case someData of
18+ MyLongNamedCtor1 x y z ->
19+ x + y + z
20+
21+ MyLongNamedCtor3 x y z ->
22+ x + y + z
23+
24+ MyLongNamedCtor5 x y z ->
25+ x + y + z
26+
27+ MyLongNamedCtor7 x y z ->
28+ x + y + z
29+
30+ MyLongNamedCtor9 x y z ->
31+ x + y + z
32+
33+ MyLongNamedCtor10 x y ->
34+ x + y
35+
36+ MyLongNamedCtor8 x y ->
37+ x + y
38+
39+ MyLongNamedCtor6 x y ->
40+ x + y
41+
42+ MyLongNamedCtor4 x y ->
43+ x + y
44+
45+ MyLongNamedCtor2 x y ->
46+ x + y
47+
48+
49+makeRandomData i =
50+ case (i % 10) of
51+ 0 ->
52+ MyLongNamedCtor10 (toFloat i) (toFloat <| i*i)
53+ 1 ->
54+ MyLongNamedCtor1 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
55+ 2 ->
56+ MyLongNamedCtor2 (toFloat i) (toFloat <| i*i)
57+ 3 ->
58+ MyLongNamedCtor3 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
59+ 4 ->
60+ MyLongNamedCtor4 (toFloat i) (toFloat <| i*i)
61+ 5 ->
62+ MyLongNamedCtor5 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
63+ 6 ->
64+ MyLongNamedCtor6 (toFloat i) (toFloat <| i*i)
65+ 7 ->
66+ MyLongNamedCtor7 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
67+ 8 ->
68+ MyLongNamedCtor8 (toFloat i) (toFloat <| i*i)
69+ 9 ->
70+ MyLongNamedCtor9 (toFloat i) (toFloat <| i*i) (toFloat <| i*i*i)
71+
72+
73+
74+sumFieldsList : List ManyCtors -> Float
75+sumFieldsList dataList =
76+ List.foldr (\val sumSoFar -> (getFieldSum val) + sumSoFar ) 0.0 dataList