@@ -114,6 +114,14 @@ defmodule Module.Types.DescrTest do
114114 )
115115 end
116116
117+ test "optional" do
118+ # Test that union preserves optional properties
119+ t = opt_union ( term ( ) , dynamic ( not_set ( ) ) )
120+ assert subtype? ( term ( ) , t )
121+ assert subtype? ( dynamic ( ) , t )
122+ assert subtype? ( dynamic ( integer ( ) ) , t )
123+ end
124+
117125 test "tuple" do
118126 assert equal? ( opt_union ( tuple ( ) , tuple ( ) ) , tuple ( ) )
119127
@@ -622,6 +630,14 @@ defmodule Module.Types.DescrTest do
622630 assert empty? ( opt_difference ( none ( ) , dynamic ( ) ) )
623631 assert empty? ( opt_difference ( dynamic ( integer ( ) ) , integer ( ) ) )
624632 end
633+
634+ test "optional" do
635+ # Test that difference preserves optional properties
636+ x = if_set ( dynamic ( integer ( ) ) )
637+ term_map = opt_union ( integer ( ) , opt_difference ( term ( ) , integer ( ) ) )
638+ assert equal? ( term_map , term ( ) )
639+ assert equal? ( opt_difference ( x , term ( ) ) , opt_difference ( x , term_map ) )
640+ end
625641
626642 test "tuple" do
627643 assert empty? ( opt_difference ( open_tuple ( [ atom ( ) ] ) , open_tuple ( [ term ( ) ] ) ) )
@@ -1033,12 +1049,6 @@ defmodule Module.Types.DescrTest do
10331049 refute subtype? ( if_set ( term ( ) ) , term ( ) )
10341050 assert subtype? ( if_set ( term ( ) ) , if_set ( term ( ) ) )
10351051 refute subtype? ( if_set ( term ( ) ) , if_set ( dynamic ( term ( ) ) ) )
1036-
1037- # Test that union+dynamic optimizations preserves properties
1038- t = opt_union ( term ( ) , dynamic ( not_set ( ) ) )
1039- assert subtype? ( term ( ) , t )
1040- assert subtype? ( dynamic ( ) , t )
1041- assert subtype? ( dynamic ( integer ( ) ) , t )
10421052 end
10431053
10441054 test "list" do
0 commit comments