aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_opcache.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_opcache.py')
-rw-r--r--Lib/test/test_opcache.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/Lib/test/test_opcache.py b/Lib/test/test_opcache.py
index e4224b843b2..946a4827fe7 100644
--- a/Lib/test/test_opcache.py
+++ b/Lib/test/test_opcache.py
@@ -1802,5 +1802,44 @@ class TestSpecializer(TestBase):
self.assert_specialized(load_const, "LOAD_CONST_MORTAL")
self.assert_no_opcode(load_const, "LOAD_CONST")
+ @cpython_only
+ @requires_specialization_ft
+ def test_for_iter(self):
+ L = list(range(10))
+ def for_iter_list():
+ for i in L:
+ self.assertIn(i, L)
+
+ for_iter_list()
+ self.assert_specialized(for_iter_list, "FOR_ITER_LIST")
+ self.assert_no_opcode(for_iter_list, "FOR_ITER")
+
+ t = tuple(range(10))
+ def for_iter_tuple():
+ for i in t:
+ self.assertIn(i, t)
+
+ for_iter_tuple()
+ self.assert_specialized(for_iter_tuple, "FOR_ITER_TUPLE")
+ self.assert_no_opcode(for_iter_tuple, "FOR_ITER")
+
+ r = range(10)
+ def for_iter_range():
+ for i in r:
+ self.assertIn(i, r)
+
+ for_iter_range()
+ self.assert_specialized(for_iter_range, "FOR_ITER_RANGE")
+ self.assert_no_opcode(for_iter_range, "FOR_ITER")
+
+ def for_iter_generator():
+ for i in (i for i in range(10)):
+ i + 1
+
+ for_iter_generator()
+ self.assert_specialized(for_iter_generator, "FOR_ITER_GEN")
+ self.assert_no_opcode(for_iter_generator, "FOR_ITER")
+
+
if __name__ == "__main__":
unittest.main()