From 9d1246d799419a8e7d96302c5787ce252e86b68d Mon Sep 17 00:00:00 2001 From: Gene Novark Date: Fri, 4 Jul 2014 15:01:11 -0400 Subject: Fix asymptotic performance issues in live variables analysis. Fix possibly-exponential runtime for DFS graph searches. Improve DFA fixpoint algorithm to correctly compute worklist of only changed nodes for each iteration. Added test that takes > 2 minutes to compile without these improvements. --- .../scala/scala/async/run/ifelse1/IfElse1.scala | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'src/test/scala/scala/async/run/ifelse1/IfElse1.scala') diff --git a/src/test/scala/scala/async/run/ifelse1/IfElse1.scala b/src/test/scala/scala/async/run/ifelse1/IfElse1.scala index 587aaac..6cbe910 100644 --- a/src/test/scala/scala/async/run/ifelse1/IfElse1.scala +++ b/src/test/scala/scala/async/run/ifelse1/IfElse1.scala @@ -87,6 +87,75 @@ class TestIfElse1Class { } z } + + def pred: Future[Boolean] = async(true) + + def m5: Future[Boolean] = async { + if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(if(await(pred)) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false) + await(pred) + else + false + } } class IfElse1Spec { @@ -124,4 +193,12 @@ class IfElse1Spec { val res = Await.result(fut, 2 seconds) res mustBe (14) } + + @Test + def `await in deeply-nested if-else conditions`() { + val o = new TestIfElse1Class + val fut = o.m5 + val res = Await.result(fut, 2 seconds) + res mustBe true + } } -- cgit v1.2.3