Skip to content

Commit a1a37c6

Browse files
committed
Optimize range membership implementation, closes #12282
1 parent ff73830 commit a1a37c6

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

lib/elixir/lib/range.ex

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -387,16 +387,11 @@ defimpl Enumerable, for: Range do
387387
{:done, acc}
388388
end
389389

390-
def member?(first..last//step = range, value) when is_integer(value) do
391-
cond do
392-
Range.size(range) == 0 ->
393-
{:ok, false}
394-
395-
first <= last ->
396-
{:ok, first <= value and value <= last and rem(value - first, step) == 0}
397-
398-
true ->
399-
{:ok, last <= value and value <= first and rem(value - first, step) == 0}
390+
def member?(first..last//step, value) when is_integer(value) do
391+
if step > 0 do
392+
{:ok, first <= value and value <= last and rem(value - first, step) == 0}
393+
else
394+
{:ok, last <= value and value <= first and rem(value - first, step) == 0}
400395
end
401396
end
402397

0 commit comments

Comments
 (0)