diff options
Diffstat (limited to 'test/files/run/tailcalls.scala')
-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) + } //############################################################################ |