File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
bench-run/src/main/scala/tuples Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments