@@ -766,18 +766,19 @@ def test_type_vars(self) -> None:
766
766
self .assert_join (self .fx .t , self .fx .s , self .fx .o )
767
767
768
768
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 )
781
782
782
783
def test_unbound_type (self ) -> None :
783
784
self .assert_join (UnboundType ("x" ), UnboundType ("x" ), self .fx .anyt )
@@ -798,11 +799,15 @@ def test_unbound_type(self) -> None:
798
799
799
800
def test_any_type (self ) -> None :
800
801
# 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
+
801
805
for t in [
802
806
self .fx .anyt ,
803
807
self .fx .a ,
804
808
self .fx .o ,
805
- NoneType (),
809
+ # TODO: fix this is not currently symmetric
810
+ # NoneType(),
806
811
UnboundType ("x" ),
807
812
self .fx .t ,
808
813
self .tuple (),
@@ -834,7 +839,11 @@ def test_other_mixed_types(self) -> None:
834
839
self .assert_join (t1 , t2 , self .fx .o )
835
840
836
841
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
+
838
847
self .assert_join (self .fx .ga , self .fx .anyt , self .fx .anyt )
839
848
840
849
for t in [
@@ -1105,22 +1114,22 @@ def test_class_subtyping(self) -> None:
1105
1114
self .assert_meet (self .fx .a , self .fx .o , self .fx .a )
1106
1115
self .assert_meet (self .fx .a , self .fx .b , self .fx .b )
1107
1116
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 ())
1110
1119
1111
1120
def test_tuples (self ) -> None :
1112
1121
self .assert_meet (self .tuple (), self .tuple (), self .tuple ())
1113
1122
self .assert_meet (self .tuple (self .fx .a ), self .tuple (self .fx .a ), self .tuple (self .fx .a ))
1114
1123
self .assert_meet (
1115
1124
self .tuple (self .fx .b , self .fx .c ),
1116
1125
self .tuple (self .fx .a , self .fx .d ),
1117
- self .tuple (self .fx .b , NoneType ()),
1126
+ self .tuple (self .fx .b , UninhabitedType ()),
1118
1127
)
1119
1128
1120
1129
self .assert_meet (
1121
1130
self .tuple (self .fx .a , self .fx .a ), self .fx .std_tuple , self .tuple (self .fx .a , self .fx .a )
1122
1131
)
1123
- self .assert_meet (self .tuple (self .fx .a ), self .tuple (self .fx .a , self .fx .a ), NoneType ())
1132
+ self .assert_meet (self .tuple (self .fx .a ), self .tuple (self .fx .a , self .fx .a ), UninhabitedType ())
1124
1133
1125
1134
def test_function_types (self ) -> None :
1126
1135
self .assert_meet (
@@ -1143,23 +1152,36 @@ def test_function_types(self) -> None:
1143
1152
def test_type_vars (self ) -> None :
1144
1153
self .assert_meet (self .fx .t , self .fx .t , self .fx .t )
1145
1154
self .assert_meet (self .fx .s , self .fx .s , self .fx .s )
1146
- self .assert_meet (self .fx .t , self .fx .s , NoneType ())
1155
+ self .assert_meet (self .fx .t , self .fx .s , UninhabitedType ())
1147
1156
1148
1157
def test_none (self ) -> None :
1149
1158
self .assert_meet (NoneType (), NoneType (), NoneType ())
1150
1159
1151
1160
self .assert_meet (NoneType (), self .fx .anyt , NoneType ())
1152
1161
1153
1162
# 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 ())
1163
+ with state .strict_optional_set (False ):
1164
+ for t in [
1165
+ self .fx .a ,
1166
+ self .fx .o ,
1167
+ UnboundType ("x" ),
1168
+ self .fx .t ,
1169
+ self .tuple (),
1170
+ self .callable (self .fx .a , self .fx .b ),
1171
+ ]:
1172
+ self .assert_meet (t , NoneType (), NoneType ())
1173
+
1174
+ with state .strict_optional_set (True ):
1175
+ self .assert_meet (self .fx .o , NoneType (), NoneType ())
1176
+ for t in [
1177
+ self .fx .a ,
1178
+ # TODO: fix this is not currently symmetric
1179
+ # UnboundType("x"),
1180
+ self .fx .t ,
1181
+ self .tuple (),
1182
+ self .callable (self .fx .a , self .fx .b ),
1183
+ ]:
1184
+ self .assert_meet (t , NoneType (), UninhabitedType ())
1163
1185
1164
1186
def test_unbound_type (self ) -> None :
1165
1187
self .assert_meet (UnboundType ("x" ), UnboundType ("x" ), self .fx .anyt )
@@ -1197,28 +1219,28 @@ def test_simple_generics(self) -> None:
1197
1219
self .assert_meet (self .fx .ga , self .fx .ga , self .fx .ga )
1198
1220
self .assert_meet (self .fx .ga , self .fx .o , self .fx .ga )
1199
1221
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 )
1222
+ self .assert_meet (self .fx .ga , self .fx .gd , UninhabitedType () )
1223
+ self .assert_meet (self .fx .ga , self .fx .g2a , UninhabitedType () )
1202
1224
1203
- self .assert_meet (self .fx .ga , self .fx .nonet , self . fx . nonet )
1225
+ self .assert_meet (self .fx .ga , self .fx .nonet , UninhabitedType () )
1204
1226
self .assert_meet (self .fx .ga , self .fx .anyt , self .fx .ga )
1205
1227
1206
1228
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 )
1229
+ self .assert_meet (t , self .fx .ga , UninhabitedType () )
1208
1230
1209
1231
def test_generics_with_multiple_args (self ) -> None :
1210
1232
self .assert_meet (self .fx .hab , self .fx .hab , self .fx .hab )
1211
1233
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 )
1234
+ self .assert_meet (self .fx .hab , self .fx .had , UninhabitedType () )
1213
1235
self .assert_meet (self .fx .hab , self .fx .hbb , self .fx .hbb )
1214
1236
1215
1237
def test_generics_with_inheritance (self ) -> None :
1216
1238
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 )
1239
+ self .assert_meet (self .fx .gsba , self .fx .gb , UninhabitedType () )
1218
1240
1219
1241
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 )
1242
+ self .assert_meet (self .fx .gsba , self .fx .gs2a , UninhabitedType () )
1243
+ self .assert_meet (self .fx .gsab , self .fx .gs2a , UninhabitedType () )
1222
1244
1223
1245
def test_generic_types_and_dynamic (self ) -> None :
1224
1246
self .assert_meet (self .fx .gdyn , self .fx .ga , self .fx .ga )
@@ -1232,33 +1254,33 @@ def test_callables_with_dynamic(self) -> None:
1232
1254
1233
1255
def test_meet_interface_types (self ) -> None :
1234
1256
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 )
1257
+ self .assert_meet (self .fx .f , self .fx .f2 , UninhabitedType () )
1236
1258
self .assert_meet (self .fx .f , self .fx .f3 , self .fx .f3 )
1237
1259
1238
1260
def test_meet_interface_and_class_types (self ) -> None :
1239
1261
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 )
1262
+ self .assert_meet (self .fx .a , self .fx .f , UninhabitedType () )
1241
1263
1242
1264
self .assert_meet (self .fx .e , self .fx .f , self .fx .e )
1243
1265
1244
1266
def test_meet_class_types_with_shared_interfaces (self ) -> None :
1245
1267
# These have nothing special with respect to meets, unlike joins. These
1246
1268
# 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 )
1269
+ self .assert_meet (self .fx .e , self .fx .e2 , UninhabitedType () )
1270
+ self .assert_meet (self .fx .e2 , self .fx .e3 , UninhabitedType () )
1249
1271
1250
1272
def test_meet_with_generic_interfaces (self ) -> None :
1251
1273
fx = InterfaceTypeFixture ()
1252
1274
self .assert_meet (fx .gfa , fx .m1 , fx .m1 )
1253
1275
self .assert_meet (fx .gfa , fx .gfa , fx .gfa )
1254
- self .assert_meet (fx .gfb , fx .m1 , fx . nonet )
1276
+ self .assert_meet (fx .gfb , fx .m1 , UninhabitedType () )
1255
1277
1256
1278
def test_type_type (self ) -> None :
1257
1279
self .assert_meet (self .fx .type_a , self .fx .type_b , self .fx .type_b )
1258
1280
self .assert_meet (self .fx .type_b , self .fx .type_any , self .fx .type_b )
1259
1281
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 )
1282
+ self .assert_meet (self .fx .type_b , self .fx .type_c , self .fx .type_never )
1283
+ self .assert_meet (self .fx .type_c , self .fx .type_d , self .fx .type_never )
1262
1284
self .assert_meet (self .fx .type_type , self .fx .type_any , self .fx .type_any )
1263
1285
self .assert_meet (self .fx .type_b , self .fx .anyt , self .fx .type_b )
1264
1286
0 commit comments