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