Skip to content

Commit d67cb96

Browse files
committed
Add performance regression test for open and closed maps
1 parent a37db60 commit d67cb96

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

lib/elixir/test/elixir/module/types/integration_test.exs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,7 @@ defmodule Module.Types.IntegrationTest do
928928
assert_no_warnings(files)
929929
end
930930

931-
test "redundant clause checking of mixed open and closed maps" do
931+
test "redundant clause checking of mixed open and closed maps (1)" do
932932
files = %{
933933
"mixed_open_closed_maps.ex" => """
934934
defmodule MixedOpenClosedMaps do
@@ -983,6 +983,59 @@ defmodule Module.Types.IntegrationTest do
983983
assert_no_warnings(files)
984984
end
985985

986+
test "redundant clause checking of mixed open and closed maps (2)" do
987+
files = %{
988+
"mixed_open_closed_maps.ex" => """
989+
defmodule MixedOpenClose.Roles do
990+
defstruct engineering_admin: false,
991+
admin: false,
992+
support: false,
993+
service_desk: false,
994+
sales: false
995+
end
996+
997+
defmodule MixedOpenClose.User do
998+
defstruct roles: %MixedOpenClose.Roles{}
999+
end
1000+
1001+
defmodule MixedOpenClose.Policy do
1002+
alias MixedOpenClose.{User, Roles}
1003+
1004+
@admin_actions [
1005+
:access,
1006+
:edit,
1007+
:manage_roles,
1008+
:global_search,
1009+
:get_users_with_roles,
1010+
:deactivate,
1011+
:reactivate,
1012+
:confirm_email,
1013+
:soft_delete
1014+
]
1015+
1016+
def can?(%User{roles: %Roles{support: true}}, _a, action)
1017+
when action in [:global_search, :confirm_email, :get_users_with_roles], do: true
1018+
1019+
def can?(%User{roles: %Roles{service_desk: true}}, _a, action)
1020+
when action in [:global_search, :confirm_email], do: true
1021+
1022+
def can?(%User{roles: %Roles{sales: true}}, _a, action)
1023+
when action in [:edit, :confirm_email], do: true
1024+
1025+
def can?(%User{roles: roles}, _a, action)
1026+
when action in @admin_actions and (roles.admin == true or roles.engineering_admin == true),
1027+
do: true
1028+
1029+
def can?(user, %URI{} = uri, action), do: can?(user, uri, action)
1030+
1031+
def can?(_a, _b, _c), do: false
1032+
end
1033+
"""
1034+
}
1035+
1036+
assert_no_warnings(files)
1037+
end
1038+
9861039
test "redundant clause checking of open maps with distinct keys" do
9871040
files = %{
9881041
"large_head.ex" => """

0 commit comments

Comments
 (0)