Skip to content

Commit ff314ba

Browse files
committed
add peepholer tests
1 parent 6f9e00a commit ff314ba

File tree

1 file changed

+66
-1
lines changed

1 file changed

+66
-1
lines changed

Lib/test/test_peepholer.py

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def test_folding_of_tuples_of_constants(self):
154154
for line, elem in (
155155
('a = 1,2,3', (1, 2, 3)),
156156
('("a","b","c")', ('a', 'b', 'c')),
157-
('a,b,c = 1,2,3', (1, 2, 3)),
157+
('a,b,c,d = 1,2,3,4', (1, 2, 3, 4)),
158158
('(None, 1, None)', (None, 1, None)),
159159
('((1, 2), 3, 4)', ((1, 2), 3, 4)),
160160
):
@@ -1349,6 +1349,71 @@ def test_fold_tuple_of_constants(self):
13491349
]
13501350
self.cfg_optimization_test(same, same, consts=[])
13511351

1352+
def test_fold_constant_intrinsic_list_to_tuple(self):
1353+
INTRINSIC_LIST_TO_TUPLE = 6
1354+
1355+
# long tuple
1356+
consts = 1000
1357+
before = (
1358+
[('BUILD_LIST', 0, 0)] +
1359+
[('LOAD_CONST', 0, 0), ('LIST_APPEND', 1, 0)] * consts +
1360+
[('CALL_INTRINSIC_1', INTRINSIC_LIST_TO_TUPLE, 0), ('RETURN_VALUE', None, 0)]
1361+
)
1362+
after = [
1363+
('LOAD_CONST', 1, 0),
1364+
('RETURN_VALUE', None, 0)
1365+
]
1366+
result_const = tuple(["test"] * consts)
1367+
self.cfg_optimization_test(before, after, consts=["test"], expected_consts=["test", result_const])
1368+
1369+
# empty list
1370+
before = [
1371+
('BUILD_LIST', 0, 0),
1372+
('CALL_INTRINSIC_1', INTRINSIC_LIST_TO_TUPLE, 0),
1373+
('RETURN_VALUE', None, 0)
1374+
]
1375+
after = [
1376+
('LOAD_CONST', 0, 0),
1377+
('RETURN_VALUE', None, 0)
1378+
]
1379+
self.cfg_optimization_test(before, after, consts=[], expected_consts=[()])
1380+
1381+
# multiple BUILD_LIST 0: ([], 1, [], 2)
1382+
same = [
1383+
('BUILD_LIST', 0, 0),
1384+
('BUILD_LIST', 0, 0),
1385+
('LIST_APPEND', 1, 0),
1386+
('LOAD_SMALL_INT', 1, 0),
1387+
('LIST_APPEND', 1, 0),
1388+
('BUILD_LIST', 0, 0),
1389+
('LIST_APPEND', 1, 0),
1390+
('LOAD_SMALL_INT', 2, 0),
1391+
('LIST_APPEND', 1, 0),
1392+
('CALL_INTRINSIC_1', INTRINSIC_LIST_TO_TUPLE, 0),
1393+
('RETURN_VALUE', None, 0)
1394+
]
1395+
self.cfg_optimization_test(same, same, consts=[])
1396+
1397+
# nested folding: (1, 1+1, 3)
1398+
before = [
1399+
('BUILD_LIST', 0, 0),
1400+
('LOAD_SMALL_INT', 1, 0),
1401+
('LIST_APPEND', 1, 0),
1402+
('LOAD_SMALL_INT', 1, 0),
1403+
('LOAD_SMALL_INT', 1, 0),
1404+
('BINARY_OP', get_binop_argval('NB_ADD'), 0),
1405+
('LIST_APPEND', 1, 0),
1406+
('LOAD_SMALL_INT', 3, 0),
1407+
('LIST_APPEND', 1, 0),
1408+
('CALL_INTRINSIC_1', INTRINSIC_LIST_TO_TUPLE, 0),
1409+
('RETURN_VALUE', None, 0)
1410+
]
1411+
after = [
1412+
('LOAD_CONST', 0, 0),
1413+
('RETURN_VALUE', None, 0)
1414+
]
1415+
self.cfg_optimization_test(before, after, consts=[], expected_consts=[(1, 2, 3)])
1416+
13521417
def test_optimize_if_const_list(self):
13531418
before = [
13541419
('NOP', None, 0),

0 commit comments

Comments
 (0)