diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-12-18 13:57:26 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-12-18 13:57:26 +1000 |
commit | 41ae70758a8c5b841a8b63445f82bd056a0a964f (patch) | |
tree | 19413879ab94f946c0456e97a660fb86f179a5a8 /src/test | |
parent | 61b4c183fa2392522051305ec12ab5f433cc09a7 (diff) | |
parent | 063492a14a004cb519f553a6cd30f8b3e41f0453 (diff) | |
download | scala-async-41ae70758a8c5b841a8b63445f82bd056a0a964f.tar.gz scala-async-41ae70758a8c5b841a8b63445f82bd056a0a964f.tar.bz2 scala-async-41ae70758a8c5b841a8b63445f82bd056a0a964f.zip |
Merge pull request #98 from retronym/ticket/73
Make `f(await(completedFuture))` execute `f` synchronously
Diffstat (limited to 'src/test')
4 files changed, 65 insertions, 3 deletions
diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala index 8261898..b7c403a 100644 --- a/src/test/scala/scala/async/TreeInterrogation.scala +++ b/src/test/scala/scala/async/TreeInterrogation.scala @@ -36,7 +36,7 @@ class TreeInterrogation { functions.size mustBe 1 val varDefs = tree1.collect { - case ValDef(mods, name, _, _) if mods.hasFlag(Flag.MUTABLE) => name + case vd @ ValDef(mods, name, _, _) if mods.hasFlag(Flag.MUTABLE) && vd.symbol.owner.isClass => name } varDefs.map(_.decoded.trim).toSet mustBe (Set("state", "await$1$1", "await$2$1")) @@ -49,7 +49,7 @@ class TreeInterrogation { && !dd.symbol.asTerm.isAccessor && !dd.symbol.asTerm.isSetter => dd.name } }.flatten - defDefs.map(_.decoded.trim).toSet mustBe (Set("foo$1", "apply", "resume", "<init>")) + defDefs.map(_.decoded.trim).toSet mustBe (Set("foo$1", "apply", "<init>")) } } 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 + } + } + } +} |