Skip to content

Commit 6c31a6c

Browse files
sabiwarajosevalim
authored andcommitted
Fix Enum tests for maps in OTP26 (#12405)
1 parent 7535c0c commit 6c31a6c

File tree

2 files changed

+64
-67
lines changed

2 files changed

+64
-67
lines changed

lib/elixir/lib/enum.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2276,13 +2276,13 @@ defmodule Enum do
22762276
iex> Enum.split_with([5, 4, 3, 2, 1, 0], fn x -> rem(x, 2) == 0 end)
22772277
{[4, 2, 0], [5, 3, 1]}
22782278
2279-
iex> Enum.split_with(%{a: 1, b: -2, c: 1, d: -3}, fn {_k, v} -> v < 0 end)
2279+
iex> Enum.split_with([a: 1, b: -2, c: 1, d: -3], fn {_k, v} -> v < 0 end)
22802280
{[b: -2, d: -3], [a: 1, c: 1]}
22812281
2282-
iex> Enum.split_with(%{a: 1, b: -2, c: 1, d: -3}, fn {_k, v} -> v > 50 end)
2282+
iex> Enum.split_with([a: 1, b: -2, c: 1, d: -3], fn {_k, v} -> v > 50 end)
22832283
{[], [a: 1, b: -2, c: 1, d: -3]}
22842284
2285-
iex> Enum.split_with(%{}, fn {_k, v} -> v > 50 end)
2285+
iex> Enum.split_with([], fn {_k, v} -> v > 50 end)
22862286
{[], []}
22872287
22882288
"""

lib/elixir/test/elixir/enum_test.exs

Lines changed: 61 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -735,11 +735,11 @@ defmodule EnumTest do
735735

736736
assert Enum.split_with(%{}, fn x -> rem(x, 2) == 0 end) == {[], []}
737737

738-
assert Enum.split_with(%{a: 1, b: 2, c: 3}, fn {_k, v} -> rem(v, 2) == 0 end) ==
739-
{[b: 2], [a: 1, c: 3]}
738+
assert Enum.split_with(%{a: 1, b: 2}, fn {_k, v} -> rem(v, 2) == 0 end) ==
739+
{[b: 2], [a: 1]}
740740

741741
assert Enum.split_with(%{b: 2, d: 4, f: 6}, fn {_k, v} -> rem(v, 2) == 0 end) ==
742-
{[b: 2, d: 4, f: 6], []}
742+
{Map.to_list(%{b: 2, d: 4, f: 6}), []}
743743
end
744744

745745
test "random/1" do
@@ -1503,23 +1503,22 @@ defmodule EnumTest do
15031503
assert result == [2, 4, 6, 8, 10]
15041504

15051505
# Maps
1506-
result = Enum.zip_with(%{a: 7, c: 9}, 3..4, fn {key, value}, b -> {key, value + b} end)
1507-
assert result == [a: 10, c: 13]
1506+
result = Enum.zip_with(%{a: 7}, 3..4, fn {key, value}, b -> {key, value + b} end)
1507+
assert result == [a: 10]
15081508

1509-
colour_1 = %{r: 176, g: 175, b: 255}
1510-
colour_2 = %{r: 12, g: 176, b: 176}
1511-
1512-
result = Enum.zip_with(colour_1, colour_2, fn {k, left}, {k, right} -> {k, left + right} end)
1513-
assert result == [b: 431, g: 351, r: 188]
1509+
result = Enum.zip_with(3..4, %{a: 7}, fn a, {key, value} -> {key, value + a} end)
1510+
assert result == [a: 10]
15141511
end
15151512

15161513
test "zip_with/2" do
15171514
zip_fun = fn items -> List.to_tuple(items) end
15181515
result = Enum.zip_with([[:a, :b], [1, 2], ["foo", "bar"]], zip_fun)
15191516
assert result == [{:a, 1, "foo"}, {:b, 2, "bar"}]
15201517

1521-
lots = Enum.zip_with([[:a, :b], [1, 2], ["foo", "bar"], %{a: :b, c: :d}], zip_fun)
1522-
assert lots == [{:a, 1, "foo", {:a, :b}}, {:b, 2, "bar", {:c, :d}}]
1518+
map = %{a: :b, c: :d}
1519+
[x1, x2] = Map.to_list(map)
1520+
lots = Enum.zip_with([[:a, :b], [1, 2], ["foo", "bar"], map], zip_fun)
1521+
assert lots == [{:a, 1, "foo", x1}, {:b, 2, "bar", x2}]
15231522

15241523
assert Enum.zip_with([[:a, :b], [1, 2, 3, 4], ["foo", "bar", "baz", "qux"]], zip_fun) ==
15251524
[{:a, 1, "foo"}, {:b, 2, "bar"}]
@@ -1556,21 +1555,11 @@ defmodule EnumTest do
15561555
assert result == [2, 4, 6, 8, 10]
15571556

15581557
# Maps
1559-
result = Enum.zip_with([%{a: 7, c: 9}, 3..4], fn [{key, value}, b] -> {key, value + b} end)
1560-
assert result == [a: 10, c: 13]
1561-
1562-
colour_1 = %{r: 176, g: 175, b: 255}
1563-
colour_2 = %{r: 12, g: 176, b: 176}
1564-
1565-
result =
1566-
Enum.zip_with([colour_1, colour_2], fn [{k, left}, {k, right}] -> {k, left + right} end)
1567-
1568-
assert result == [b: 431, g: 351, r: 188]
1558+
result = Enum.zip_with([%{a: 7}, 3..4], fn [{key, value}, b] -> {key, value + b} end)
1559+
assert result == [a: 10]
15691560

1570-
assert Enum.zip_with([%{a: :b, c: :d}, %{e: :f, g: :h}], & &1) == [
1571-
[a: :b, e: :f],
1572-
[c: :d, g: :h]
1573-
]
1561+
result = Enum.zip_with([%{a: 7}, 3..4], fn [{key, value}, b] -> {key, value + b} end)
1562+
assert result == [a: 10]
15741563
end
15751564
end
15761565

@@ -2396,16 +2385,17 @@ defmodule EnumTest.Map do
23962385

23972386
test "random/1" do
23982387
map = %{a: 1, b: 2, c: 3}
2388+
[x1, x2, x3] = Map.to_list(map)
23992389
seed1 = {1406, 407_414, 139_258}
24002390
seed2 = {1406, 421_106, 567_597}
24012391
:rand.seed(:exsss, seed1)
2402-
assert Enum.random(map) == {:c, 3}
2403-
assert Enum.random(map) == {:a, 1}
2404-
assert Enum.random(map) == {:b, 2}
2392+
assert Enum.random(map) == x3
2393+
assert Enum.random(map) == x1
2394+
assert Enum.random(map) == x2
24052395

24062396
:rand.seed(:exsss, seed2)
2407-
assert Enum.random(map) == {:c, 3}
2408-
assert Enum.random(map) == {:b, 2}
2397+
assert Enum.random(map) == x3
2398+
assert Enum.random(map) == x2
24092399
end
24102400

24112401
test "take_random/2" do
@@ -2418,35 +2408,37 @@ defmodule EnumTest.Map do
24182408
# set a fixed seed so the test can be deterministic
24192409
# please note the order of following assertions is important
24202410
map = %{a: 1, b: 2, c: 3}
2411+
[x1, x2, x3] = Map.to_list(map)
24212412
seed1 = {1406, 407_414, 139_258}
24222413
seed2 = {1406, 421_106, 567_597}
24232414
:rand.seed(:exsss, seed1)
2424-
assert Enum.take_random(map, 1) == [c: 3]
2415+
assert Enum.take_random(map, 1) == [x3]
24252416
:rand.seed(:exsss, seed1)
2426-
assert Enum.take_random(map, 2) == [c: 3, a: 1]
2417+
assert Enum.take_random(map, 2) == [x3, x1]
24272418
:rand.seed(:exsss, seed1)
2428-
assert Enum.take_random(map, 3) == [c: 3, a: 1, b: 2]
2419+
assert Enum.take_random(map, 3) == [x3, x1, x2]
24292420
:rand.seed(:exsss, seed1)
2430-
assert Enum.take_random(map, 4) == [c: 3, a: 1, b: 2]
2421+
assert Enum.take_random(map, 4) == [x3, x1, x2]
24312422
:rand.seed(:exsss, seed2)
2432-
assert Enum.take_random(map, 1) == [a: 1]
2423+
assert Enum.take_random(map, 1) == [x1]
24332424
:rand.seed(:exsss, seed2)
2434-
assert Enum.take_random(map, 2) == [a: 1, c: 3]
2425+
assert Enum.take_random(map, 2) == [x1, x3]
24352426
:rand.seed(:exsss, seed2)
2436-
assert Enum.take_random(map, 3) == [a: 1, c: 3, b: 2]
2427+
assert Enum.take_random(map, 3) == [x1, x3, x2]
24372428
:rand.seed(:exsss, seed2)
2438-
assert Enum.take_random(map, 4) == [a: 1, c: 3, b: 2]
2429+
assert Enum.take_random(map, 4) == [x1, x3, x2]
24392430
end
24402431

24412432
test "reverse/1" do
24422433
assert Enum.reverse(%{}) == []
24432434
assert Enum.reverse(MapSet.new()) == []
2444-
assert Enum.reverse(%{a: 1, b: 2, c: 3}) == [c: 3, b: 2, a: 1]
2435+
2436+
map = %{a: 1, b: 2, c: 3}
2437+
assert Enum.reverse(map) == Map.to_list(map) |> Enum.reverse()
24452438
end
24462439

24472440
test "reverse/2" do
2448-
assert Enum.reverse([a: 1, b: 2, c: 3, a: 1], %{x: 1, y: 2, z: 3}) ==
2449-
[a: 1, c: 3, b: 2, a: 1, x: 1, y: 2, z: 3]
2441+
assert Enum.reverse([a: 1, b: 2, c: 3, a: 1], %{x: 1}) == [a: 1, c: 3, b: 2, a: 1, x: 1]
24502442

24512443
assert Enum.reverse([], %{a: 1}) == [a: 1]
24522444
assert Enum.reverse([], %{}) == []
@@ -2456,44 +2448,49 @@ defmodule EnumTest.Map do
24562448

24572449
test "fetch/2" do
24582450
map = %{a: 1, b: 2, c: 3, d: 4, e: 5}
2459-
assert Enum.fetch(map, 0) == {:ok, {:a, 1}}
2460-
assert Enum.fetch(map, -2) == {:ok, {:d, 4}}
2451+
[x1, _x2, _x3, x4, x5] = Map.to_list(map)
2452+
assert Enum.fetch(map, 0) == {:ok, x1}
2453+
assert Enum.fetch(map, -2) == {:ok, x4}
24612454
assert Enum.fetch(map, -6) == :error
24622455
assert Enum.fetch(map, 5) == :error
24632456
assert Enum.fetch(%{}, 0) == :error
24642457

24652458
assert Stream.take(map, 3) |> Enum.fetch(3) == :error
2466-
assert Stream.take(map, 5) |> Enum.fetch(4) == {:ok, {:e, 5}}
2459+
assert Stream.take(map, 5) |> Enum.fetch(4) == {:ok, x5}
24672460
end
24682461

24692462
test "map_intersperse/3" do
24702463
assert Enum.map_intersperse(%{}, :a, & &1) == []
24712464
assert Enum.map_intersperse(%{foo: :bar}, :a, & &1) == [{:foo, :bar}]
24722465

2473-
assert Enum.map_intersperse(%{foo: :bar, baz: :bat}, :a, & &1) ==
2474-
[{:baz, :bat}, :a, {:foo, :bar}]
2466+
map = %{foo: :bar, baz: :bat}
2467+
[x1, x2] = Map.to_list(map)
2468+
2469+
assert Enum.map_intersperse(map, :a, & &1) == [x1, :a, x2]
24752470
end
24762471

24772472
test "slice/2" do
24782473
map = %{a: 1, b: 2, c: 3, d: 4, e: 5}
2479-
assert Enum.slice(map, 0..0) == [a: 1]
2480-
assert Enum.slice(map, 0..1) == [a: 1, b: 2]
2481-
assert Enum.slice(map, 0..2) == [a: 1, b: 2, c: 3]
2474+
[x1, x2, x3 | _] = Map.to_list(map)
2475+
assert Enum.slice(map, 0..0) == [x1]
2476+
assert Enum.slice(map, 0..1) == [x1, x2]
2477+
assert Enum.slice(map, 0..2) == [x1, x2, x3]
24822478
end
24832479

24842480
test "slice/3" do
24852481
map = %{a: 1, b: 2, c: 3, d: 4, e: 5}
2486-
assert Enum.slice(map, 1, 2) == [b: 2, c: 3]
2482+
[x1, x2, x3, x4, x5] = Map.to_list(map)
2483+
assert Enum.slice(map, 1, 2) == [x2, x3]
24872484
assert Enum.slice(map, 1, 0) == []
2488-
assert Enum.slice(map, 2, 5) == [c: 3, d: 4, e: 5]
2489-
assert Enum.slice(map, 2, 6) == [c: 3, d: 4, e: 5]
2485+
assert Enum.slice(map, 2, 5) == [x3, x4, x5]
2486+
assert Enum.slice(map, 2, 6) == [x3, x4, x5]
24902487
assert Enum.slice(map, 5, 5) == []
24912488
assert Enum.slice(map, 6, 5) == []
24922489
assert Enum.slice(map, 6, 0) == []
24932490
assert Enum.slice(map, -6, 0) == []
2494-
assert Enum.slice(map, -6, 5) == [a: 1, b: 2, c: 3, d: 4, e: 5]
2495-
assert Enum.slice(map, -2, 5) == [d: 4, e: 5]
2496-
assert Enum.slice(map, -3, 1) == [c: 3]
2491+
assert Enum.slice(map, -6, 5) == [x1, x2, x3, x4, x5]
2492+
assert Enum.slice(map, -2, 5) == [x4, x5]
2493+
assert Enum.slice(map, -3, 1) == [x3]
24972494

24982495
assert_raise FunctionClauseError, fn ->
24992496
Enum.slice(map, 0, -1)
@@ -2508,19 +2505,19 @@ defmodule EnumTest.Map do
25082505
end
25092506

25102507
assert Enum.slice(map, 0, 0) == []
2511-
assert Enum.slice(map, 0, 1) == [a: 1]
2512-
assert Enum.slice(map, 0, 2) == [a: 1, b: 2]
2513-
assert Enum.slice(map, 1, 2) == [b: 2, c: 3]
2508+
assert Enum.slice(map, 0, 1) == [x1]
2509+
assert Enum.slice(map, 0, 2) == [x1, x2]
2510+
assert Enum.slice(map, 1, 2) == [x2, x3]
25142511
assert Enum.slice(map, 1, 0) == []
2515-
assert Enum.slice(map, 2, 5) == [c: 3, d: 4, e: 5]
2516-
assert Enum.slice(map, 2, 6) == [c: 3, d: 4, e: 5]
2512+
assert Enum.slice(map, 2, 5) == [x3, x4, x5]
2513+
assert Enum.slice(map, 2, 6) == [x3, x4, x5]
25172514
assert Enum.slice(map, 5, 5) == []
25182515
assert Enum.slice(map, 6, 5) == []
25192516
assert Enum.slice(map, 6, 0) == []
25202517
assert Enum.slice(map, -6, 0) == []
2521-
assert Enum.slice(map, -6, 5) == [a: 1, b: 2, c: 3, d: 4, e: 5]
2522-
assert Enum.slice(map, -2, 5) == [d: 4, e: 5]
2523-
assert Enum.slice(map, -3, 1) == [c: 3]
2518+
assert Enum.slice(map, -6, 5) == [x1, x2, x3, x4, x5]
2519+
assert Enum.slice(map, -2, 5) == [x4, x5]
2520+
assert Enum.slice(map, -3, 1) == [x3]
25242521

25252522
assert_raise FunctionClauseError, fn ->
25262523
Enum.slice(map, 0, -1)

0 commit comments

Comments
 (0)