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/actor-getstate.scala | |
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/actor-getstate.scala')
-rw-r--r-- | test/files/jvm/actor-getstate.scala | 85 |
1 files changed, 85 insertions, 0 deletions
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) + } + } + +} |