Skip to content

Commit 3dd54ad

Browse files
sabiwarajosevalim
authored andcommitted
Fixing edge cases in Enum.slide/3 (#12052)
* Fix bug in Enum.slide/3: empty lists * Fix edge case in Enum.slide/3
1 parent 24daffb commit 3dd54ad

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

lib/elixir/lib/enum.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2693,6 +2693,10 @@ defmodule Enum do
26932693
"(tried to insert #{first}..#{last} at #{insertion_index})"
26942694
end
26952695

2696+
def slide(enumerable, first..last, _insertion_index) when first > last do
2697+
Enum.to_list(enumerable)
2698+
end
2699+
26962700
# Guarantees at this point: step size == 1 and first <= last and (insertion_index < first or insertion_index > last)
26972701
def slide(enumerable, first..last, insertion_index) do
26982702
impl = if is_list(enumerable), do: &slide_list_start/4, else: &slide_any/4
@@ -2741,6 +2745,7 @@ defmodule Enum do
27412745
end
27422746

27432747
defp slide_list_start(list, 0, middle, last), do: slide_list_middle(list, middle, last, [])
2748+
defp slide_list_start([], _start, _middle, _last), do: []
27442749

27452750
defp slide_list_middle([h | t], middle, last, acc) when middle > 0 do
27462751
slide_list_middle(t, middle - 1, last - 1, [h | acc])

lib/elixir/test/elixir/enum_test.exs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,7 @@ defmodule EnumTest do
821821
test "on an empty enum produces an empty list" do
822822
for enum <- [[], %{}, 0..-1//1, MapSet.new()] do
823823
assert Enum.slide(enum, 0..0, 0) == []
824+
assert Enum.slide(enum, 1..1, 2) == []
824825
end
825826
end
826827

@@ -955,7 +956,8 @@ defmodule EnumTest do
955956
{4..8, 19},
956957
{4..8, 0},
957958
{4..8, 2},
958-
{10..20, 0}
959+
{10..20, 0},
960+
{2..1//1, -20}
959961
]
960962

961963
for {slide_range, insertion_point} <- test_specs do

0 commit comments

Comments
 (0)