@@ -766,18 +766,19 @@ def test_type_vars(self) -> None:
766766 self .assert_join (self .fx .t , self .fx .s , self .fx .o )
767767
768768 def test_none (self ) -> None :
769- # Any type t joined with None results in t.
770- for t in [
771- NoneType (),
772- self .fx .a ,
773- self .fx .o ,
774- UnboundType ("x" ),
775- self .fx .t ,
776- self .tuple (),
777- self .callable (self .fx .a , self .fx .b ),
778- self .fx .anyt ,
779- ]:
780- self .assert_join (t , NoneType (), t )
769+ with state .strict_optional_set (False ):
770+ # Any type t joined with None results in t.
771+ for t in [
772+ NoneType (),
773+ self .fx .a ,
774+ self .fx .o ,
775+ UnboundType ("x" ),
776+ self .fx .t ,
777+ self .tuple (),
778+ self .callable (self .fx .a , self .fx .b ),
779+ self .fx .anyt ,
780+ ]:
781+ self .assert_join (t , NoneType (), t )
781782
782783 def test_unbound_type (self ) -> None :
783784 self .assert_join (UnboundType ("x" ), UnboundType ("x" ), self .fx .anyt )
@@ -798,11 +799,15 @@ def test_unbound_type(self) -> None:
798799
799800 def test_any_type (self ) -> None :
800801 # Join against 'Any' type always results in 'Any'.
802+ with state .strict_optional_set (False ):
803+ self .assert_join (NoneType (), self .fx .anyt , self .fx .anyt )
804+
801805 for t in [
802806 self .fx .anyt ,
803807 self .fx .a ,
804808 self .fx .o ,
805- NoneType (),
809+ # TODO: fix this is not currently symmetric
810+ # NoneType(),
806811 UnboundType ("x" ),
807812 self .fx .t ,
808813 self .tuple (),
@@ -834,7 +839,11 @@ def test_other_mixed_types(self) -> None:
834839 self .assert_join (t1 , t2 , self .fx .o )
835840
836841 def test_simple_generics (self ) -> None :
837- self .assert_join (self .fx .ga , self .fx .nonet , self .fx .ga )
842+ with state .strict_optional_set (False ):
843+ self .assert_join (self .fx .ga , self .fx .nonet , self .fx .ga )
844+ with state .strict_optional_set (True ):
845+ self .assert_join (self .fx .ga , self .fx .nonet , UnionType ([self .fx .ga , NoneType ()]))
846+
838847 self .assert_join (self .fx .ga , self .fx .anyt , self .fx .anyt )
839848
840849 for t in [
@@ -1105,22 +1114,24 @@ def test_class_subtyping(self) -> None:
11051114 self .assert_meet (self .fx .a , self .fx .o , self .fx .a )
11061115 self .assert_meet (self .fx .a , self .fx .b , self .fx .b )
11071116 self .assert_meet (self .fx .b , self .fx .o , self .fx .b )
1108- self .assert_meet (self .fx .a , self .fx .d , NoneType ())
1109- self .assert_meet (self .fx .b , self .fx .c , NoneType ())
1117+ self .assert_meet (self .fx .a , self .fx .d , UninhabitedType ())
1118+ self .assert_meet (self .fx .b , self .fx .c , UninhabitedType ())
11101119
11111120 def test_tuples (self ) -> None :
11121121 self .assert_meet (self .tuple (), self .tuple (), self .tuple ())
11131122 self .assert_meet (self .tuple (self .fx .a ), self .tuple (self .fx .a ), self .tuple (self .fx .a ))
11141123 self .assert_meet (
11151124 self .tuple (self .fx .b , self .fx .c ),
11161125 self .tuple (self .fx .a , self .fx .d ),
1117- self .tuple (self .fx .b , NoneType ()),
1126+ self .tuple (self .fx .b , UninhabitedType ()),
11181127 )
11191128
11201129 self .assert_meet (
11211130 self .tuple (self .fx .a , self .fx .a ), self .fx .std_tuple , self .tuple (self .fx .a , self .fx .a )
11221131 )
1123- self .assert_meet (self .tuple (self .fx .a ), self .tuple (self .fx .a , self .fx .a ), NoneType ())
1132+ self .assert_meet (
1133+ self .tuple (self .fx .a ), self .tuple (self .fx .a , self .fx .a ), UninhabitedType ()
1134+ )
11241135
11251136 def test_function_types (self ) -> None :
11261137 self .assert_meet (
@@ -1143,23 +1154,36 @@ def test_function_types(self) -> None:
11431154 def test_type_vars (self ) -> None :
11441155 self .assert_meet (self .fx .t , self .fx .t , self .fx .t )
11451156 self .assert_meet (self .fx .s , self .fx .s , self .fx .s )
1146- self .assert_meet (self .fx .t , self .fx .s , NoneType ())
1157+ self .assert_meet (self .fx .t , self .fx .s , UninhabitedType ())
11471158
11481159 def test_none (self ) -> None :
11491160 self .assert_meet (NoneType (), NoneType (), NoneType ())
11501161
11511162 self .assert_meet (NoneType (), self .fx .anyt , NoneType ())
11521163
11531164 # Any type t joined with None results in None, unless t is Any.
1154- for t in [
1155- self .fx .a ,
1156- self .fx .o ,
1157- UnboundType ("x" ),
1158- self .fx .t ,
1159- self .tuple (),
1160- self .callable (self .fx .a , self .fx .b ),
1161- ]:
1162- self .assert_meet (t , NoneType (), NoneType ())
1165+ with state .strict_optional_set (False ):
1166+ for t in [
1167+ self .fx .a ,
1168+ self .fx .o ,
1169+ UnboundType ("x" ),
1170+ self .fx .t ,
1171+ self .tuple (),
1172+ self .callable (self .fx .a , self .fx .b ),
1173+ ]:
1174+ self .assert_meet (t , NoneType (), NoneType ())
1175+
1176+ with state .strict_optional_set (True ):
1177+ self .assert_meet (self .fx .o , NoneType (), NoneType ())
1178+ for t in [
1179+ self .fx .a ,
1180+ # TODO: fix this is not currently symmetric
1181+ # UnboundType("x"),
1182+ self .fx .t ,
1183+ self .tuple (),
1184+ self .callable (self .fx .a , self .fx .b ),
1185+ ]:
1186+ self .assert_meet (t , NoneType (), UninhabitedType ())
11631187
11641188 def test_unbound_type (self ) -> None :
11651189 self .assert_meet (UnboundType ("x" ), UnboundType ("x" ), self .fx .anyt )
@@ -1197,28 +1221,28 @@ def test_simple_generics(self) -> None:
11971221 self .assert_meet (self .fx .ga , self .fx .ga , self .fx .ga )
11981222 self .assert_meet (self .fx .ga , self .fx .o , self .fx .ga )
11991223 self .assert_meet (self .fx .ga , self .fx .gb , self .fx .gb )
1200- self .assert_meet (self .fx .ga , self .fx .gd , self . fx . nonet )
1201- self .assert_meet (self .fx .ga , self .fx .g2a , self . fx . nonet )
1224+ self .assert_meet (self .fx .ga , self .fx .gd , UninhabitedType () )
1225+ self .assert_meet (self .fx .ga , self .fx .g2a , UninhabitedType () )
12021226
1203- self .assert_meet (self .fx .ga , self .fx .nonet , self . fx . nonet )
1227+ self .assert_meet (self .fx .ga , self .fx .nonet , UninhabitedType () )
12041228 self .assert_meet (self .fx .ga , self .fx .anyt , self .fx .ga )
12051229
12061230 for t in [self .fx .a , self .fx .t , self .tuple (), self .callable (self .fx .a , self .fx .b )]:
1207- self .assert_meet (t , self .fx .ga , self . fx . nonet )
1231+ self .assert_meet (t , self .fx .ga , UninhabitedType () )
12081232
12091233 def test_generics_with_multiple_args (self ) -> None :
12101234 self .assert_meet (self .fx .hab , self .fx .hab , self .fx .hab )
12111235 self .assert_meet (self .fx .hab , self .fx .haa , self .fx .hab )
1212- self .assert_meet (self .fx .hab , self .fx .had , self . fx . nonet )
1236+ self .assert_meet (self .fx .hab , self .fx .had , UninhabitedType () )
12131237 self .assert_meet (self .fx .hab , self .fx .hbb , self .fx .hbb )
12141238
12151239 def test_generics_with_inheritance (self ) -> None :
12161240 self .assert_meet (self .fx .gsab , self .fx .gb , self .fx .gsab )
1217- self .assert_meet (self .fx .gsba , self .fx .gb , self . fx . nonet )
1241+ self .assert_meet (self .fx .gsba , self .fx .gb , UninhabitedType () )
12181242
12191243 def test_generics_with_inheritance_and_shared_supertype (self ) -> None :
1220- self .assert_meet (self .fx .gsba , self .fx .gs2a , self . fx . nonet )
1221- self .assert_meet (self .fx .gsab , self .fx .gs2a , self . fx . nonet )
1244+ self .assert_meet (self .fx .gsba , self .fx .gs2a , UninhabitedType () )
1245+ self .assert_meet (self .fx .gsab , self .fx .gs2a , UninhabitedType () )
12221246
12231247 def test_generic_types_and_dynamic (self ) -> None :
12241248 self .assert_meet (self .fx .gdyn , self .fx .ga , self .fx .ga )
@@ -1232,33 +1256,33 @@ def test_callables_with_dynamic(self) -> None:
12321256
12331257 def test_meet_interface_types (self ) -> None :
12341258 self .assert_meet (self .fx .f , self .fx .f , self .fx .f )
1235- self .assert_meet (self .fx .f , self .fx .f2 , self . fx . nonet )
1259+ self .assert_meet (self .fx .f , self .fx .f2 , UninhabitedType () )
12361260 self .assert_meet (self .fx .f , self .fx .f3 , self .fx .f3 )
12371261
12381262 def test_meet_interface_and_class_types (self ) -> None :
12391263 self .assert_meet (self .fx .o , self .fx .f , self .fx .f )
1240- self .assert_meet (self .fx .a , self .fx .f , self . fx . nonet )
1264+ self .assert_meet (self .fx .a , self .fx .f , UninhabitedType () )
12411265
12421266 self .assert_meet (self .fx .e , self .fx .f , self .fx .e )
12431267
12441268 def test_meet_class_types_with_shared_interfaces (self ) -> None :
12451269 # These have nothing special with respect to meets, unlike joins. These
12461270 # are for completeness only.
1247- self .assert_meet (self .fx .e , self .fx .e2 , self . fx . nonet )
1248- self .assert_meet (self .fx .e2 , self .fx .e3 , self . fx . nonet )
1271+ self .assert_meet (self .fx .e , self .fx .e2 , UninhabitedType () )
1272+ self .assert_meet (self .fx .e2 , self .fx .e3 , UninhabitedType () )
12491273
12501274 def test_meet_with_generic_interfaces (self ) -> None :
12511275 fx = InterfaceTypeFixture ()
12521276 self .assert_meet (fx .gfa , fx .m1 , fx .m1 )
12531277 self .assert_meet (fx .gfa , fx .gfa , fx .gfa )
1254- self .assert_meet (fx .gfb , fx .m1 , fx . nonet )
1278+ self .assert_meet (fx .gfb , fx .m1 , UninhabitedType () )
12551279
12561280 def test_type_type (self ) -> None :
12571281 self .assert_meet (self .fx .type_a , self .fx .type_b , self .fx .type_b )
12581282 self .assert_meet (self .fx .type_b , self .fx .type_any , self .fx .type_b )
12591283 self .assert_meet (self .fx .type_b , self .fx .type_type , self .fx .type_b )
1260- self .assert_meet (self .fx .type_b , self .fx .type_c , self .fx .nonet )
1261- self .assert_meet (self .fx .type_c , self .fx .type_d , self .fx .nonet )
1284+ self .assert_meet (self .fx .type_b , self .fx .type_c , self .fx .type_never )
1285+ self .assert_meet (self .fx .type_c , self .fx .type_d , self .fx .type_never )
12621286 self .assert_meet (self .fx .type_type , self .fx .type_any , self .fx .type_any )
12631287 self .assert_meet (self .fx .type_b , self .fx .anyt , self .fx .type_b )
12641288
0 commit comments