diff options
Diffstat (limited to 'src/test/scala/scala/async/run')
5 files changed, 111 insertions, 24 deletions
diff --git a/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala b/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala index 41eeaa5..6dd4db7 100644 --- a/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala +++ b/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala @@ -24,8 +24,8 @@ class AnfTestClass { } def m(y: Int): Future[Int] = async { - val f = base(y) - await(f) + val blerg = base(y) + await(blerg) } def m2(y: Int): Future[Int] = async { diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala index 0da2a4d..9d1df21 100644 --- a/src/test/scala/scala/async/run/hygiene/Hygiene.scala +++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala @@ -30,28 +30,6 @@ class HygieneSpec { res mustBe ((25, "result", "resume")) } -/* 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 @@ -87,4 +65,22 @@ class HygieneSpec { } ext mustBe (14) } + + @Test + def `is hygenic nested`() { + val state = 23 + val result: Any = "result" + def resume(): Any = "resume" + import AsyncId.{await, async} + val res = async { + val f1 = async { state + 2 } + val x = await(f1) + val y = await(async { result }) + val z = await(async(await(async { resume() }))) + (x, y, z) + } + res._1 mustBe (25) + res._2 mustBe ("result") + res._3 mustBe ("resume") + } } diff --git a/src/test/scala/scala/async/run/ifelse0/IfElse0.scala b/src/test/scala/scala/async/run/ifelse0/IfElse0.scala index 0a72f1e..e2b1ca6 100644 --- a/src/test/scala/scala/async/run/ifelse0/IfElse0.scala +++ b/src/test/scala/scala/async/run/ifelse0/IfElse0.scala @@ -47,4 +47,12 @@ class IfElseSpec { val res = Await.result(fut, 2 seconds) res mustBe (14) } + + @Test def `await in condition`() { + import AsyncId.{async, await} + val result = async { + if ({await(true); await(true)}) await(1) else ??? + } + result mustBe (1) + } } diff --git a/src/test/scala/scala/async/run/match0/Match0.scala b/src/test/scala/scala/async/run/match0/Match0.scala index f550a69..8263e72 100644 --- a/src/test/scala/scala/async/run/match0/Match0.scala +++ b/src/test/scala/scala/async/run/match0/Match0.scala @@ -69,4 +69,47 @@ class MatchSpec { val res = Await.result(fut, 2 seconds) res mustBe (5) } + + @Test def `support await in a match expression with binds`() { + val result = AsyncId.async { + val x = 1 + Option(x) match { + case op @ Some(x) => + assert(op == Some(1)) + x + AsyncId.await(x) + case None => AsyncId.await(0) + } + } + result mustBe (2) + } + + @Test def `support await referring to pattern matching vals`() { + import AsyncId.{async, await} + val result = async { + val x = 1 + val opt = Some("") + await(0) + val o @ Some(y) = opt + + { + val o @ Some(y) = Some(".") + } + + await(0) + await((o, y.isEmpty)) + } + result mustBe ((Some(""), true)) + } + + @Test def `await in scrutinee`() { + import AsyncId.{async, await} + val result = async { + await(if ("".isEmpty) await(1) else ???) match { + case x if x < 0 => ??? + case y: Int => y * await(3) + case _ => ??? + } + } + result mustBe (3) + } } diff --git a/src/test/scala/scala/async/run/nesteddef/NestedDef.scala b/src/test/scala/scala/async/run/nesteddef/NestedDef.scala new file mode 100644 index 0000000..2baef0d --- /dev/null +++ b/src/test/scala/scala/async/run/nesteddef/NestedDef.scala @@ -0,0 +1,40 @@ +package scala.async +package run +package nesteddef + +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.junit.Test + +@RunWith(classOf[JUnit4]) +class NestedDef { + + @Test + def nestedDef() { + import AsyncId._ + val result = async { + val a = 0 + val x = await(a) - 1 + val local = 43 + def bar(d: Double) = -d + a + local + def foo(z: Any) = (a.toDouble, bar(x).toDouble, z) + foo(await(2)) + } + result mustBe (0d, 44d, 2) + } + + + @Test + def nestedFunction() { + import AsyncId._ + val result = async { + val a = 0 + val x = await(a) - 1 + val local = 43 + val bar = (d: Double) => -d + a + local + val foo = (z: Any) => (a.toDouble, bar(x).toDouble, z) + foo(await(2)) + } + result mustBe (0d, 44d, 2) + } +} |