aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2012-11-26 04:58:46 -0800
committerPhilipp Haller <hallerp@gmail.com>2012-11-26 04:58:46 -0800
commit4518c96f9b54a1b7ca14d82b3ed31d7014a67f57 (patch)
tree377fa7409318c5852ad1d31b65ecb7ff18027c29
parentc225115169cbe3cabffe433d8ab0338854d03555 (diff)
parent83864e903ffc33e4b66b4c2b65d730fbada89c90 (diff)
downloadscala-async-4518c96f9b54a1b7ca14d82b3ed31d7014a67f57.tar.gz
scala-async-4518c96f9b54a1b7ca14d82b3ed31d7014a67f57.tar.bz2
scala-async-4518c96f9b54a1b7ca14d82b3ed31d7014a67f57.zip
Merge pull request #38 from phaller/ticket/19-external-vars
Fix #19
-rw-r--r--src/test/scala/scala/async/run/hygiene/Hygiene.scala90
1 files changed, 64 insertions, 26 deletions
diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
index d0be2e0..0da2a4d 100644
--- a/src/test/scala/scala/async/run/hygiene/Hygiene.scala
+++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
@@ -6,47 +6,85 @@ package scala.async
package run
package hygiene
-import language.{reflectiveCalls, postfixOps}
-import concurrent._
-import scala.concurrent.{Future, ExecutionContext, future, Await}
-import scala.concurrent.duration._
-import scala.async.Async.{async, await}
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+@RunWith(classOf[JUnit4])
+class HygieneSpec {
-class HygieneClass {
-
- import ExecutionContext.Implicits.global
+ import scala.async.AsyncId.{async, await}
- def m1(x: Int): Future[Int] = future {
- x + 2
- }
-
- def m2(y: Int) = {
+ @Test
+ def `is hygenic`() {
val state = 23
val result: Any = "result"
def resume(): Any = "resume"
- async {
- val f1 = m1(state)
- val x = await(f1)
- val y = await(future(result))
- val z = await(future(resume()))
+ val res = async {
+ val f1 = state + 2
+ val x = await(f1)
+ val y = await(result)
+ val z = await(resume())
(x, y, z)
}
+ res mustBe ((25, "result", "resume"))
}
-}
-@RunWith(classOf[JUnit4])
-class HygieneSpec {
-
- @Test def `is hygenic`() {
- val o = new HygieneClass
- val fut = o.m2(10)
- val res = Await.result(fut, 2 seconds)
+/* TODO:
+[error] /Users/phaller/git/async/src/test/scala/scala/async/run/hygiene/Hygiene.scala:52: not found: value tr$1
+[error] val f1 = async { state + 2 }
+[error] ^
+ @Test
+ def `is hygenic`() {
+ val state = 23
+ val result: Any = "result"
+ def resume(): Any = "resume"
+ val res = async {
+ val f1 = async { state + 2 }
+ val x = await(f1)
+ val y = await(async { result })
+ val z = await(async { resume() })
+ (x, y, z)
+ }
res._1 mustBe (25)
res._2 mustBe ("result")
res._3 mustBe ("resume")
}
+*/
+
+ @Test
+ def `external var as result of await`() {
+ var ext = 0
+ async {
+ ext = await(12)
+ }
+ ext mustBe (12)
+ }
+
+ @Test
+ def `external var as result of await 2`() {
+ var ext = 0
+ val inp = 10
+ async {
+ if (inp > 0)
+ ext = await(12)
+ else
+ ext = await(10)
+ }
+ ext mustBe (12)
+ }
+
+ @Test
+ def `external var as result of await 3`() {
+ var ext = 0
+ val inp = 10
+ async {
+ val x = if (inp > 0)
+ await(12)
+ else
+ await(10)
+ ext = x + await(2)
+ }
+ ext mustBe (14)
+ }
}