diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2012-09-17 12:07:10 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2012-09-17 12:07:10 -0700 |
commit | 2de9ab8973899d5f8c6284056b053389db0f55f7 (patch) | |
tree | 770a86d3fad565041cab295416def2412366ebfa /test/files/jvm/actmig-receive.scala | |
parent | fe3fa3d0ad60a651a3223d223a55051667dda156 (diff) | |
parent | cc561873185d25e71091a11f5cb1b3003b9ebca3 (diff) | |
download | scala-2de9ab8973899d5f8c6284056b053389db0f55f7.tar.gz scala-2de9ab8973899d5f8c6284056b053389db0f55f7.tar.bz2 scala-2de9ab8973899d5f8c6284056b053389db0f55f7.zip |
Merge pull request #1291 from vjovanov/actor-migration-tests
Fix for SI-6305 & new actor migration tests
Diffstat (limited to 'test/files/jvm/actmig-receive.scala')
-rw-r--r-- | test/files/jvm/actmig-receive.scala | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/test/files/jvm/actmig-receive.scala b/test/files/jvm/actmig-receive.scala new file mode 100644 index 0000000000..bd45d6e4ca --- /dev/null +++ b/test/files/jvm/actmig-receive.scala @@ -0,0 +1,116 @@ +import scala.actors.migration.MigrationSystem._ +import scala.actors.Actor._ +import scala.actors._ +import scala.actors.migration._ +import java.util.concurrent.{ TimeUnit, CountDownLatch } +import scala.collection.mutable.ArrayBuffer +import scala.concurrent.util.duration._ +import scala.concurrent.{ Promise, Await } + +object Test { + val finishedSingle, finishedSingle1, finishedLoop, finishedLoop1 = Promise[Boolean] + + def testDoubleReceive() = { + println("Original") + // Snippet that shows how to get rid of receive calls in Scala Actors. + // This snippet is used in the Actors Migration Kit. + val myActor = actor { + println("do before") + receive { + case "hello" => + println("receive 1") + } + println("do in between") + receive { + case "hello" => + println("receive 1") + } + println("do after") + finishedSingle.success(true) + } + + myActor ! "hello" + myActor ! "hello" + + Await.ready(finishedSingle.future, 5 seconds) + println("Transformed") + val myActorReact = actor { + println("do before") + react (({ + case "hello" => + println("receive 1") + }: PartialFunction[Any, Unit]).andThen { x => + println("do in between") + react (({ + case "hello" => + println("receive 1") + }: PartialFunction[Any, Unit]).andThen { x => + println("do after") + finishedSingle1.success(true) + }) + }) + } + + myActorReact ! "hello" + myActorReact ! "hello" + + Await.ready(finishedSingle1.future, 5 seconds) + } + + def testLoopReceive() = { + println("Test Loop Receive") + // Snippet that shows how to get rid of receive calls in loops. + // This snippet is used in the Actors Migration Kit. + println("Original") + val myActor = actor { + var c = true + while (c) { + println("do before body") + receive { + case "hello" => + println("receive 1") + case "exit" => + c = false + } + println("do after receive") + } + println("after loop") + finishedLoop.success(true) + } + + myActor ! "hello" + myActor ! "exit" + Await.ready(finishedLoop.future, 5 seconds) + println("Transformed") + + val myActorReact = actor { + var c = true + loopWhile(c) { + println("do before body") + react (({ + case "hello" => + println("receive 1") + case "exit" => + c = false + }: PartialFunction[Any, Unit]).andThen { x => + println("do after receive") + if (c == false) { + println("after loop") + finishedLoop1.success(true) + } + }) + } + } + + myActorReact ! "hello" + myActorReact ! "exit" + + Await.ready(finishedLoop1.future, 5 seconds) + } + + def main(args: Array[String]) = { + testDoubleReceive() + testLoopReceive() + } + +} |