|
| 1 | +from copy import deepcopy |
| 2 | + |
1 | 3 | from src.ir import types as tp, kotlin_types as kt
|
2 | 4 | from src.ir import ast, type_utils as tutils, context as ctx
|
3 | 5 |
|
@@ -1301,3 +1303,55 @@ def test_build_type_variable_dependencies():
|
1301 | 1303 | baz.name: ["Baz.T1"],
|
1302 | 1304 | "Foo.T1": ["Bar.T3"]
|
1303 | 1305 | }
|
| 1306 | + |
| 1307 | + |
| 1308 | +def test_update_type_var_bound_rec(): |
| 1309 | + type_param1 = tp.TypeParameter("T1") |
| 1310 | + type_param2 = tp.TypeParameter("T2", bound=type_param1) |
| 1311 | + type_param3 = tp.TypeParameter("T3", bound=type_param2) |
| 1312 | + type_param4 = tp.TypeParameter("T4") |
| 1313 | + type_var_map = { |
| 1314 | + type_param1: kt.String |
| 1315 | + } |
| 1316 | + indexes = { |
| 1317 | + type_param1: 0, |
| 1318 | + type_param2: 1, |
| 1319 | + type_param3: 2, |
| 1320 | + type_param4: 3, |
| 1321 | + } |
| 1322 | + targs = [kt.String] |
| 1323 | + old_type_var_map = deepcopy(type_var_map) |
| 1324 | + old_targs = deepcopy(targs) |
| 1325 | + tutils.update_type_var_bound_rec(tp.Classifier("Foo"), kt.String, |
| 1326 | + targs, indexes, type_var_map) |
| 1327 | + assert old_targs == targs |
| 1328 | + assert old_type_var_map == type_var_map |
| 1329 | + |
| 1330 | + tutils.update_type_var_bound_rec(type_param4, kt.Integer, |
| 1331 | + targs, indexes, type_var_map) |
| 1332 | + assert old_targs == targs |
| 1333 | + assert old_type_var_map == type_var_map |
| 1334 | + |
| 1335 | + |
| 1336 | + tutils.update_type_var_bound_rec(type_param2, kt.Integer, |
| 1337 | + targs, indexes, type_var_map) |
| 1338 | + assert type_var_map == {type_param1: kt.Integer} |
| 1339 | + assert targs == [kt.Integer] |
| 1340 | + |
| 1341 | + type_var_map = deepcopy(old_type_var_map) |
| 1342 | + type_var_map[type_param2] = kt.Boolean |
| 1343 | + targs = deepcopy(old_targs) |
| 1344 | + targs.append(kt.Boolean) |
| 1345 | + |
| 1346 | + tutils.update_type_var_bound_rec(type_param3, kt.Integer, |
| 1347 | + targs, indexes, type_var_map) |
| 1348 | + assert type_var_map == {type_param1: kt.Integer, type_param2: kt.Integer} |
| 1349 | + assert targs == [kt.Integer, kt.Integer] |
| 1350 | + |
| 1351 | + type_var_map[type_param1] = kt.Number |
| 1352 | + type_var_map[type_param2] = kt.Number |
| 1353 | + targs = [kt.Number, kt.Number] |
| 1354 | + tutils.update_type_var_bound_rec(type_param3, kt.Integer, |
| 1355 | + targs, indexes, type_var_map) |
| 1356 | + assert type_var_map == {type_param1: kt.Number, type_param2: kt.Number} |
| 1357 | + assert targs == [kt.Number, kt.Number] |
0 commit comments