blob: 308643cf414097487e05615661cc5a04aa96accf (
plain) (
tree)
|
|
/**
* NOTE: Code snippets from this test are included in the Actor Migration Guide. In case you change
* code in these tests prior to the 2.10.0 release please send the notification to @vjovanov.
*/
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.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()
}
}
|