From 0b77c407e7822b466a2fad439d5e6336ebee4bd2 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Mon, 18 Jan 2010 14:57:18 +0000 Subject: some more performance tunings. No review. --- test/files/run/tailcalls.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test/files/run') 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) + } //############################################################################ -- cgit v1.2.3