diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-12-15 17:34:51 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-12-16 11:05:22 +1000 |
commit | 063492a14a004cb519f553a6cd30f8b3e41f0453 (patch) | |
tree | 19413879ab94f946c0456e97a660fb86f179a5a8 /src/test/scala | |
parent | c0d711570b76fb17f8f58a80f8529dcb9cbfdb2c (diff) | |
download | scala-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')
-rw-r--r-- | src/test/scala/scala/async/run/SyncOptimizationSpec.scala | 28 | ||||
-rw-r--r-- | src/test/scala/scala/async/run/futures/FutureSpec.scala | 1 |
2 files changed, 28 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 25be0b1..362303e 100644 --- a/src/test/scala/scala/async/run/futures/FutureSpec.scala +++ b/src/test/scala/scala/async/run/futures/FutureSpec.scala @@ -538,7 +538,6 @@ class FutureSpec { val f = async { await(future(5)) / 0 } Await.ready(f, defaultTimeout).value.get.toString mustBe expected.toString } - } |