aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async/run
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/scala/async/run')
-rw-r--r--src/test/scala/scala/async/run/SyncOptimizationSpec.scala28
-rw-r--r--src/test/scala/scala/async/run/futures/FutureSpec.scala8
-rw-r--r--src/test/scala/scala/async/run/stackoverflow/StackOverflowSpec.scala28
3 files changed, 63 insertions, 1 deletions
diff --git a/src/test/scala/scala/async/run/SyncOptimizationSpec.scala b/src/test/scala/scala/async/run/SyncOptimizationSpec.scala
new file mode 100644
index 0000000..dd649f4
--- /dev/null
+++ b/src/test/scala/scala/async/run/SyncOptimizationSpec.scala
@@ -0,0 +1,28 @@
+package scala.async.run
+
+import org.junit.Test
+import scala.async.Async._
+import scala.concurrent._
+import scala.concurrent.duration._
+import ExecutionContext.Implicits._
+
+class SyncOptimizationSpec {
+ @Test
+ def awaitOnCompletedFutureRunsOnSameThread: Unit = {
+
+ def stackDepth = Thread.currentThread().getStackTrace.size
+
+ val future = async {
+ val thread1 = Thread.currentThread
+ val stackDepth1 = stackDepth
+
+ val f = await(Future.successful(1))
+ val thread2 = Thread.currentThread
+ val stackDepth2 = stackDepth
+ assert(thread1 == thread2)
+ assert(stackDepth1 == stackDepth2)
+ }
+ Await.result(future, 10.seconds)
+ }
+
+}
diff --git a/src/test/scala/scala/async/run/futures/FutureSpec.scala b/src/test/scala/scala/async/run/futures/FutureSpec.scala
index 1761db5..362303e 100644
--- a/src/test/scala/scala/async/run/futures/FutureSpec.scala
+++ b/src/test/scala/scala/async/run/futures/FutureSpec.scala
@@ -134,6 +134,13 @@ class FutureSpec {
Await.result(future1, defaultTimeout) mustBe ("10-14")
intercept[NoSuchElementException] { Await.result(future2, defaultTimeout) }
}
+
+ @Test def mini() {
+ val future4 = async {
+ await(Future.successful(0)).toString
+ }
+ Await.result(future4, defaultTimeout)
+ }
@Test def `recover from exceptions`() {
val future1 = Future(5)
@@ -531,7 +538,6 @@ class FutureSpec {
val f = async { await(future(5)) / 0 }
Await.ready(f, defaultTimeout).value.get.toString mustBe expected.toString
}
-
}
diff --git a/src/test/scala/scala/async/run/stackoverflow/StackOverflowSpec.scala b/src/test/scala/scala/async/run/stackoverflow/StackOverflowSpec.scala
new file mode 100644
index 0000000..2dc9b92
--- /dev/null
+++ b/src/test/scala/scala/async/run/stackoverflow/StackOverflowSpec.scala
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2012-2014 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async
+package run
+package stackoverflow
+
+import org.junit.Test
+import scala.async.internal.AsyncId
+
+
+class StackOverflowSpec {
+
+ @Test
+ def stackSafety() {
+ import AsyncId._
+ async {
+ var i = 100000000
+ while (i > 0) {
+ if (false) {
+ await(())
+ }
+ i -= 1
+ }
+ }
+ }
+}