@@ -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,24 @@ 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 (
1133
+ self .tuple (self .fx .a ), self .tuple (self .fx .a , self .fx .a ), UninhabitedType ()
1134
+ )
1124
1135
1125
1136
def test_function_types (self ) -> None :
1126
1137
self .assert_meet (
@@ -1143,23 +1154,36 @@ def test_function_types(self) -> None:
1143
1154
def test_type_vars (self ) -> None :
1144
1155
self .assert_meet (self .fx .t , self .fx .t , self .fx .t )
1145
1156
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 ())
1147
1158
1148
1159
def test_none (self ) -> None :
1149
1160
self .assert_meet (NoneType (), NoneType (), NoneType ())
1150
1161
1151
1162
self .assert_meet (NoneType (), self .fx .anyt , NoneType ())
1152
1163
1153
1164
# 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 ())
1163
1187
1164
1188
def test_unbound_type (self ) -> None :
1165
1189
self .assert_meet (UnboundType ("x" ), UnboundType ("x" ), self .fx .anyt )
@@ -1197,28 +1221,28 @@ def test_simple_generics(self) -> None:
1197
1221
self .assert_meet (self .fx .ga , self .fx .ga , self .fx .ga )
1198
1222
self .assert_meet (self .fx .ga , self .fx .o , self .fx .ga )
1199
1223
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 () )
1202
1226
1203
- self .assert_meet (self .fx .ga , self .fx .nonet , self . fx . nonet )
1227
+ self .assert_meet (self .fx .ga , self .fx .nonet , UninhabitedType () )
1204
1228
self .assert_meet (self .fx .ga , self .fx .anyt , self .fx .ga )
1205
1229
1206
1230
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 () )
1208
1232
1209
1233
def test_generics_with_multiple_args (self ) -> None :
1210
1234
self .assert_meet (self .fx .hab , self .fx .hab , self .fx .hab )
1211
1235
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 () )
1213
1237
self .assert_meet (self .fx .hab , self .fx .hbb , self .fx .hbb )
1214
1238
1215
1239
def test_generics_with_inheritance (self ) -> None :
1216
1240
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 () )
1218
1242
1219
1243
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 () )
1222
1246
1223
1247
def test_generic_types_and_dynamic (self ) -> None :
1224
1248
self .assert_meet (self .fx .gdyn , self .fx .ga , self .fx .ga )
@@ -1232,33 +1256,33 @@ def test_callables_with_dynamic(self) -> None:
1232
1256
1233
1257
def test_meet_interface_types (self ) -> None :
1234
1258
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 () )
1236
1260
self .assert_meet (self .fx .f , self .fx .f3 , self .fx .f3 )
1237
1261
1238
1262
def test_meet_interface_and_class_types (self ) -> None :
1239
1263
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 () )
1241
1265
1242
1266
self .assert_meet (self .fx .e , self .fx .f , self .fx .e )
1243
1267
1244
1268
def test_meet_class_types_with_shared_interfaces (self ) -> None :
1245
1269
# These have nothing special with respect to meets, unlike joins. These
1246
1270
# 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 () )
1249
1273
1250
1274
def test_meet_with_generic_interfaces (self ) -> None :
1251
1275
fx = InterfaceTypeFixture ()
1252
1276
self .assert_meet (fx .gfa , fx .m1 , fx .m1 )
1253
1277
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 () )
1255
1279
1256
1280
def test_type_type (self ) -> None :
1257
1281
self .assert_meet (self .fx .type_a , self .fx .type_b , self .fx .type_b )
1258
1282
self .assert_meet (self .fx .type_b , self .fx .type_any , self .fx .type_b )
1259
1283
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 )
1262
1286
self .assert_meet (self .fx .type_type , self .fx .type_any , self .fx .type_any )
1263
1287
self .assert_meet (self .fx .type_b , self .fx .anyt , self .fx .type_b )
1264
1288
0 commit comments