Skip to content

Commit 054ff45

Browse files
author
José Valim
committed
Remove Enum.equal?
There is a branch work refactoring Enum and Enum.equal? contains some limitations. We are removing it for now since it was not officially released yet.
1 parent b5fce07 commit 054ff45

File tree

3 files changed

+1
-249
lines changed

3 files changed

+1
-249
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
* enhancements
22
* [CLI] Flags `-p` and `-pr` fails if pattern match no files
33
* [CLI] Support `--hidden` and `--cookie` flags for distributed Erlang
4-
* [Enum] Add `Enum.to_list/1`, `Enum.equal?/2`, `Enum.equal?/3`, `Enum.member?/2`, `Enum.uniq/2`, `Enum.max/1`, `Enum.max/2`, `Enum.min/1` and `Enum.min/2`
4+
* [Enum] Add `Enum.to_list/1`, `Enum.member?/2`, `Enum.uniq/2`, `Enum.max/1`, `Enum.max/2`, `Enum.min/1` and `Enum.min/2`
55
* [ExUnit] Add `ExUnit.CaptureIO` for IO capturing during tests
66
* [ExUnit] Consider load time on ExUnit time reports
77
* [IEx] Support `ls` with colored output

lib/elixir/lib/enum.ex

Lines changed: 0 additions & 226 deletions
Original file line numberDiff line numberDiff line change
@@ -349,125 +349,6 @@ defmodule Enum do
349349
end
350350
end
351351

