diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2010-04-13 22:51:04 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2010-04-13 22:51:04 +0000 |
commit | d95eb2a8f979b9f9db98a0e097ef3793674e57ab (patch) | |
tree | 6e11ba6e02cdd30c53861d42e6e52d5ce34b8d95 /test/files/jvm | |
parent | c272bbfb64b1d0522e09daa0981a4942f63607a4 (diff) | |
download | scala-d95eb2a8f979b9f9db98a0e097ef3793674e57ab.tar.gz scala-d95eb2a8f979b9f9db98a0e097ef3793674e57ab.tar.bz2 scala-d95eb2a8f979b9f9db98a0e097ef3793674e57ab.zip |
Made the icode reader more resilient to errors.
symbol does not cause any crashes, but the method using an unknown
symbol will not be used for inlining. Resurrected tests, removed
spec-matrix for the moment. No review.
Diffstat (limited to 'test/files/jvm')
-rw-r--r-- | test/files/jvm/actor-getstate.check | 2 | ||||
-rw-r--r-- | test/files/jvm/actor-getstate.scala | 85 | ||||
-rw-r--r-- | test/files/jvm/actor-receivewithin.check | 16 | ||||
-rw-r--r-- | test/files/jvm/actor-receivewithin.scala | 69 |
4 files changed, 172 insertions, 0 deletions
diff --git a/test/files/jvm/actor-getstate.check b/test/files/jvm/actor-getstate.check new file mode 100644 index 0000000000..2c94e48371 --- /dev/null +++ b/test/files/jvm/actor-getstate.check @@ -0,0 +1,2 @@ +OK +OK diff --git a/test/files/jvm/actor-getstate.scala b/test/files/jvm/actor-getstate.scala new file mode 100644 index 0000000000..a6e15a8721 --- /dev/null +++ b/test/files/jvm/actor-getstate.scala @@ -0,0 +1,85 @@ +import scala.actors.{Reactor, Actor, TIMEOUT} +import Actor._ + +object Test { + + def assert(cond: => Boolean, hint: String) { + if (!cond) + println("FAIL ["+hint+"]") + } + + def expectActorState(a: Reactor[T] forSome { type T }, s: Actor.State.Value) { + var done = false + var i = 0 + while (!done) { + i = i + 1 + if (i == 10) { // only wait for 2 seconds total + println("FAIL ["+a+": expected "+s+"]") + done = true + } + + Thread.sleep(200) + if (a.getState == s) // success + done = true + } + } + + def main(args: Array[String]) { + actor { + val a = new Reactor[Any] { + def act() { + assert(getState == Actor.State.Runnable, "runnable1") + react { + case 'go => + println("OK") + } + } + } + expectActorState(a, Actor.State.New) + + a.start() + expectActorState(a, Actor.State.Suspended) + + a ! 'go + expectActorState(a, Actor.State.Terminated) + + val b = new Actor { + def act() { + assert(getState == Actor.State.Runnable, "runnable2: "+getState) + react { + case 'go => + reactWithin(100000) { + case TIMEOUT => + case 'go => + receive { + case 'go => + } + receiveWithin(100000) { + case TIMEOUT => + case 'go => + println("OK") + } + } + } + } + } + expectActorState(b, Actor.State.New) + + b.start() + expectActorState(b, Actor.State.Suspended) + + b ! 'go + expectActorState(b, Actor.State.TimedSuspended) + + b ! 'go + expectActorState(b, Actor.State.Blocked) + + b ! 'go + expectActorState(b, Actor.State.TimedBlocked) + + b ! 'go + expectActorState(b, Actor.State.Terminated) + } + } + +} diff --git a/test/files/jvm/actor-receivewithin.check b/test/files/jvm/actor-receivewithin.check new file mode 100644 index 0000000000..a6a3e88c61 --- /dev/null +++ b/test/files/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/files/jvm/actor-receivewithin.scala b/test/files/jvm/actor-receivewithin.scala new file mode 100644 index 0000000000..a5c87c2722 --- /dev/null +++ b/test/files/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() + } +} |