Skip to content

Commit 879d67e

Browse files
author
José Valim
committed
Improve coverage and fix regression on Stream.chunk/4
1 parent 704fb95 commit 879d67e

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

lib/elixir/lib/stream.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ defmodule Stream do
129129
@doc false
130130
def chunk(enum, n, step, leftover \\ nil)
131131
when is_integer(n) and n > 0 and is_integer(step) and step > 0 do
132-
R.chunk(&chunk_while/4, enum, n, step, leftover)
132+
chunk_every(enum, n, step, leftover || :discard)
133133
end
134134

135135
@doc """

lib/elixir/test/elixir/enum_test.exs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ defmodule EnumTest do
5959
assert Enum.chunk([1, 2, 3, 4, 5], 4, 4, 6..10) == [[1, 2, 3, 4], [5, 6, 7, 8]]
6060
end
6161

62+
test "chunk_every/2" do
63+
assert Enum.chunk_every([1, 2, 3, 4, 5], 2) == [[1, 2], [3, 4], [5]]
64+
end
65+
66+
test "chunk_every/4" do
67+
assert Enum.chunk_every([1, 2, 3, 4, 5], 2, 2, [6]) == [[1, 2], [3, 4], [5, 6]]
68+
assert Enum.chunk_every([1, 2, 3, 4, 5, 6], 3, 2, :discard) == [[1, 2, 3], [3, 4, 5]]
69+
assert Enum.chunk_every([1, 2, 3, 4, 5, 6], 2, 3, :discard) == [[1, 2], [4, 5]]
70+
assert Enum.chunk_every([1, 2, 3, 4, 5, 6], 3, 2, []) == [[1, 2, 3], [3, 4, 5], [5, 6]]
71+
assert Enum.chunk_every([1, 2, 3, 4, 5, 6], 3, 3, []) == [[1, 2, 3], [4, 5, 6]]
72+
assert Enum.chunk_every([1, 2, 3, 4, 5], 4, 4, 6..10) == [[1, 2, 3, 4], [5, 6, 7, 8]]
73+
end
74+
6275
test "chunk_by/2" do
6376
assert Enum.chunk_by([1, 2, 2, 3, 4, 4, 6, 7, 7], &(rem(&1, 2) == 1)) == [[1], [2, 2], [3], [4, 4, 6], [7, 7]]
6477
assert Enum.chunk_by([1, 2, 3, 4], fn _ -> true end) == [[1, 2, 3, 4]]
@@ -828,6 +841,18 @@ defmodule EnumTest.Range do
828841
assert Enum.at(2..6, -8) == nil
829842
end
830843

844+
test "chunk/2" do
845+
assert Enum.chunk(1..5, 2) == [[1, 2], [3, 4]]
846+
end
847+
848+
test "chunk/4" do
849+
assert Enum.chunk(1..5, 2, 2, [6]) == [[1, 2], [3, 4], [5, 6]]
850+
assert Enum.chunk(1..6, 3, 2) == [[1, 2, 3], [3, 4, 5]]
851+
assert Enum.chunk(1..6, 2, 3) == [[1, 2], [4, 5]]
852+
assert Enum.chunk(1..6, 3, 2, []) == [[1, 2, 3], [3, 4, 5], [5, 6]]
853+
assert Enum.chunk(1..5, 4, 4, 6..10) == [[1, 2, 3, 4], [5, 6, 7, 8]]
854+
end
855+
831856
test "chunk_every/2" do
832857
assert Enum.chunk_every(1..5, 2) == [[1, 2], [3, 4], [5]]
833858
end

lib/elixir/test/elixir/stream_test.exs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,23 @@ defmodule StreamTest do
4242
assert Enum.to_list(stream) == [3, 5, 7]
4343
end
4444

45+
test "chunk/2, chunk/3 and chunk/4" do
46+
assert Stream.chunk([1, 2, 3, 4, 5], 2) |> Enum.to_list ==
47+
[[1, 2], [3, 4]]
48+
assert Stream.chunk([1, 2, 3, 4, 5], 2, 2, [6]) |> Enum.to_list ==
49+
[[1, 2], [3, 4], [5, 6]]
50+
assert Stream.chunk([1, 2, 3, 4, 5, 6], 3, 2) |> Enum.to_list ==
51+
[[1, 2, 3], [3, 4, 5]]
52+
assert Stream.chunk([1, 2, 3, 4, 5, 6], 2, 3) |> Enum.to_list ==
53+
[[1, 2], [4, 5]]
54+
assert Stream.chunk([1, 2, 3, 4, 5, 6], 3, 2, []) |> Enum.to_list ==
55+
[[1, 2, 3], [3, 4, 5], [5, 6]]
56+
assert Stream.chunk([1, 2, 3, 4, 5, 6], 3, 3, []) |> Enum.to_list ==
57+
[[1, 2, 3], [4, 5, 6]]
58+
assert Stream.chunk([1, 2, 3, 4, 5], 4, 4, 6..10) |> Enum.to_list ==
59+
[[1, 2, 3, 4], [5, 6, 7, 8]]
60+
end
61+
4562
test "chunk_every/2, chunk_every/3 and chunk_every/4" do
4663
assert Stream.chunk_every([1, 2, 3, 4, 5], 2) |> Enum.to_list ==
4764
[[1, 2], [3, 4], [5]]

0 commit comments

Comments
 (0)