diff options
author | Martin Odersky <odersky@gmail.com> | 2016-12-14 14:37:13 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-12-17 18:34:27 +0100 |
commit | 04adb53b8d079ea114c5432ca3b3f824c80756a7 (patch) | |
tree | 5a21d3570dd5b5d2d70805a4d2266f0c7f943264 /tests/bench/transactional/ImplicitMono.scala | |
parent | 30faa7b5e2dee0e2b80fe2c7696df20537644d74 (diff) | |
download | dotty-04adb53b8d079ea114c5432ca3b3f824c80756a7.tar.gz dotty-04adb53b8d079ea114c5432ca3b3f824c80756a7.tar.bz2 dotty-04adb53b8d079ea114c5432ca3b3f824c80756a7.zip |
Add benchmarks
Benchmark code to compare compilation schemes in
different scenarios. See results.md for explanations.
Diffstat (limited to 'tests/bench/transactional/ImplicitMono.scala')
-rw-r--r-- | tests/bench/transactional/ImplicitMono.scala | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/bench/transactional/ImplicitMono.scala b/tests/bench/transactional/ImplicitMono.scala new file mode 100644 index 000000000..10391f191 --- /dev/null +++ b/tests/bench/transactional/ImplicitMono.scala @@ -0,0 +1,45 @@ +package transactional +object MonoBench extends Benchmark { + type Transactional[T] = implicit Transaction => T + + def transaction[T](op: Transactional[T]): T = { + implicit val trans: Transaction = new Transaction + val res = op + trans.commit() + res + } + + def thisTransaction: Transactional[Transaction] = implicitly[Transaction] + + def f1(x: Int): Transactional[Int] = { + thisTransaction.println("first step") + f2(x + 1) + } + def f2(x: Int): Transactional[Int] = { + thisTransaction.println("second step") + f3(x * x) + } + def f3(x: Int): Transactional[Int] = { + thisTransaction.println("third step") + f4(x + 1, 7) + } + def f4(x: Int, n: Int): Transactional[Int] = { + thisTransaction.println("fourth step") + if (n > 0) f4(x + 1, n - 1) + else { + if (x % 2 != 0) thisTransaction.abort() + x + } + } + + def run(): Int = { + transaction { + val res = f1(7) + assert(!thisTransaction.isAborted) + assert(res == 72) + res + } + } +} + +object ImplicitMono extends Runner("monomorphic implicits", MonoBench, 72) |