diff options
author | Paul Phillips <paulp@improving.org> | 2010-04-05 06:24:22 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-04-05 06:24:22 +0000 |
commit | e8a121e9e1ade3f283f42fceb3c18f30a8468f57 (patch) | |
tree | fc58111a69bb8940f7c5bd341fa3a8f097955403 /test/continuations/run | |
parent | 28ed5c6b216463a6e5bd8f06986c35a2036bda3f (diff) | |
download | scala-e8a121e9e1ade3f283f42fceb3c18f30a8468f57.tar.gz scala-e8a121e9e1ade3f283f42fceb3c18f30a8468f57.tar.bz2 scala-e8a121e9e1ade3f283f42fceb3c18f30a8468f57.zip |
If I work on this patch any longer without chec...
If I work on this patch any longer without checking in I will go
stark raving mad. It is broken up into a couple pieces. This one is
the changes to test/. It includes fixing a bunch of tests, removing
deprecated constructs, moving jars used by tests to the most specific
plausible location rather than having all jars on the classpath of all
tests, and some filesystem layout change (continuations get their whole
own srcpath.) This would be the world's most tedious review, so let's
say no review.
[Note: after this commit, I doubt things will build very smoothly until
the rest of the partest changes follow. Which should only be seconds,
but just in case.]
Diffstat (limited to 'test/continuations/run')
53 files changed, 687 insertions, 0 deletions
diff --git a/test/continuations/run/basics.check b/test/continuations/run/basics.check new file mode 100755 index 0000000000..54c059fdcb --- /dev/null +++ b/test/continuations/run/basics.check @@ -0,0 +1,2 @@ +28 +28
\ No newline at end of file diff --git a/test/continuations/run/basics.scala b/test/continuations/run/basics.scala new file mode 100755 index 0000000000..9df209b11c --- /dev/null +++ b/test/continuations/run/basics.scala @@ -0,0 +1,23 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def m0() = { + shift((k:Int => Int) => k(k(7))) * 2 + } + + def m1() = { + 2 * shift((k:Int => Int) => k(k(7))) + } + + def main(args: Array[String]) = { + + println(reset(m0())) + println(reset(m1())) + + } + +} diff --git a/test/continuations/run/function1.check b/test/continuations/run/function1.check new file mode 100644 index 0000000000..7f8f011eb7 --- /dev/null +++ b/test/continuations/run/function1.check @@ -0,0 +1 @@ +7 diff --git a/test/continuations/run/function1.scala b/test/continuations/run/function1.scala new file mode 100644 index 0000000000..3b39722e3a --- /dev/null +++ b/test/continuations/run/function1.scala @@ -0,0 +1,16 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def main(args: Array[String]): Any = { + + val f = () => shift { k: (Int=>Int) => k(7) } + val g: () => Int @cps[Int] = f + + println(reset(g())) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/function4.check b/test/continuations/run/function4.check new file mode 100644 index 0000000000..c7930257df --- /dev/null +++ b/test/continuations/run/function4.check @@ -0,0 +1 @@ +7
\ No newline at end of file diff --git a/test/continuations/run/function4.scala b/test/continuations/run/function4.scala new file mode 100644 index 0000000000..b73eedb02c --- /dev/null +++ b/test/continuations/run/function4.scala @@ -0,0 +1,15 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def main(args: Array[String]): Any = { + + val g: () => Int @cps[Int] = () => shift { k: (Int=>Int) => k(7) } + + println(reset(g())) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/function5.check b/test/continuations/run/function5.check new file mode 100644 index 0000000000..c7930257df --- /dev/null +++ b/test/continuations/run/function5.check @@ -0,0 +1 @@ +7
\ No newline at end of file diff --git a/test/continuations/run/function5.scala b/test/continuations/run/function5.scala new file mode 100644 index 0000000000..a689ccf243 --- /dev/null +++ b/test/continuations/run/function5.scala @@ -0,0 +1,15 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def main(args: Array[String]): Any = { + + val g: () => Int @cps[Int] = () => 7 + + println(reset(g())) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/function6.check b/test/continuations/run/function6.check new file mode 100644 index 0000000000..c7930257df --- /dev/null +++ b/test/continuations/run/function6.check @@ -0,0 +1 @@ +7
\ No newline at end of file diff --git a/test/continuations/run/function6.scala b/test/continuations/run/function6.scala new file mode 100644 index 0000000000..1a2792370a --- /dev/null +++ b/test/continuations/run/function6.scala @@ -0,0 +1,16 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def main(args: Array[String]): Any = { + + val g: PartialFunction[Int, Int @cps[Int]] = { case x => 7 } + + println(reset(g(2))) + + } + +}
\ No newline at end of file diff --git a/test/continuations/run/ifelse0.check b/test/continuations/run/ifelse0.check new file mode 100644 index 0000000000..f8bc79860d --- /dev/null +++ b/test/continuations/run/ifelse0.check @@ -0,0 +1,2 @@ +10 +9
\ No newline at end of file diff --git a/test/continuations/run/ifelse0.scala b/test/continuations/run/ifelse0.scala new file mode 100644 index 0000000000..e34b86ee84 --- /dev/null +++ b/test/continuations/run/ifelse0.scala @@ -0,0 +1,18 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test(x:Int) = if (x <= 7) + shift { k: (Int=>Int) => k(k(k(x))) } + else + shift { k: (Int=>Int) => k(x) } + + def main(args: Array[String]): Any = { + println(reset(1 + test(7))) + println(reset(1 + test(8))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/ifelse1.check b/test/continuations/run/ifelse1.check new file mode 100644 index 0000000000..86a3fbc0c1 --- /dev/null +++ b/test/continuations/run/ifelse1.check @@ -0,0 +1,4 @@ +10 +9 +8 +11
\ No newline at end of file diff --git a/test/continuations/run/ifelse1.scala b/test/continuations/run/ifelse1.scala new file mode 100644 index 0000000000..2ccc1ed730 --- /dev/null +++ b/test/continuations/run/ifelse1.scala @@ -0,0 +1,25 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test1(x:Int) = if (x <= 7) + shift { k: (Int=>Int) => k(k(k(x))) } + else + x + + def test2(x:Int) = if (x <= 7) + x + else + shift { k: (Int=>Int) => k(k(k(x))) } + + def main(args: Array[String]): Any = { + println(reset(1 + test1(7))) + println(reset(1 + test1(8))) + println(reset(1 + test2(7))) + println(reset(1 + test2(8))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/ifelse2.check b/test/continuations/run/ifelse2.check new file mode 100644 index 0000000000..f97a95b08d --- /dev/null +++ b/test/continuations/run/ifelse2.check @@ -0,0 +1,4 @@ +abort +() +alive +() diff --git a/test/continuations/run/ifelse2.scala b/test/continuations/run/ifelse2.scala new file mode 100644 index 0000000000..536e350190 --- /dev/null +++ b/test/continuations/run/ifelse2.scala @@ -0,0 +1,16 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test(x:Int) = if (x <= 7) + shift { k: (Unit=>Unit) => println("abort") } + + def main(args: Array[String]): Any = { + println(reset{ test(7); println("alive") }) + println(reset{ test(8); println("alive") }) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/ifelse3.check b/test/continuations/run/ifelse3.check new file mode 100644 index 0000000000..95b562c8e6 --- /dev/null +++ b/test/continuations/run/ifelse3.check @@ -0,0 +1,2 @@ +6 +9 diff --git a/test/continuations/run/ifelse3.scala b/test/continuations/run/ifelse3.scala new file mode 100644 index 0000000000..5dbd079d1c --- /dev/null +++ b/test/continuations/run/ifelse3.scala @@ -0,0 +1,21 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def util(x: Boolean) = shift { k: (Boolean=>Int) => k(x) } + + def test(x:Int) = if (util(x <= 7)) + x - 1 + else + x + 1 + + + def main(args: Array[String]): Any = { + println(reset(test(7))) + println(reset(test(8))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/infer1.scala b/test/continuations/run/infer1.scala new file mode 100644 index 0000000000..a6c6c07215 --- /dev/null +++ b/test/continuations/run/infer1.scala @@ -0,0 +1,33 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test(x: => Int @cpsParam[String,Int]) = 7 + + def test2() = { + val x = shift { k: (Int => String) => 9 } + x + } + + def test3(x: => Int @cpsParam[Int,Int]) = 7 + + + def util() = shift { k: (String => String) => "7" } + + def main(args: Array[String]): Any = { + test { shift { k: (Int => String) => 9 } } + test { shift { k: (Int => String) => 9 }; 2 } +// test { shift { k: (Int => String) => 9 }; util() } <-- doesn't work + test { shift { k: (Int => String) => 9 }; util(); 2 } + + + test { shift { k: (Int => String) => 9 }; { test3(0); 2 } } + + test3 { { test3(0); 2 } } + + } + +}
\ No newline at end of file diff --git a/test/continuations/run/match0.check b/test/continuations/run/match0.check new file mode 100644 index 0000000000..f8bc79860d --- /dev/null +++ b/test/continuations/run/match0.check @@ -0,0 +1,2 @@ +10 +9
\ No newline at end of file diff --git a/test/continuations/run/match0.scala b/test/continuations/run/match0.scala new file mode 100644 index 0000000000..bd36238d7f --- /dev/null +++ b/test/continuations/run/match0.scala @@ -0,0 +1,18 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test(x:Int) = x match { + case 7 => shift { k: (Int=>Int) => k(k(k(x))) } + case 8 => shift { k: (Int=>Int) => k(x) } + } + + def main(args: Array[String]): Any = { + println(reset(1 + test(7))) + println(reset(1 + test(8))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/match1.check b/test/continuations/run/match1.check new file mode 100644 index 0000000000..73053d3f4f --- /dev/null +++ b/test/continuations/run/match1.check @@ -0,0 +1,2 @@ +10 +9 diff --git a/test/continuations/run/match1.scala b/test/continuations/run/match1.scala new file mode 100644 index 0000000000..ea4e219666 --- /dev/null +++ b/test/continuations/run/match1.scala @@ -0,0 +1,18 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test(x:Int) = x match { + case 7 => shift { k: (Int=>Int) => k(k(k(x))) } + case _ => x + } + + def main(args: Array[String]): Any = { + println(reset(1 + test(7))) + println(reset(1 + test(8))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/match2.check b/test/continuations/run/match2.check new file mode 100644 index 0000000000..cbf91349cc --- /dev/null +++ b/test/continuations/run/match2.check @@ -0,0 +1,2 @@ +B +B diff --git a/test/continuations/run/match2.scala b/test/continuations/run/match2.scala new file mode 100644 index 0000000000..8d4f04870f --- /dev/null +++ b/test/continuations/run/match2.scala @@ -0,0 +1,26 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def test1() = { + val (a, b) = shift { k: (((String,String)) => String) => k("A","B") } + b + } + + case class Elem[T,U](a: T, b: U) + + def test2() = { + val Elem(a,b) = shift { k: (Elem[String,String] => String) => k(Elem("A","B")) } + b + } + + + def main(args: Array[String]): Any = { + println(reset(test1())) + println(reset(test2())) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/t1807.check b/test/continuations/run/t1807.check new file mode 100644 index 0000000000..56a6051ca2 --- /dev/null +++ b/test/continuations/run/t1807.check @@ -0,0 +1 @@ +1
\ No newline at end of file diff --git a/test/continuations/run/t1807.scala b/test/continuations/run/t1807.scala new file mode 100644 index 0000000000..278b3a9936 --- /dev/null +++ b/test/continuations/run/t1807.scala @@ -0,0 +1,14 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + def main(args: Array[String]): Unit = { + val z = reset { + val f: (() => Int @cps[Int]) = () => 1 + f() + } + println(z) + } +}
\ No newline at end of file diff --git a/test/continuations/run/t1808.scala b/test/continuations/run/t1808.scala new file mode 100644 index 0000000000..125c7c1cdf --- /dev/null +++ b/test/continuations/run/t1808.scala @@ -0,0 +1,10 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + def main(args: Array[String]): Unit = { + reset0 { 0 } + } +}
\ No newline at end of file diff --git a/test/continuations/run/t1820.scala b/test/continuations/run/t1820.scala new file mode 100644 index 0000000000..893ddab6d1 --- /dev/null +++ b/test/continuations/run/t1820.scala @@ -0,0 +1,14 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + def shifted: Unit @suspendable = shift { (k: Unit => Unit) => () } + def test1(b: => Boolean) = { + reset { + if (b) shifted + } + } + def main(args: Array[String]) = test1(true) +}
\ No newline at end of file diff --git a/test/continuations/run/t1821.check b/test/continuations/run/t1821.check new file mode 100644 index 0000000000..f7b76115db --- /dev/null +++ b/test/continuations/run/t1821.check @@ -0,0 +1,4 @@ +() +() +() +()
\ No newline at end of file diff --git a/test/continuations/run/t1821.scala b/test/continuations/run/t1821.scala new file mode 100644 index 0000000000..0d5fb553be --- /dev/null +++ b/test/continuations/run/t1821.scala @@ -0,0 +1,20 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + def suspended[A](x: A): A @suspendable = x + def test1[A](x: A): A @suspendable = suspended(x) match { case x => x } + def test2[A](x: List[A]): A @suspendable = suspended(x) match { case List(x) => x } + + def test3[A](x: A): A @suspendable = x match { case x => x } + def test4[A](x: List[A]): A @suspendable = x match { case List(x) => x } + + def main(args: Array[String]) = { + println(reset(test1())) + println(reset(test2(List(())))) + println(reset(test3())) + println(reset(test4(List(())))) + } +}
\ No newline at end of file diff --git a/test/continuations/run/t2864.check b/test/continuations/run/t2864.check new file mode 100644 index 0000000000..d411bb7c1a --- /dev/null +++ b/test/continuations/run/t2864.check @@ -0,0 +1 @@ +400 diff --git a/test/continuations/run/t2864.scala b/test/continuations/run/t2864.scala new file mode 100644 index 0000000000..7a2579e45c --- /dev/null +++ b/test/continuations/run/t2864.scala @@ -0,0 +1,30 @@ +import scala.util.continuations._ +object Test { + + def double[B](n : Int)(k : Int => B) : B = k(n * 2) + + def main(args : Array[String]) { + reset { + val result1 = shift(double[Unit](100)) + val result2 = shift(double[Unit](result1)) + println(result2) + } + } + + def foo: Int @cps[Int] = { + val a0 = shift((k:Int=>Int) => k(0)) + val x0 = 2 + val a1 = shift((k:Int=>Int) => x0) + 0 + } + +/* + def bar: ControlContext[Int,Int,Int] = { + shiftR((k:Int=>Int) => k(0)).flatMap { a0 => + val x0 = 2 + shiftR((k:Int=>Int) => x0).map { a1 => + 0 + }} + } +*/ +}
\ No newline at end of file diff --git a/test/continuations/run/t2934.check b/test/continuations/run/t2934.check new file mode 100644 index 0000000000..a92586538e --- /dev/null +++ b/test/continuations/run/t2934.check @@ -0,0 +1 @@ +List(3, 4, 5) diff --git a/test/continuations/run/t2934.scala b/test/continuations/run/t2934.scala new file mode 100644 index 0000000000..a1b8ca9e04 --- /dev/null +++ b/test/continuations/run/t2934.scala @@ -0,0 +1,10 @@ +import scala.util.continuations._ + +object Test { + def main(args : Array[String]) { + println(reset { + val x = shift(List(1,2,3).flatMap[Int, List[Int]]) + List(x + 2) + }) + } +} diff --git a/test/continuations/run/t3199.check b/test/continuations/run/t3199.check new file mode 100644 index 0000000000..a065247b8c --- /dev/null +++ b/test/continuations/run/t3199.check @@ -0,0 +1 @@ +Right(7) diff --git a/test/continuations/run/t3199.scala b/test/continuations/run/t3199.scala new file mode 100644 index 0000000000..3fd2f1959a --- /dev/null +++ b/test/continuations/run/t3199.scala @@ -0,0 +1,20 @@ +import _root_.scala.collection.Seq +import _root_.scala.util.control.Exception +import _root_.scala.util.continuations._ + +object Test { + + trait AbstractResource[+R <: AnyRef] { + def reflect[B] : R @cpsParam[B,Either[Throwable, B]] = shift(acquireFor) + def acquireFor[B](f : R => B) : Either[Throwable, B] = { + import Exception._ + catching(List(classOf[Throwable]) : _*) either (f(null.asInstanceOf[R])) + } + } + + def main(args: Array[String]) : Unit = { + val x = new AbstractResource[String] { } + val result = x.acquireFor( x => 7 ) + println(result) + } + } diff --git a/test/continuations/run/t3199b.check b/test/continuations/run/t3199b.check new file mode 100644 index 0000000000..b5d8bb58d9 --- /dev/null +++ b/test/continuations/run/t3199b.check @@ -0,0 +1 @@ +[1, 2, 3] diff --git a/test/continuations/run/t3199b.scala b/test/continuations/run/t3199b.scala new file mode 100644 index 0000000000..950c584153 --- /dev/null +++ b/test/continuations/run/t3199b.scala @@ -0,0 +1,11 @@ +object Test { + + def test() = { + java.util.Arrays.asList(Array(1,2,3):_*) + } + + def main(args: Array[String]) = { + println(test()) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/t3223.check b/test/continuations/run/t3223.check new file mode 100644 index 0000000000..ec635144f6 --- /dev/null +++ b/test/continuations/run/t3223.check @@ -0,0 +1 @@ +9 diff --git a/test/continuations/run/t3223.scala b/test/continuations/run/t3223.scala new file mode 100644 index 0000000000..4e510178e6 --- /dev/null +++ b/test/continuations/run/t3223.scala @@ -0,0 +1,19 @@ +import scala.util.continuations._ +object Test { + + def foo(x:Int) = { + try { + throw new Exception + shiftUnit0[Int,Int](7) + } catch { + case ex => + val g = (a:Int)=>a + 9 + } + } + + def main(args: Array[String]) { + println(reset(foo(0))) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/t3225.check b/test/continuations/run/t3225.check new file mode 100644 index 0000000000..df1a8a9ce4 --- /dev/null +++ b/test/continuations/run/t3225.check @@ -0,0 +1,12 @@ +8 +8 +9 +9 +8 +9 +8 +8 +9 +9 +8 +9 diff --git a/test/continuations/run/t3225.scala b/test/continuations/run/t3225.scala new file mode 100644 index 0000000000..ecfde279cf --- /dev/null +++ b/test/continuations/run/t3225.scala @@ -0,0 +1,56 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + class Bla { + val x = 8 + def y[T] = 9 + } + +/* + def bla[A] = shift { k:(Bla=>A) => k(new Bla) } +*/ + + def bla1 = shift { k:(Bla=>Bla) => k(new Bla) } + def bla2 = shift { k:(Bla=>Int) => k(new Bla) } + + def fooA = bla2.x + def fooB[T] = bla2.y[T] + + def testMono() = { + println(reset(bla1).x) + println(reset(bla2.x)) + println(reset(bla2.y[Int])) + println(reset(bla2.y)) + println(reset(fooA)) + println(reset(fooB)) + 0 + } + + def blaX[A] = shift { k:(Bla=>A) => k(new Bla) } + + def fooX[A] = blaX[A].x + def fooY[A] = blaX[A].y[A] + + def testPoly() = { + println(reset(blaX[Bla]).x) + println(reset(blaX[Int].x)) + println(reset(blaX[Int].y[Int])) + println(reset(blaX[Int].y)) + println(reset(fooX[Int])) + println(reset(fooY[Int])) + 0 + } + + + // TODO: check whether this also applies to a::shift { k => ... } + + def main(args: Array[String]) = { + testMono() + testPoly() + } + +} diff --git a/test/continuations/run/trycatch0.check b/test/continuations/run/trycatch0.check new file mode 100644 index 0000000000..36806909d0 --- /dev/null +++ b/test/continuations/run/trycatch0.check @@ -0,0 +1,2 @@ +10 +10
\ No newline at end of file diff --git a/test/continuations/run/trycatch0.scala b/test/continuations/run/trycatch0.scala new file mode 100644 index 0000000000..74a078b5ef --- /dev/null +++ b/test/continuations/run/trycatch0.scala @@ -0,0 +1,25 @@ +// $Id$ + +import scala.util.continuations._ + +object Test { + + def foo = try { + shift((k: Int=>Int) => k(7)) + } catch { + case ex => + 9 + } + + def bar = try { + 7 + } catch { + case ex => + shiftUnit0[Int,Int](9) + } + + def main(args: Array[String]): Unit = { + println(reset { foo + 3 }) + println(reset { bar + 3 }) + } +}
\ No newline at end of file diff --git a/test/continuations/run/trycatch1.check b/test/continuations/run/trycatch1.check new file mode 100644 index 0000000000..a028d2b1e1 --- /dev/null +++ b/test/continuations/run/trycatch1.check @@ -0,0 +1,4 @@ +12 +12 +12 +12
\ No newline at end of file diff --git a/test/continuations/run/trycatch1.scala b/test/continuations/run/trycatch1.scala new file mode 100644 index 0000000000..ade13794e3 --- /dev/null +++ b/test/continuations/run/trycatch1.scala @@ -0,0 +1,48 @@ +// $Id$ + +import scala.util.continuations._ + +object Test { + + def fatal: Int = throw new Exception() + + def foo1 = try { + fatal + shift((k: Int=>Int) => k(7)) + } catch { + case ex => + 9 + } + + def foo2 = try { + shift((k: Int=>Int) => k(7)) + fatal + } catch { + case ex => + 9 + } + + def bar1 = try { + fatal + 7 + } catch { + case ex => + shiftUnit0[Int,Int](9) // regular shift causes no-symbol doesn't have owner + } + + def bar2 = try { + 7 + fatal + } catch { + case ex => + shiftUnit0[Int,Int](9) // regular shift causes no-symbol doesn't have owner + } + + def main(args: Array[String]): Unit = { + println(reset { foo1 + 3 }) + println(reset { foo2 + 3 }) + println(reset { bar1 + 3 }) + println(reset { bar2 + 3 }) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/while0.check b/test/continuations/run/while0.check new file mode 100644 index 0000000000..d58c55a31d --- /dev/null +++ b/test/continuations/run/while0.check @@ -0,0 +1 @@ +9000 diff --git a/test/continuations/run/while0.scala b/test/continuations/run/while0.scala new file mode 100644 index 0000000000..9735f9d2c3 --- /dev/null +++ b/test/continuations/run/while0.scala @@ -0,0 +1,22 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def foo(): Int @cps[Unit] = 2 + + def test(): Unit @cps[Unit] = { + var x = 0 + while (x < 9000) { // pick number large enough to require tail-call opt + x += foo() + } + println(x) + } + + def main(args: Array[String]): Any = { + reset(test()) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/while1.check b/test/continuations/run/while1.check new file mode 100644 index 0000000000..3d5f0b9a46 --- /dev/null +++ b/test/continuations/run/while1.check @@ -0,0 +1,11 @@ +up +up +up +up +up +10 +down +down +down +down +down diff --git a/test/continuations/run/while1.scala b/test/continuations/run/while1.scala new file mode 100644 index 0000000000..fb5dc0079a --- /dev/null +++ b/test/continuations/run/while1.scala @@ -0,0 +1,22 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def foo(): Int @cps[Unit] = shift { k => println("up"); k(2); println("down") } + + def test(): Unit @cps[Unit] = { + var x = 0 + while (x < 9) { + x += foo() + } + println(x) + } + + def main(args: Array[String]): Any = { + reset(test()) + } + +}
\ No newline at end of file diff --git a/test/continuations/run/while2.check b/test/continuations/run/while2.check new file mode 100644 index 0000000000..9fe515181b --- /dev/null +++ b/test/continuations/run/while2.check @@ -0,0 +1,19 @@ +up +up +up +up +up +up +up +up +up +9000 +down +down +down +down +down +down +down +down +down diff --git a/test/continuations/run/while2.scala b/test/continuations/run/while2.scala new file mode 100644 index 0000000000..f36288929e --- /dev/null +++ b/test/continuations/run/while2.scala @@ -0,0 +1,23 @@ +// $Id$ + +import scala.util.continuations._ + + +object Test { + + def foo1(): Int @cps[Unit] = 2 + def foo2(): Int @cps[Unit] = shift { k => println("up"); k(2); println("down") } + + def test(): Unit @cps[Unit] = { + var x = 0 + while (x < 9000) { // pick number large enough to require tail-call opt + x += (if (x % 1000 != 0) foo1() else foo2()) + } + println(x) + } + + def main(args: Array[String]): Any = { + reset(test()) + } + +}
\ No newline at end of file |