]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #26492: Added additional tests for exhausted iterators of mutable sequences.
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 30 Mar 2016 18:02:00 +0000 (21:02 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 30 Mar 2016 18:02:00 +0000 (21:02 +0300)
Lib/test/list_tests.py
Lib/test/test_bytes.py
Lib/test/test_iter.py

index b8d6d6bda6782617e1df66288cad0a331dc9a958..ed606db0d11dbcc39e8578a8799f6d84f0c21d2f 100644 (file)
@@ -532,3 +532,14 @@ class CommonTest(seq_tests.CommonTest):
             def __iter__(self):
                 raise KeyboardInterrupt
         self.assertRaises(KeyboardInterrupt, list, F())
+
+    def test_exhausted_iterator(self):
+        a = self.type2test([1, 2, 3])
+        exhit = iter(a)
+        empit = iter(a)
+        for x in exhit:  # exhaust the iterator
+            next(empit)  # not exhausted
+        a.append(9)
+        self.assertEqual(list(exhit), [])
+        self.assertEqual(list(empit), [9])
+        self.assertEqual(a, self.type2test([1, 2, 3, 9]))
index 82ad451db014f058485bdf88c4930bd0e7fe31d0..bdcb88ac6ed9d1fd980b325561ebfce14ae7dbac 100644 (file)
@@ -900,6 +900,16 @@ class ByteArrayTest(BaseBytesTest):
         # PyByteArray_AS_STRING() C macro.
         self.assertRaises(ValueError, int, bytearray(b''))
 
+    def test_exhausted_iterator(self):
+        a = self.type2test([1, 2, 3])
+        exhit = iter(a)
+        empit = iter(a)
+        for x in exhit:  # exhaust the iterator
+            next(empit)  # not exhausted
+        a.append(9)
+        self.assertEqual(list(exhit), [])
+        self.assertEqual(list(empit), [9])
+        self.assertEqual(a, self.type2test([1, 2, 3, 9]))
 
 class AssortedBytesTest(unittest.TestCase):
     #
index 4495fa1ad726a20a6de3d11dde4d68dfbe98973b..cc20865df18317f94ef8b116f475822478bbcb82 100644 (file)
@@ -122,6 +122,17 @@ class TestCase(unittest.TestCase):
     def test_seq_class_iter(self):
         self.check_iterator(iter(SequenceClass(10)), range(10))
 
+    def test_mutating_seq_class_exhausted_iter(self):
+        a = SequenceClass(5)
+        exhit = iter(a)
+        empit = iter(a)
+        for x in exhit:  # exhaust the iterator
+            next(empit)  # not exhausted
+        a.n = 7
+        self.assertEqual(list(exhit), [])
+        self.assertEqual(list(empit), [5, 6])
+        self.assertEqual(list(a), [0, 1, 2, 3, 4, 5, 6])
+
     # Test a new_style class with __iter__ but no next() method
     def test_new_style_iter_class(self):
         class IterClass(object):