Skip to content

Commit 331a70a

Browse files
howleysvfishcakez
authored andcommitted
Return valid MapSet when union-ing a legacy MapSet (#6534)
1 parent 4329429 commit 331a70a

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

lib/elixir/lib/map_set.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ defmodule MapSet do
353353
%{map_set | map: Map.merge(map1, map2)}
354354
end
355355
def union(%MapSet{map: map1}, %MapSet{map: map2}) do
356-
new_from_list(Map.keys(map1) ++ Map.keys(map2), [])
356+
map = new_from_list(Map.keys(map1) ++ Map.keys(map2), [])
357+
%MapSet{map: map}
357358
end
358359

359360
defp order_by_size(map1, map2) when map_size(map1) > map_size(map2), do: {map2, map1}

lib/elixir/test/elixir/map_set_test.exs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,38 @@ defmodule MapSetTest do
108108
list = MapSet.to_list(MapSet.new(5..120))
109109
assert Enum.sort(list) == Enum.to_list(5..120)
110110
end
111+
112+
test "MapSet v1 compatibility" do
113+
result = 1..5 |> map_set_v1() |> MapSet.new()
114+
assert MapSet.equal?(result, MapSet.new(1..5))
115+
116+
result = MapSet.put(map_set_v1(1..5), 6)
117+
assert MapSet.equal?(result, MapSet.new(1..6))
118+
119+
result = MapSet.union(map_set_v1(1..5), MapSet.new(6..10))
120+
assert MapSet.equal?(result, MapSet.new(1..10))
121+
122+
result = MapSet.intersection(map_set_v1(1..10), MapSet.new(6..15))
123+
assert MapSet.equal?(result, MapSet.new(6..10))
124+
125+
result = MapSet.difference(map_set_v1(1..10), MapSet.new(6..50))
126+
assert MapSet.equal?(result, MapSet.new(1..5))
127+
128+
result = MapSet.delete(map_set_v1(1..10), 1)
129+
assert MapSet.equal?(result, MapSet.new(2..10))
130+
131+
assert MapSet.size(map_set_v1(1..5)) == 5
132+
assert MapSet.to_list(map_set_v1(1..5)) == Enum.to_list(1..5)
133+
134+
assert MapSet.disjoint?(map_set_v1(1..5), MapSet.new(10..15))
135+
refute MapSet.disjoint?(map_set_v1(1..5), MapSet.new(5..10))
136+
137+
assert MapSet.subset?(map_set_v1(3..7), MapSet.new(1..10))
138+
refute MapSet.subset?(map_set_v1(7..12), MapSet.new(1..10))
139+
end
140+
141+
defp map_set_v1(enumerable) do
142+
map = Map.new(1..5, &{&1, true})
143+
%{__struct__: MapSet, map: map}
144+
end
111145
end

0 commit comments

Comments
 (0)