From 67e2ba9263bb40184a4ed4aff89c811e8230dfa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Mickevi=C4=8Dius?= Date: Thu, 20 Nov 2014 17:01:49 +0200 Subject: [PATCH] =str #16349 fix map + map optimization --- .../OptimizingActorBasedFlowMaterializerSpec.scala | 11 ++++++++++- .../akka/stream/impl/ActorBasedFlowMaterializer.scala | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/OptimizingActorBasedFlowMaterializerSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/OptimizingActorBasedFlowMaterializerSpec.scala index 1621b2bd79..901a815178 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/OptimizingActorBasedFlowMaterializerSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/OptimizingActorBasedFlowMaterializerSpec.scala @@ -39,5 +39,14 @@ class OptimizingActorBasedFlowMaterializerSpec extends AkkaSpec with ImplicitSen Await.result(f, 5.seconds) should be(expected) } + + "optimize map + map" in { + implicit val mat = FlowMaterializer().asInstanceOf[ActorBasedFlowMaterializer].copy(optimizations = Optimizations.all) + + val fl = Source(1 to 100).map(_ + 2).map(_ * 2).fold(0)(_ + _) + val expected = (1 to 100).map(_ + 2).map(_ * 2).fold(0)(_ + _) + + Await.result(fl, 5.seconds) should be(expected) + } } -} \ No newline at end of file +} diff --git a/akka-stream/src/main/scala/akka/stream/impl/ActorBasedFlowMaterializer.scala b/akka-stream/src/main/scala/akka/stream/impl/ActorBasedFlowMaterializer.scala index 19e624fb61..4e45e88d64 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/ActorBasedFlowMaterializer.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/ActorBasedFlowMaterializer.scala @@ -228,7 +228,7 @@ case class ActorBasedFlowMaterializer(override val settings: MaterializerSetting case noMatch if !optimizations.simplification || (noMatch ne orig) ⇒ orig // Two consecutive maps is equivalent to one pipelined map - case Ast.Map(second) :: Ast.Map(first) :: rest ⇒ Ast.Map(first compose second) :: rest + case Ast.Map(second) :: Ast.Map(first) :: rest ⇒ Ast.Map(first andThen second) :: rest case noMatch ⇒ noMatch }