diff --git a/lib/elixir/lib/range.ex b/lib/elixir/lib/range.ex index 9e207def402..dd068b7e547 100644 --- a/lib/elixir/lib/range.ex +++ b/lib/elixir/lib/range.ex @@ -290,9 +290,12 @@ defmodule Range do """ @doc since: "1.14.0" @spec shift(t, integer) :: t - def shift(first..last//step, steps_to_shift) - when is_integer(steps_to_shift) do - new(first + steps_to_shift * step, last + steps_to_shift * step, step) + def shift(%Range{} = range, 0), do: range + + def shift(first..last//step, steps_to_shift) when is_integer(steps_to_shift) do + shift = steps_to_shift * step + + new(first + shift, last + shift, step) end @doc """ diff --git a/lib/elixir/test/elixir/range_test.exs b/lib/elixir/test/elixir/range_test.exs index d273c992019..9c961343872 100644 --- a/lib/elixir/test/elixir/range_test.exs +++ b/lib/elixir/test/elixir/range_test.exs @@ -60,6 +60,7 @@ defmodule RangeTest do test "shift" do assert Range.shift(0..10//2, 2) == 4..14//2 + assert Range.shift(0..10//2, 0) == 0..10//2 assert Range.shift(10..0//-2, 2) == 6..-4//-2 assert Range.shift(10..0//-2, -2) == 14..4//-2 end