summaryrefslogtreecommitdiff
path: root/test/files/run
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2010-01-18 14:57:18 +0000
committerMartin Odersky <odersky@gmail.com>2010-01-18 14:57:18 +0000
commit0b77c407e7822b466a2fad439d5e6336ebee4bd2 (patch)
tree3642529234aab1a6859e80adee16c88ddf577fed /test/files/run
parent1184fd68b0bddeaf20b3a7de55d4be2efce61410 (diff)
downloadscala-0b77c407e7822b466a2fad439d5e6336ebee4bd2.tar.gz
scala-0b77c407e7822b466a2fad439d5e6336ebee4bd2.tar.bz2
scala-0b77c407e7822b466a2fad439d5e6336ebee4bd2.zip
some more performance tunings. No review.
Diffstat (limited to 'test/files/run')
-rw-r--r--test/files/run/tailcalls.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/files/run/tailcalls.scala b/test/files/run/tailcalls.scala
index 7f40277d4d..2d136b5708 100644
--- a/test/files/run/tailcalls.scala
+++ b/test/files/run/tailcalls.scala
@@ -381,6 +381,18 @@ object Test {
check_success("PolyObject.tramp", PolyObject.tramp[Int](max), 0)
}
+ // testing explicit tailcalls.
+
+ import scala.util.control.TailCalls._
+
+ def isEven(xs: List[Int]): TailRec[Boolean] =
+ if (xs.isEmpty) done(true) else tailcall(isOdd(xs.tail))
+
+ def isOdd(xs: List[Int]): TailRec[Boolean] =
+ if (xs.isEmpty) done(false) else tailcall(isEven(xs.tail))
+
+ assert(isEven((1 to 100000).toList).result)
+
}
//############################################################################