From e525fb3176fd186e897006ba425d0be37e1649d2 Mon Sep 17 00:00:00 2001 From: Andrew Hodges Date: Wed, 28 Aug 2013 16:27:45 -0400 Subject: [PATCH] Fix Stream.take/2 and Stream.take_while/2 for Stream.Lazy --- lib/elixir/lib/stream.ex | 5 ++++- lib/elixir/test/elixir/stream_test.exs | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/elixir/lib/stream.ex b/lib/elixir/lib/stream.ex index 9b9ee10ccab..9031e2e41ee 100644 --- a/lib/elixir/lib/stream.ex +++ b/lib/elixir/lib/stream.ex @@ -115,7 +115,10 @@ defmodule Stream do end defp do_reduce(Lazy[enumerable: enumerable, fun: f1, acc: side], acc, fun) do - do_reduce(enumerable, { acc, side }, f1.(fun)) |> elem(0) + case do_reduce(enumerable, { acc, side }, f1.(fun)) do + { acc, _ } -> acc + acc -> acc + end end defp do_reduce(enumerable, acc, fun) do diff --git a/lib/elixir/test/elixir/stream_test.exs b/lib/elixir/test/elixir/stream_test.exs index 994366aa17b..38b04183d3e 100644 --- a/lib/elixir/test/elixir/stream_test.exs +++ b/lib/elixir/test/elixir/stream_test.exs @@ -153,6 +153,9 @@ defmodule StreamTest do nats = Stream.iterate(1, &(&1 + 1)) assert Enum.to_list(Stream.take(nats, 5)) == [1,2,3,4,5] + + stream = Stream.drop(1..100, 5) + assert Stream.take(stream, 5) |> Enum.to_list == [6,7,8,9,10] end test :take_while do @@ -165,6 +168,9 @@ defmodule StreamTest do nats = Stream.iterate(1, &(&1 + 1)) assert Enum.to_list(Stream.take_while(nats, &(&1 <= 5))) == [1,2,3,4,5] + + stream = Stream.drop(1..100, 5) + assert Stream.take_while(stream, &(&1 < 11)) |> Enum.to_list == [6,7,8,9,10] end test :with_index do