diff options
author | Martin Odersky <odersky@gmail.com> | 2010-01-18 14:57:18 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2010-01-18 14:57:18 +0000 |
commit | 0b77c407e7822b466a2fad439d5e6336ebee4bd2 (patch) | |
tree | 3642529234aab1a6859e80adee16c88ddf577fed /test/files/run | |
parent | 1184fd68b0bddeaf20b3a7de55d4be2efce61410 (diff) | |
download | scala-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.scala | 12 |
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) + } //############################################################################ |