352-
@doc """
353-
Returns true if the first collection is equal to the second, every element in
354-
both collections is iterated through, as soon as an element differs, it
355-
returns false.
356-
357-
## Examples
358-
359-
iex> Enum.equal?([], [])
360-
true
361-
iex> Enum.equal?(1 .. 3, [1, 2, 3])
362-
true
363-
iex> Enum.equal?(1 .. 3, [])
364-
false
365-
366-
"""
367-
@spec equal?(t, t) :: boolean
368-
def equal?(a, b) when is_list(a) and is_list(b) do
369-
a == b
370-
end
371-
372-
def equal?(a, b) when is_list(a) do
373-
equal?(b, a)
374-
end
375-
376-
def equal?(a, b) when is_list(b) do
377-
case I.iterator(a) do
378-
{ _, :stop } ->
379-
b == []
380-
381-
{ iterator, pointer } ->
382-
do_equal?(pointer, iterator, b)
383-
384-
list ->
385-
list == b
386-
end
387-
end
388-
389-
def equal?(a, b) do
390-
case { I.iterator(a), I.iterator(b) } do
391-
{ { a_iterator, a_pointer }, { b_iterator, b_pointer } } ->
392-
do_equal?(a_pointer, a_iterator, b_pointer, b_iterator)
393-
394-
{ { iterator, pointer }, b } ->
395-
do_equal?(pointer, iterator, b)
396-
397-
{ a, { iterator, pointer } } ->
398-
do_equal?(pointer, iterator, a)
399-
400-
{ a, b } ->
401-
a == b
402-
end
403-
end
404-
405-
@doc """
406-
Returns true if the first collection is equal to the second, every element in
407-
both collections is iterated through and compared with the passed function,
408-
as soon as an element differs, it returns false.
409-
410-
Please note that the first parameter passed to the compare function isn't
411-
ensured to be an element from the first collection.
412-
413-
## Examples
414-
415-
iex> Enum.equal?([], [], &1 === &2)
416-
true
417-
iex> Enum.equal?([1 .. 3], [[1, 2, 3]], Enum.equal?(&1, &2))
418-
true
419-
iex> Enum.equal?(1 .. 3, [1.0, 2.0, 3.0], &1 === &2)
420-
false
421-
iex> Enum.equal?(1 .. 3, [], &1 === &2)
422-
false
423-
424-
"""
425-
@spec equal?(t, t, ((term, term) -> boolean)) :: boolean
426-
def equal?([], [], _) do
427-
true
428-
end
429-
430-
def equal?(a, b, _) when is_list(a) and is_list(b) and a == [] or b == [] do
431-
false
432-
end
433-
434-
def equal?(a, b, fun) when is_list(a) and is_list(b) do
435-
do_equal_with?(fun, a, b)
436-
end
437-
438-
def equal?(a, b, fun) when is_list(a) do
439-
equal?(b, a, fun)
440-
end
441-
442-
def equal?(a, b, fun) when is_list(b) do
443-
case I.iterator(a) do
444-
{ _, :stop } ->
445-
b == []
446-
447-
{ iterator, pointer } ->
448-
do_equal_with?(fun, pointer, iterator, b)
449-
450-
list ->
451-
do_equal_with?(fun, list, b)
452-
end
453-
end
454-
455-
def equal?(a, b, fun) do
456-
case { I.iterator(a), I.iterator(b) } do
457-
{ { a_iterator, a_pointer }, { b_iterator, b_pointer } } ->
458-
do_equal_with?(fun, a_pointer, a_iterator, b_pointer, b_iterator)
459-
460-
{ { iterator, pointer }, b } ->
461-
do_equal_with?(fun, pointer, iterator, b)
462-
463-
{ a, { iterator, pointer } } ->
464-
do_equal_with?(fun, pointer, iterator, a)
465-
466-
{ a, b } ->
467-
do_equal_with?(fun, a, b)
468-
end
469-
end
470-
471352
@doc """
472353
Finds the element at the given index (zero-based).
473354
Returns `{ :ok, element }` if found, otherwise `:error`.
@@ -1424,113 +1305,6 @@ defmodule Enum do
14241305
[]
14251306
end
14261307

1427-
## equal?
1428-
1429-
# iterator : iterator
1430-
defp do_equal?(:stop, _, :stop, _) do
1431-
true
1432-
end
1433-
1434-
defp do_equal?(:stop, _, _, _) do
1435-
false
1436-
end
1437-
1438-
defp do_equal?(_, _, :stop, _) do
1439-
false
1440-
end
1441-
1442-
defp do_equal?({ a, _ }, _, { b, _ }, _) when a != b do
1443-
false
1444-
end
1445-
1446-
defp do_equal?({ _, a_next }, a_iterator, { _, b_next }, b_iterator) do
1447-
do_equal?(a_iterator.(a_next), a_iterator, b_iterator.(b_next), b_iterator)
1448-
end
1449-
1450-
# iterator : list
1451-
defp do_equal?({ _, _ }, _, []) do
1452-
false
1453-
end
1454-
1455-
defp do_equal?(:stop, _, []) do
1456-
true
1457-
end
1458-
1459-
defp do_equal?(:stop, _, _) do
1460-
false
1461-
end
1462-
1463-
defp do_equal?({ a, _ }, _, [b | _]) when a != b do
1464-
false
1465-
end
1466-
1467-
defp do_equal?({ _, a_next }, iterator, [_ | b_next]) do
1468-
do_equal?(iterator.(a_next), iterator, b_next)
1469-
end
1470-
1471-
# iterator : iterator
1472-
defp do_equal_with?(_, :stop, _, :stop, _) do
1473-
true
1474-
end
1475-
1476-
defp do_equal_with?(_, :stop, _, _, _) do
1477-
false
1478-
end
1479-
1480-
defp do_equal_with?(_, _, _, :stop, _) do
1481-
false
1482-
end
1483-
1484-
defp do_equal_with?(fun, { a, a_next }, a_iterator, { b, b_next }, b_iterator) do
1485-
if fun.(a, b) do
1486-
do_equal_with?(fun, a_iterator.(a_next), a_iterator, b_iterator.(b_next), b_iterator)
1487-
else
1488-
false
1489-
end
1490-
end
1491-
1492-
# iterator : list
1493-
defp do_equal_with?(_, :stop, _, []) do
1494-
true
1495-
end
1496-
1497-
defp do_equal_with?(_, :stop, _, _) do
1498-
false
1499-
end
1500-
1501-
defp do_equal_with?(_, { _, _ }, _, []) do
1502-
false
1503-
end
1504-
1505-
defp do_equal_with?(fun, { a, a_next }, iterator, [b | b_next]) do
1506-
if fun.(a, b) do
1507-
do_equal_with?(fun, iterator.(a_next), iterator, b_next)
1508-
else
1509-
false
1510-
end
1511-
end
1512-
1513-
# list : list
1514-
defp do_equal_with?(_, [], []) do
1515-
true
1516-
end
1517-
1518-
defp do_equal_with?(_, [], _) do
1519-
false
1520-
end
1521-
1522-
defp do_equal_with?(_, _, []) do
1523-
false
1524-
end
1525-
1526-
defp do_equal_with?(fun, [a | a_next], [b | b_next]) do
1527-
if fun.(a, b) do
1528-
do_equal_with?(fun, a_next, b_next)
1529-
else
1530-
false
1531-
end
1532-
end
1533-
15341308
## find
15351309

15361310
defp do_find([h|t], ifnone, fun) do

lib/elixir/test/elixir/enum_test.exs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -96,28 +96,6 @@ defmodule EnumTest.List do
9696
assert Enum.find_index([2,3,4], fn(x) -> rem(x, 2) == 1 end) == 1
9797
end
9898

99-
test :equal? do
100-
assert Enum.equal?([], [])
101-
refute Enum.equal?([], [1])
102-
103-
assert Enum.equal?(1 .. 3, [1, 2, 3])
104-
assert Enum.equal?(1 .. 3, 1 .. 3)
105-
refute Enum.equal?(1 .. 3, 1 .. 10)
106-
refute Enum.equal?(1 .. 3, [])
107-
assert Enum.equal?([1, 2, 3], 1 .. 3)
108-
assert Enum.equal?(1 .. 3, 1 .. 3)
109-
refute Enum.equal?(1 .. 3, 1 .. 10)
110-
refute Enum.equal?(1 .. 3, [])
111-
refute Enum.equal?([], 1 .. 3)
112-
113-
refute Enum.equal?(1 .. 3, [1.0, 2.0, 3.0], &1 === &2)
114-
refute Enum.equal?(1 .. 3, [], &1 === &2)
115-
refute Enum.equal?([], 1 .. 3, &1 === &2)
116-
refute Enum.equal?(1 .. 3, 1 .. 5, &1 == &2)
117-
assert Enum.equal?(1 .. 3, [1, 2, 3], &1 === &2)
118-
assert Enum.equal?([1, 2, 3], [1, 2, 3], &1 === &2)
119-
end
120-
12199
test :each do
122100
try do
123101
assert Enum.each([], fn(x) -> x end) == :ok

0 commit comments

Comments
 (0)