Skip to content

Commit a5a6fe9

Browse files
author
Antoine Brunner
committed
Add global benchmark on tuples
1 parent 38e4fbd commit a5a6fe9

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package dotty.tools.benchmarks.tuples
2+
3+
import org.openjdk.jmh.annotations._
4+
5+
@State(Scope.Thread)
6+
class TupleOps {
7+
var tuple1: Tuple = _
8+
var tuple2: Tuple = _
9+
10+
@Setup
11+
def setup(): Unit = {
12+
tuple1 = ()
13+
for (i <- 1 until 15)
14+
tuple1 = s"elem$i" *: tuple1
15+
16+
tuple2 = ()
17+
for (i <- 1 until 10)
18+
tuple2 = s"elem$i" *: tuple2
19+
}
20+
21+
def tupleFlatMap(tuple: Tuple, f: [A] => A => Tuple): Tuple = {
22+
def tailRecFlatMap(t: Tuple, acc: Tuple): Tuple = t match {
23+
case () => acc
24+
case x *: rest => tailRecFlatMap(rest, acc ++ f(x))
25+
}
26+
tailRecFlatMap(tuple, ())
27+
}
28+
29+
def tupleReverse(tuple: Tuple): Tuple = {
30+
def tailRecReverse(t: Tuple, acc: Tuple): Tuple = t match {
31+
case () => acc
32+
case x *: rest => tailRecReverse(rest, x *: acc)
33+
}
34+
tailRecReverse(tuple, ())
35+
}
36+
37+
@Benchmark
38+
def reverse(): Tuple = {
39+
tupleReverse(tuple1)
40+
}
41+
42+
@Benchmark
43+
def flatMap(): Tuple = {
44+
tupleFlatMap(tuple2, [A] => (x: A) => (x, x))
45+
}
46+
}

0 commit comments

Comments
 (0)