diff --git a/lib/elixir/lib/enum.ex b/lib/elixir/lib/enum.ex index e5e77d5c10c..9d5abd653e5 100644 --- a/lib/elixir/lib/enum.ex +++ b/lib/elixir/lib/enum.ex @@ -787,7 +787,7 @@ defmodule Enum do def dedup(enumerable) do Enum.reduce(enumerable, [], fn x, acc -> case acc do - [^x, _] -> acc + [^x | _] -> acc _ -> [x | acc] end end) diff --git a/lib/elixir/test/elixir/enum_test.exs b/lib/elixir/test/elixir/enum_test.exs index ccdd539c9f0..4baed6bf806 100644 --- a/lib/elixir/test/elixir/enum_test.exs +++ b/lib/elixir/test/elixir/enum_test.exs @@ -184,6 +184,18 @@ defmodule EnumTest do assert Enum.dedup([nil]) == [nil] end + test "dedup/1 with streams" do + dedup_stream = fn list -> list |> Stream.map(& &1) |> Enum.dedup() end + + assert dedup_stream.([1, 1, 2, 1, 1, 2, 1]) == [1, 2, 1, 2, 1] + assert dedup_stream.([2, 1, 1, 2, 1]) == [2, 1, 2, 1] + assert dedup_stream.([1, 2, 3, 4]) == [1, 2, 3, 4] + assert dedup_stream.([1, 1.0, 2.0, 2]) == [1, 1.0, 2.0, 2] + assert dedup_stream.([]) == [] + assert dedup_stream.([nil, nil, true, {:value, true}]) == [nil, true, {:value, true}] + assert dedup_stream.([nil]) == [nil] + end + test "dedup_by/2" do assert Enum.dedup_by([{1, :x}, {2, :y}, {2, :z}, {1, :x}], fn {x, _} -> x end) == [{1, :x}, {2, :y}, {1, :x}]