diff options
Diffstat (limited to 'test')
50 files changed, 660 insertions, 11 deletions
diff --git a/test/files/run/spec-matrix.check b/test/disabled/run/spec-matrix.check index 72e8ffc0db..72e8ffc0db 100644 --- a/test/files/run/spec-matrix.check +++ b/test/disabled/run/spec-matrix.check diff --git a/test/files/run/spec-matrix.scala b/test/disabled/run/spec-matrix.scala index 81e3eaf212..81e3eaf212 100644 --- a/test/files/run/spec-matrix.scala +++ b/test/disabled/run/spec-matrix.scala diff --git a/test/files/jvm/actor-exceptions.scala b/test/files/jvm/actor-exceptions.scala index 77bf05c048..384226d777 100644 --- a/test/files/jvm/actor-exceptions.scala +++ b/test/files/jvm/actor-exceptions.scala @@ -13,12 +13,17 @@ case class MyOtherException(text: String) extends Exception { object Master extends Actor { trapExit = true def act() { + try { link(Slave) Slave.start() for (i <- 0 until 10) Slave ! A react { case Exit(from, reason) => } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -28,6 +33,7 @@ object Slave extends Actor { case MyException(text) => } def act() { + try { var cnt = 0 loop { react { @@ -39,6 +45,10 @@ object Slave extends Actor { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-executor.scala b/test/files/jvm/actor-executor.scala index 435c666fff..b1f9caebdd 100644 --- a/test/files/jvm/actor-executor.scala +++ b/test/files/jvm/actor-executor.scala @@ -9,6 +9,7 @@ trait AdaptedActor extends Actor { object One extends AdaptedActor { def act() { + try { Two.start() var i = 0 loopWhile (i < 10000) { @@ -22,11 +23,16 @@ object One extends AdaptedActor { Test.executor.shutdown() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Two extends AdaptedActor { def act() { + try { var i = 0 loopWhile (i < 10000) { i += 1 @@ -37,6 +43,10 @@ object Two extends AdaptedActor { One ! 'MsgForOne } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-executor2.scala b/test/files/jvm/actor-executor2.scala index 9e99e167aa..da64a7fc43 100644 --- a/test/files/jvm/actor-executor2.scala +++ b/test/files/jvm/actor-executor2.scala @@ -4,6 +4,7 @@ import java.util.concurrent.Executors object One extends AdaptedActor { def act() { + try { Two.start() var i = 0 loopWhile (i < Test.NUM_MSG) { @@ -15,11 +16,16 @@ object One extends AdaptedActor { println("One: OK") } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Two extends AdaptedActor { def act() { + try { var i = 0 loopWhile (i < Test.NUM_MSG) { i += 1 @@ -30,6 +36,10 @@ object Two extends AdaptedActor { One ! 'MsgForOne } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -54,6 +64,7 @@ object Test { } def main(args: Array[String]) { + try { self.trapExit = true link(One) One.start() @@ -63,5 +74,9 @@ object Test { println("One exited") Test.executor.shutdown() } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-executor3.scala b/test/files/jvm/actor-executor3.scala index bf060b8ac5..4fde2c6c5f 100644 --- a/test/files/jvm/actor-executor3.scala +++ b/test/files/jvm/actor-executor3.scala @@ -4,6 +4,7 @@ import java.util.concurrent.Executors object One extends AdaptedActor { def act() { + try { Two.start() var i = 0 loopWhile (i < Test.NUM_MSG) { @@ -15,11 +16,16 @@ object One extends AdaptedActor { println("One: OK") } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Two extends AdaptedActor { def act() { + try { var i = 0 loopWhile (i < Test.NUM_MSG) { i += 1 @@ -30,6 +36,10 @@ object Two extends AdaptedActor { One ! 'MsgForOne } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-link-getstate.scala b/test/files/jvm/actor-link-getstate.scala index ec01757883..c4c33ef752 100644 --- a/test/files/jvm/actor-link-getstate.scala +++ b/test/files/jvm/actor-link-getstate.scala @@ -7,6 +7,7 @@ case class MyException(text: String) extends Exception(text) { object Slave extends Actor { def act() { + try { loop { react { case 'doWork => @@ -14,18 +15,27 @@ object Slave extends Actor { reply('done) } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Master extends Actor { override def toString = "Master" def act() { + try { link(Slave) Slave ! 'doWork react { case 'done => throw new MyException("Master crashed") } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -33,6 +43,7 @@ object Test { def main(args: Array[String]) { actor { + try { self.trapExit = true link(Slave) Slave.start() @@ -41,6 +52,10 @@ object Test { case Exit(from, reason) if (from == Slave) => Console.err.println(Slave.getState) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-looping.scala b/test/files/jvm/actor-looping.scala index 9599adbb2c..475d4754ce 100644 --- a/test/files/jvm/actor-looping.scala +++ b/test/files/jvm/actor-looping.scala @@ -6,6 +6,7 @@ object Test { def main(args: Array[String]) { val a = actor { + try { var cnt = 0 loop { react { @@ -20,6 +21,10 @@ object Test { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } for (i <- 0 until 10) a ! A diff --git a/test/files/jvm/actor-normal-exit.scala b/test/files/jvm/actor-normal-exit.scala index 40dc7b7da4..20863d5bb0 100644 --- a/test/files/jvm/actor-normal-exit.scala +++ b/test/files/jvm/actor-normal-exit.scala @@ -5,18 +5,28 @@ object Test { object Master extends Actor { trapExit = true def act() { + try { Slave.start() react { case Exit(from, reason) => println("slave exited for reason " + reason) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Slave extends Actor { def act() { + try { link(Master) println("Done") + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-termination.scala b/test/files/jvm/actor-termination.scala index 19dfaf8e17..d8e44a2797 100644 --- a/test/files/jvm/actor-termination.scala +++ b/test/files/jvm/actor-termination.scala @@ -5,9 +5,14 @@ import scala.actors.Actor object Test { def main(args: Array[String]) { Actor.actor { + try { println("I'm going to make you wait.") Thread.sleep(5000) println("Ok, I'm done.") + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } } diff --git a/test/files/jvm/actor-uncaught-exception.scala b/test/files/jvm/actor-uncaught-exception.scala index 9f64be26e1..9dbd36dd82 100644 --- a/test/files/jvm/actor-uncaught-exception.scala +++ b/test/files/jvm/actor-uncaught-exception.scala @@ -8,20 +8,32 @@ object Test { case object StartError extends Actor { def act() { + try { throw new MyException("I don't want to run!") + } catch { + case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] && + !e.isInstanceOf[MyException]) => + e.printStackTrace() + } } } case object MessageError extends Actor { def act() { + try { react { case _ => throw new MyException("No message for me!") } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } case object Supervisor extends Actor { def act() { + try { trapExit = true link(StartError) link(MessageError) @@ -37,6 +49,10 @@ object Test { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/actor-uncaught-exception2.scala b/test/files/jvm/actor-uncaught-exception2.scala index 973cfb370a..626ce5da92 100644 --- a/test/files/jvm/actor-uncaught-exception2.scala +++ b/test/files/jvm/actor-uncaught-exception2.scala @@ -8,20 +8,32 @@ object Test { case object StartError extends Actor { def act() { + try { throw new MyException("I don't want to run!") + } catch { + case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] && + !e.isInstanceOf[MyException]) => + e.printStackTrace() + } } } case object MessageError extends Actor { def act() { + try { react { case _ => throw new MyException("No message for me!") } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } case object Supervisor extends Actor { def act() { + try { trapExit = true link(StartError) link(MessageError) @@ -38,6 +50,10 @@ object Test { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/daemon-actor-termination.scala b/test/files/jvm/daemon-actor-termination.scala index 8e64749b1c..6ddfc3139d 100644 --- a/test/files/jvm/daemon-actor-termination.scala +++ b/test/files/jvm/daemon-actor-termination.scala @@ -5,6 +5,7 @@ object Test { class MyDaemon extends DaemonActor { def act() { + try { react { case 'hello => println("MSG1") @@ -14,6 +15,10 @@ object Test { println("done") } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -21,8 +26,13 @@ object Test { val daemon = new MyDaemon daemon.start() Actor.actor { + try { daemon !? 'hello println("MSG2") + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } } diff --git a/test/files/jvm/future-alarm.scala b/test/files/jvm/future-alarm.scala index 0dda492741..8ee902b5ea 100644 --- a/test/files/jvm/future-alarm.scala +++ b/test/files/jvm/future-alarm.scala @@ -2,6 +2,7 @@ import scala.actors.Futures object Test { def main(args: Array[String]) { + try { for (i <- 1 to 100000) { Futures.alarm(0) if (i % 10000 == 0) @@ -12,5 +13,9 @@ object Test { ft() println("OK") } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/future-awaitall-zero.scala b/test/files/jvm/future-awaitall-zero.scala index 125670d049..cd6ba172cc 100644 --- a/test/files/jvm/future-awaitall-zero.scala +++ b/test/files/jvm/future-awaitall-zero.scala @@ -3,6 +3,7 @@ import scala.actors.Actor._ object Test { def main(args: Array[String]) { + try { val ft1 = future { reactWithin(10000) { case _ => println("FAIL") } } @@ -13,5 +14,9 @@ object Test { val res = awaitAll(0, ft1, ft2) println("OK") + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/future-termination.scala b/test/files/jvm/future-termination.scala index c448a88aa7..688de60c3b 100644 --- a/test/files/jvm/future-termination.scala +++ b/test/files/jvm/future-termination.scala @@ -4,11 +4,16 @@ import scala.actors.Futures object Test { def main(args: Array[String]) { + try { val meaningOfLife = Futures.future { Thread.sleep(5000) // pretend this is a harder problem than it is println("I have the answer!") 42 } println("I can't wait that long, bye.") + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/reactor-exceptionOnSend.scala b/test/files/jvm/reactor-exceptionOnSend.scala index c89aab334b..3d9a042131 100644 --- a/test/files/jvm/reactor-exceptionOnSend.scala +++ b/test/files/jvm/reactor-exceptionOnSend.scala @@ -19,6 +19,7 @@ object A extends Reactor[Any] { var state = 0 def act() { + try { loop { react { case 'hello if guard() => @@ -26,14 +27,24 @@ object A extends Reactor[Any] { exit() } } + } catch { + case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] && + !e.isInstanceOf[MyException]) => + e.printStackTrace() + } } } object B extends Reactor[Any] { def act() { + try { A.start() A ! 'hello A ! 'hello + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/reactor-producer-consumer.scala b/test/files/jvm/reactor-producer-consumer.scala index 0d33043fc6..8a6b17c3ad 100644 --- a/test/files/jvm/reactor-producer-consumer.scala +++ b/test/files/jvm/reactor-producer-consumer.scala @@ -7,6 +7,7 @@ object Test { class UnboundedBuffer extends Reactor[Any] { def act() { + try { react { case Stop() => case Get(from) => @@ -17,11 +18,16 @@ object Test { act() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } class Producer(buf: UnboundedBuffer, n: Int, delay: Long, parent: Reactor[Any]) extends Reactor[Any] { def act() { + try { var i = 0 while (i < n) { i += 1 @@ -29,6 +35,10 @@ object Test { buf ! Put(42) } parent ! Stop() + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -36,6 +46,7 @@ object Test { val step = n / 10 var i = 0 def act() { + try { if (i < n) { i += 1 if (delay > 0) Thread.sleep(delay) @@ -49,12 +60,17 @@ object Test { } else { parent ! Stop() } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } def main(args: Array[String]) { val parent = new Reactor[Any] { def act() { + try { val buffer = new UnboundedBuffer buffer.start() val producer = new Producer(buffer, 10000, 0, this) @@ -68,6 +84,10 @@ object Test { buffer ! Stop() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } parent.start() diff --git a/test/files/jvm/reactor.scala b/test/files/jvm/reactor.scala index 12d5c7c221..dbc9a6bdda 100644 --- a/test/files/jvm/reactor.scala +++ b/test/files/jvm/reactor.scala @@ -21,6 +21,7 @@ object Test { class PingActor(count: Int, pong: Reactor[Any]) extends Reactor[Any] { def act() { + try { var pingsLeft = count - 1 pong ! Ping(this) loop { @@ -38,11 +39,16 @@ class PingActor(count: Int, pong: Reactor[Any]) extends Reactor[Any] { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } class PongActor extends Reactor[Any] { def act() { + try { var pongCount = 0 loop { react { @@ -56,5 +62,9 @@ class PongActor extends Reactor[Any] { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/replyablereactor.scala b/test/files/jvm/replyablereactor.scala index 896a0bf440..e1fabc98da 100644 --- a/test/files/jvm/replyablereactor.scala +++ b/test/files/jvm/replyablereactor.scala @@ -2,6 +2,7 @@ import scala.actors.ReplyReactor class MyActor extends ReplyReactor { def act() { + try { loop { react { case 'hello => @@ -10,6 +11,10 @@ class MyActor extends ReplyReactor { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -20,6 +25,7 @@ object Test { val b = new ReplyReactor { def act() { + try { react { case r: MyActor => var i = 0 @@ -37,6 +43,10 @@ object Test { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/replyablereactor2.scala b/test/files/jvm/replyablereactor2.scala index 57b7cfe201..da9e0e269e 100644 --- a/test/files/jvm/replyablereactor2.scala +++ b/test/files/jvm/replyablereactor2.scala @@ -3,6 +3,7 @@ import scala.actors.Actor._ class MyActor extends ReplyReactor { def act() { + try { loop { react { case 'hello => @@ -11,6 +12,10 @@ class MyActor extends ReplyReactor { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -21,6 +26,7 @@ object Test { val b = new Reactor[Any] { def act() { + try { react { case r: MyActor => var i = 0 @@ -36,6 +42,10 @@ object Test { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/replyablereactor3.scala b/test/files/jvm/replyablereactor3.scala index b33db811e2..2c26b8a176 100644 --- a/test/files/jvm/replyablereactor3.scala +++ b/test/files/jvm/replyablereactor3.scala @@ -3,6 +3,7 @@ import scala.actors.Actor._ class MyActor extends ReplyReactor { def act() { + try { loop { react { case 'hello => @@ -11,6 +12,10 @@ class MyActor extends ReplyReactor { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -21,6 +26,7 @@ object Test { val b = new Reactor[Any] { def act() { + try { react { case r: MyActor => var i = 0 @@ -35,6 +41,10 @@ object Test { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/replyablereactor4.scala b/test/files/jvm/replyablereactor4.scala index dc24f5e88d..7679a5adf8 100644 --- a/test/files/jvm/replyablereactor4.scala +++ b/test/files/jvm/replyablereactor4.scala @@ -3,6 +3,7 @@ import scala.actors.Actor._ class MyActor extends ReplyReactor { def act() { + try { loop { react { case 'hello => @@ -11,6 +12,10 @@ class MyActor extends ReplyReactor { exit() } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } @@ -21,6 +26,7 @@ object Test { val b = new Reactor[Any] { def act() { + try { react { case r: MyActor => var i = 0 @@ -35,6 +41,10 @@ object Test { } } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/replyreactor-react-sender.scala b/test/files/jvm/replyreactor-react-sender.scala index 1127dfd0a5..c9884295f6 100644 --- a/test/files/jvm/replyreactor-react-sender.scala +++ b/test/files/jvm/replyreactor-react-sender.scala @@ -10,6 +10,7 @@ object Test { val a = new ReplyReactor { def act() { + try { var i = 0 loopWhile (i < NUM) { i += 1 @@ -20,12 +21,17 @@ object Test { } andThen { b ! 'ok } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } a.start() b = new ReplyReactor { def act() { + try { for (_ <- 0 until NUM) a ! 'hello react { @@ -33,6 +39,10 @@ object Test { case 'ok => println("OK") case other => println(other) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/replyreactor.scala b/test/files/jvm/replyreactor.scala index fb915cf3f9..0cecf29ec7 100644 --- a/test/files/jvm/replyreactor.scala +++ b/test/files/jvm/replyreactor.scala @@ -4,16 +4,22 @@ object Test { def main(args: Array[String]) { val a = new ReplyReactor { def act() { + try { react { case 'hello => sender ! 'hello } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } a.start() val b = new ReplyReactor { def act() { + try { react { case r: ReplyReactor => r ! 'hello @@ -22,6 +28,10 @@ object Test { println(any) } } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } b.start() diff --git a/test/files/jvm/scheduler-adapter.scala b/test/files/jvm/scheduler-adapter.scala index 79c901f91e..d6a8a446a0 100644 --- a/test/files/jvm/scheduler-adapter.scala +++ b/test/files/jvm/scheduler-adapter.scala @@ -7,22 +7,32 @@ trait AdaptedActor extends Actor { object One extends AdaptedActor { def act() { + try { Two.start() Two ! 'MsgForTwo react { case 'MsgForOne => println("One: received msg") } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } object Two extends AdaptedActor { def act() { + try { react { case 'MsgForTwo => println("Two: received msg") One ! 'MsgForOne } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/t1449.scala b/test/files/jvm/t1449.scala index 08c153afc0..3822cf7dd5 100644 --- a/test/files/jvm/t1449.scala +++ b/test/files/jvm/t1449.scala @@ -4,12 +4,22 @@ import scala.actors.Futures._ object Test { def main(args: Array[String]) { val a = actor { + try { react { case ft: Future[a] => println(ft()) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } + try { val ft = future { 42 } a ! ft + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/t1600.scala b/test/files/jvm/t1600.scala index 1cdcee8547..79391b7e76 100644 --- a/test/files/jvm/t1600.scala +++ b/test/files/jvm/t1600.scala @@ -12,11 +12,11 @@ object Test { def elements = entries.map(_._1) val maps = Seq[Map[Foo, Int]](new mutable.HashMap, new mutable.LinkedHashMap, - new immutable.HashMap).map(_ ++ entries) + immutable.HashMap.empty).map(_ ++ entries) test[Map[Foo, Int]](maps, entries.size, assertMap _) val sets = Seq[Set[Foo]](new mutable.HashSet, new mutable.LinkedHashSet, - new immutable.HashSet).map(_ ++ elements) + immutable.HashSet.empty).map(_ ++ elements) test[Set[Foo]](sets, entries.size, assertSet _) } } @@ -31,7 +31,7 @@ object Test { assertFunction(deserializedCollection, expectedSize) assert(deserializedCollection.getClass == collection.getClass, - "collection class should remain the same after deserialization") + "collection class should remain the same after deserialization ("+deserializedCollection.getClass+" != "+collection.getClass+")") Foo.hashCodeModifier = 0 } } diff --git a/test/files/jvm/t1948.scala b/test/files/jvm/t1948.scala index fc1fedac1f..084c956398 100644 --- a/test/files/jvm/t1948.scala +++ b/test/files/jvm/t1948.scala @@ -4,9 +4,21 @@ import scala.actors.Actor._ object Test { def main (args: Array[String]) { - val actors = (1 to 1000).toList map { x => actor { loop { react { - case x: Array[Int] => reply ("OK"); exit }}}} + val actors = (1 to 1000).toList map { x => actor { + try { + loop { react { + case x: Array[Int] => reply ("OK"); exit }} + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } + } } + try { actors foreach { x => x !? new Array[Int] (1000000) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } diff --git a/test/files/jvm/t2359.scala b/test/files/jvm/t2359.scala index 1b4d5e0a27..69c69d7b3b 100644 --- a/test/files/jvm/t2359.scala +++ b/test/files/jvm/t2359.scala @@ -3,19 +3,44 @@ import scala.actors.Futures._ object Test { def main(args: Array[String]) { val x = future { + try { System.out.println(1) future { + try { System.out.println(2) future { + try { System.out.println(3) future { + try { System.out.println(4) future { + try { System.out.println(5) + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } }() + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } }() + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } }() + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } }() + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } }() } } diff --git a/test/files/jvm/t2530.scala b/test/files/jvm/t2530.scala index 642fb05a5d..c2925a92d1 100644 --- a/test/files/jvm/t2530.scala +++ b/test/files/jvm/t2530.scala @@ -50,6 +50,7 @@ case class Matrix(numRows: Int, numCols: Int, values: Array[Double]) { val rows = for (j <- 0 until m) yield { Futures.future { + try { val b_j = new Array[Double](n) var k = 0 while (k < n) { // sadly, while loops are still faster than for loops @@ -69,13 +70,22 @@ case class Matrix(numRows: Int, numCols: Int, values: Array[Double]) { } //printf("future %d of %d completed.%n", j, m) j + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } // rows.foreach { x=> x() } // This appears to force sequential execution, so use: // timeout is 10 years; see http://lampsvn.epfl.ch/trac/scala/ticket/2515 - - val done = Futures.awaitAll(10*365*24*60*60*1000, rows.toArray : _*) // list to array, as varargs. + val done: List[Option[Any]] = try { + Futures.awaitAll(10*365*24*60*60*1000, rows.toArray : _*) // list to array, as varargs. + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + List() + } if (done.contains(None)) None diff --git a/test/files/jvm/t3102.scala b/test/files/jvm/t3102.scala index ea3e720eca..fbcf2e60e6 100644 --- a/test/files/jvm/t3102.scala +++ b/test/files/jvm/t3102.scala @@ -4,13 +4,19 @@ import Actor._ object Test { def main(args: Array[String]) { val a = actor { + try { react { case 'hello => reply(42) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } val b = actor { + try { self.trapExit = true val ft = a !! 'hello println(ft()) @@ -21,6 +27,10 @@ object Test { case any => println(any) } + } catch { + case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] => + e.printStackTrace() + } } } } diff --git a/test/disabled/run/Course-2002-10-msil.check b/test/files/run/Course-2002-10-msil.check index bbd9414370..bbd9414370 100644 --- a/test/disabled/run/Course-2002-10-msil.check +++ b/test/files/run/Course-2002-10-msil.check diff --git a/test/disabled/run/Course-2002-10.check b/test/files/run/Course-2002-10.check index 207b671f05..207b671f05 100644 --- a/test/disabled/run/Course-2002-10.check +++ b/test/files/run/Course-2002-10.check diff --git a/test/disabled/run/Course-2002-10.scala b/test/files/run/Course-2002-10.scala index e978bc8258..e978bc8258 100644 --- a/test/disabled/run/Course-2002-10.scala +++ b/test/files/run/Course-2002-10.scala diff --git a/test/disabled/run/Course-2002-13.check b/test/files/run/Course-2002-13.check index 7664f70576..7664f70576 100644 --- a/test/disabled/run/Course-2002-13.check +++ b/test/files/run/Course-2002-13.check diff --git a/test/disabled/run/Course-2002-13.scala b/test/files/run/Course-2002-13.scala index c016d41a90..c016d41a90 100644 --- a/test/disabled/run/Course-2002-13.scala +++ b/test/files/run/Course-2002-13.scala diff --git a/test/files/run/json.scala b/test/files/run/json.scala.disabled index ec0bad7ebe..2e7ee4aa4d 100644 --- a/test/files/run/json.scala +++ b/test/files/run/json.scala.disabled @@ -8,7 +8,7 @@ object Test extends Application { printJSON("{\"name\": \"va1ue\"}") // ticket #136 printJSON("{\"name\": { \"name1\": \"va1ue1\", \"name2\": \"va1ue2\" } }") printJSON("{\"name\": \"\\u0022\"}") - printJSON("{\"age\": 0}") + printJSON("{\"age\": 0}") println // from http://en.wikipedia.org/wiki/JSON @@ -63,7 +63,7 @@ object Test extends Application { // from http://json.org/example.html val sample3 = """ {"web-app": { - "servlet": [ + "servlet": [ { "servlet-name": "cofaxCDS", "servlet-class": "org.cofax.cds.CDSServlet", @@ -119,7 +119,7 @@ object Test extends Application { { "servlet-name": "cofaxAdmin", "servlet-class": "org.cofax.cds.AdminServlet"}, - + { "servlet-name": "fileServlet", "servlet-class": "org.cofax.cds.FileServlet"}, @@ -146,7 +146,7 @@ object Test extends Application { "cofaxAdmin": "/admin/*", "fileServlet": "/static/*", "cofaxTools": "/tools/*"}, - + "taglib": { "taglib-uri": "cofax.tld", "taglib-location": "/WEB-INF/tlds/cofax.tld"} diff --git a/test/files/run/numbereq.scala b/test/files/run/numbereq.scala new file mode 100644 index 0000000000..52f32cc52a --- /dev/null +++ b/test/files/run/numbereq.scala @@ -0,0 +1,41 @@ +object Test { + def mkNumbers(x: Int): List[AnyRef] = { + val base = List( + BigDecimal(x), + BigInt(x), + new java.lang.Double(x.toDouble), + new java.lang.Float(x.toFloat), + new java.lang.Long(x.toLong), + new java.lang.Integer(x) + ) + val extras = List( + if (x >= Short.MinValue && x <= Short.MaxValue) List(new java.lang.Short(x.toShort)) else Nil, + if (x >= Byte.MinValue && x <= Byte.MaxValue) List(new java.lang.Byte(x.toByte)) else Nil, + if (x >= Char.MinValue && x <= Char.MaxValue) List(new java.lang.Character(x.toChar)) else Nil + ).flatten + + base ::: extras + } + + + def main(args: Array[String]): Unit = { + val ints = (0 to 15).toList map (Short.MinValue >> _) + val ints2 = ints map (x => -x) + val ints3 = ints map (_ + 1) + val ints4 = ints2 map (_ - 1) + + val setneg1 = ints map mkNumbers + val setneg2 = ints3 map mkNumbers + val setpos1 = ints2 map mkNumbers + val setpos2 = ints4 map mkNumbers + val zero = mkNumbers(0) + + val sets = setneg1 ++ setneg2 ++ List(zero) ++ setpos1 ++ setpos2 + + for (set <- sets ; x <- set ; y <- set) { + println("'%s' == '%s' (%s == %s) (%s == %s)".format(x, y, x.hashCode, y.hashCode, x.##, y.##)) + assert(x == y, "%s/%s != %s/%s".format(x, x.getClass, y, y.getClass)) + assert(x.## == y.##, "%s != %s".format(x.getClass, y.getClass)) + } + } +}
\ No newline at end of file diff --git a/test/disabled/run/streamWithFilter.check b/test/files/run/streamWithFilter.check index 6b0e91a147..6b0e91a147 100644 --- a/test/disabled/run/streamWithFilter.check +++ b/test/files/run/streamWithFilter.check diff --git a/test/disabled/run/streamWithFilter.scala b/test/files/run/streamWithFilter.scala index cb919d4f55..cb919d4f55 100644 --- a/test/disabled/run/streamWithFilter.scala +++ b/test/files/run/streamWithFilter.scala diff --git a/test/files/run/t3241.check b/test/files/run/t3241.check new file mode 100644 index 0000000000..348ebd9491 --- /dev/null +++ b/test/files/run/t3241.check @@ -0,0 +1 @@ +done
\ No newline at end of file diff --git a/test/files/run/t3241.scala b/test/files/run/t3241.scala new file mode 100644 index 0000000000..40097a046f --- /dev/null +++ b/test/files/run/t3241.scala @@ -0,0 +1,23 @@ +object Test { + + def main(args : Array[String]) : Unit = { + recurse(Map(1->1, 2->2, 3->3, 4->4, 5->5, 6->6, 7->7)) + recurse(Set(1,2,3,4,5,6,7)) + println("done") + } + + def recurse(map: collection.immutable.Map[Int, Int]): Unit = { + if (!map.isEmpty) { + val x = map.keys.head + recurse(map - x) + } + } + + def recurse(set: collection.immutable.Set[Int]): Unit = { + if (!set.isEmpty) { + val x = set.toStream.head + recurse(set - x) + } + } + +} diff --git a/test/files/scalacheck/redblack.scala b/test/files/scalacheck/redblack.scala new file mode 100644 index 0000000000..0334c1218d --- /dev/null +++ b/test/files/scalacheck/redblack.scala @@ -0,0 +1,157 @@ +import org.scalacheck._ +import Prop._ +import Gen._ + +/* +Properties of a Red & Black Tree: + +A node is either red or black. +The root is black. (This rule is used in some definitions and not others. Since the +root can always be changed from red to black but not necessarily vice-versa this +rule has little effect on analysis.) +All leaves are black. +Both children of every red node are black. +Every simple path from a given node to any of its descendant leaves contains the same number of black nodes. +*/ + +abstract class RedBlackTest extends Properties("RedBlack") { + object RedBlackTest extends scala.collection.immutable.RedBlack[Int] { + def isSmaller(x: Int, y: Int) = x < y + } + + import RedBlackTest._ + + def rootIsBlack[A](t: Tree[A]) = t.isBlack + + def areAllLeavesBlack[A](t: Tree[A]): Boolean = t match { + case Empty => t.isBlack + case ne: NonEmpty[_] => List(ne.left, ne.right) forall areAllLeavesBlack + } + + def areRedNodeChildrenBlack[A](t: Tree[A]): Boolean = t match { + case RedTree(_, _, left, right) => List(left, right) forall (t => t.isBlack && areRedNodeChildrenBlack(t)) + case BlackTree(_, _, left, right) => List(left, right) forall areRedNodeChildrenBlack + case Empty => true + } + + def blackNodesToLeaves[A](t: Tree[A]): List[Int] = t match { + case Empty => List(1) + case BlackTree(_, _, left, right) => List(left, right) flatMap blackNodesToLeaves map (_ + 1) + case RedTree(_, _, left, right) => List(left, right) flatMap blackNodesToLeaves + } + + def areBlackNodesToLeavesEqual[A](t: Tree[A]): Boolean = t match { + case Empty => true + case ne: NonEmpty[_] => + ( + blackNodesToLeaves(ne).removeDuplicates.size == 1 + && areBlackNodesToLeavesEqual(ne.left) + && areBlackNodesToLeavesEqual(ne.right) + ) + } + + def orderIsPreserved[A](t: Tree[A]): Boolean = t match { + case Empty => true + case ne: NonEmpty[_] => + ( + (ne.left.iterator map (_._1) forall (isSmaller(_, ne.key))) + && (ne.right.iterator map (_._1) forall (isSmaller(ne.key, _))) + && (List(ne.left, ne.right) forall orderIsPreserved) + ) + } + + def setup(l: List[Int], invariant: Tree[Unit] => Boolean): (Boolean, Tree[Unit]) + + def listNoRepetitions(size: Int) = for { + s <- Gen.choose(1, size) + l <- Gen.listOfN(size, Gen.choose(0, Int.MaxValue)) suchThat (l => l.size == l.removeDuplicates.size) + } yield l + def listFewRepetitions(size: Int) = for { + s <- Gen.choose(1, size) + l <- Gen.listOfN(s, Gen.choose(0, size * 4)) suchThat (l => l.size != l.removeDuplicates.size) + } yield l + def listManyRepetitions(size: Int) = for { + s <- Gen.choose(1, size) + l <- Gen.listOfN(s, Gen.choose(0, size)) suchThat (l => l.size != l.removeDuplicates.size) + } yield l + def listEvenRepetitions(size: Int) = listFewRepetitions(size) map (x => + scala.util.Random.shuffle(x zip x flatMap { case (a, b) => List(a, b) }) + ) + + // Arbitrarily weighted list distribution types + val seqType: Gen[Int => Gen[List[Int]]] + + def myGen(sized: Int) = for { + size <- Gen.choose(0, sized) + seq <- seqType + list <- seq(size) + } yield list + + property("root is black") = forAll(myGen(10)) { l => + setup(l, rootIsBlack)._1 :| setup(l, rootIsBlack)._2.toString + } + property("all leaves are black") = forAll(myGen(50)) { l => + setup(l, areAllLeavesBlack)._1 :| setup(l, areAllLeavesBlack)._2.toString + } + property("children of red nodes are black") = forAll(myGen(50)) { l => + setup(l, areRedNodeChildrenBlack)._1 :| setup(l, areRedNodeChildrenBlack)._2.toString + } + property("Every path from a node to its descendant leaves contains the same number of black nodes") = forAll(myGen(50)) { l => + setup(l, areBlackNodesToLeavesEqual)._1 :| setup(l, areBlackNodesToLeavesEqual)._2.toString + } + property("Ordering of keys is preserved") = forAll(myGen(50)) { l => + setup(l, orderIsPreserved)._1 :| setup(l, orderIsPreserved)._2.toString + } +} + +object TestInsertion extends RedBlackTest { + import RedBlackTest._ + override val seqType = Gen.frequency( + (1, listNoRepetitions _), + (1, listManyRepetitions _) + ) + + property("update adds elements") = forAll(myGen(50)) { l => + val tree = l.foldLeft(Empty: Tree[Unit])((acc, n) => acc update (n, ())) + forAll(Gen.pick(1, l)) ( n => !(tree lookup n.head isEmpty) :| "Tree: "+tree+" N: "+n.head ) + } + + override def setup(l: List[Int], invariant: Tree[Unit] => Boolean) = l.foldLeft((true, Empty: Tree[Unit])) { + case ((true, acc), n) => + val newRoot = acc update (n, ()) + (invariant(newRoot), newRoot) + case (failed, _) => failed + } +} + +object TestDeletion extends RedBlackTest { + import RedBlackTest._ + override val seqType = Gen.frequency( + (2, listFewRepetitions _), + (3, listManyRepetitions _), + (1, listEvenRepetitions _) + ) + + property("delete removes elements") = forAll(myGen(50)) { l => + val tree = l.foldLeft(Empty: Tree[Unit])((acc, n) => acc update (n, ())) + forAll(Gen.choose(1, l.size)) { numberOfElementsToRemove => + forAll(Gen.pick(numberOfElementsToRemove, l)) { elementsToRemove => + val newTree = elementsToRemove.foldLeft(tree)((acc, n) => acc delete n) + (elementsToRemove forall (n => newTree lookup n isEmpty)) :| "Tree: "+tree+"New Tree: "+newTree+" Elements to Remove: "+elementsToRemove + } + } + } + + override def setup(l: List[Int], invariant: Tree[Unit] => Boolean) = l.foldLeft((true, Empty: Tree[Unit])) { + case ((true, acc), n) => + val newRoot = if (acc lookup n isEmpty) acc update (n, ()) else acc delete n + (invariant(newRoot), newRoot) + case (failed, _) => failed + } +} + +object Test extends Properties("RedBlack") { + include(TestInsertion) + include(TestDeletion) +} + diff --git a/test/partest-tests/jvm/actor-receivewithin.check b/test/partest-tests/jvm/actor-receivewithin.check new file mode 100644 index 0000000000..a6a3e88c61 --- /dev/null +++ b/test/partest-tests/jvm/actor-receivewithin.check @@ -0,0 +1,16 @@ +'msg +'msg +'msg +'msg +'msg +TIMEOUT +TIMEOUT +TIMEOUT +TIMEOUT +TIMEOUT +'msg2 +'msg2 +'msg2 +'msg2 +'msg2 +TIMEOUT diff --git a/test/partest-tests/jvm/actor-receivewithin.scala b/test/partest-tests/jvm/actor-receivewithin.scala new file mode 100644 index 0000000000..a5c87c2722 --- /dev/null +++ b/test/partest-tests/jvm/actor-receivewithin.scala @@ -0,0 +1,69 @@ +import scala.actors.{Actor, TIMEOUT} + +object A extends Actor { + def act() { + receive { + case 'done => + var cnt = 0 + while (cnt < 500) { + cnt += 1 + receiveWithin (0) { + case 'msg => + if (cnt % 100 == 0) + println("'msg") + case TIMEOUT => + // should not happen + println("FAIL1") + } + } + cnt = 0 + while (cnt < 500) { + cnt += 1 + receiveWithin (0) { + case 'msg => + // should not happen + println("FAIL2") + case TIMEOUT => + if (cnt % 100 == 0) + println("TIMEOUT") + } + } + B ! 'next + receive { case 'done => } + cnt = 0 + while (cnt < 501) { + cnt += 1 + receiveWithin (500) { + case 'msg2 => + if (cnt % 100 == 0) + println("'msg2") + case TIMEOUT => + println("TIMEOUT") + } + } + } + } +} + +object B extends Actor { + def act() { + A.start() + for (_ <- 1 to 500) { + A ! 'msg + } + A ! 'done + receive { + case 'next => + for (_ <- 1 to 500) { + A ! 'msg2 + } + A ! 'done + } + } +} + +object Test { + def main(args:Array[String]) { + B.start() + } +} diff --git a/test/partest-tests/run/crash.scala b/test/partest-tests/run/crash.scala new file mode 100644 index 0000000000..1735cc444e --- /dev/null +++ b/test/partest-tests/run/crash.scala @@ -0,0 +1,6 @@ +object Test { + def main(args: Array[String]): Unit = { + val t = new Throwable("DOOM") + throw t + } +} diff --git a/test/partest-tests/run/streamWithFilter.check b/test/partest-tests/run/streamWithFilter.check new file mode 100644 index 0000000000..6b0e91a147 --- /dev/null +++ b/test/partest-tests/run/streamWithFilter.check @@ -0,0 +1,5 @@ +15 +30 +45 +60 +75 diff --git a/test/partest-tests/run/streamWithFilter.scala b/test/partest-tests/run/streamWithFilter.scala new file mode 100644 index 0000000000..cb919d4f55 --- /dev/null +++ b/test/partest-tests/run/streamWithFilter.scala @@ -0,0 +1,11 @@ +object Test { + val nums = Stream.from(1) + def isFizz(x: Int) = x % 3 == 0 + def isBuzz(x: Int) = x % 5 == 0 + // next line will run forever if withFilter isn't doing its thing. + val fizzbuzzes = for (n <- nums ; if isFizz(n) ; if isBuzz(n)) yield n + + def main(args: Array[String]): Unit = { + fizzbuzzes take 5 foreach println + } +} diff --git a/test/partest-tests/run/timeout.scala b/test/partest-tests/run/timeout.scala new file mode 100644 index 0000000000..91417b39ab --- /dev/null +++ b/test/partest-tests/run/timeout.scala @@ -0,0 +1,5 @@ +object Test { + def main(args: Array[String]): Unit = { + Thread.sleep(10000000) + } +} |