aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async/run/SyncOptimizationSpec.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-12-15 17:34:51 +1000
committerJason Zaugg <jzaugg@gmail.com>2014-12-16 11:05:22 +1000
commit063492a14a004cb519f553a6cd30f8b3e41f0453 (patch)
tree19413879ab94f946c0456e97a660fb86f179a5a8 /src/test/scala/scala/async/run/SyncOptimizationSpec.scala
parentc0d711570b76fb17f8f58a80f8529dcb9cbfdb2c (diff)
downloadscala-async-063492a14a004cb519f553a6cd30f8b3e41f0453.tar.gz
scala-async-063492a14a004cb519f553a6cd30f8b3e41f0453.tar.bz2
scala-async-063492a14a004cb519f553a6cd30f8b3e41f0453.zip
Make `f(await(completedFuture))` execute `f` synchronously
A worthy optimization, suggested by @danarmak. Closes #73
Diffstat (limited to 'src/test/scala/scala/async/run/SyncOptimizationSpec.scala')
-rw-r--r--src/test/scala/scala/async/run/SyncOptimizationSpec.scala28
1 files changed, 28 insertions, 0 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)
+ }
+
+}