mirror of
https://github.com/python/cpython.git
synced 2025-07-19 17:25:54 +00:00
Issue #26015: Added new tests for pickling iterators of mutable sequences.
This commit is contained in:
commit
de128e19e2
6 changed files with 212 additions and 46 deletions
|
@ -640,18 +640,45 @@ class TestBasic(unittest.TestCase):
|
|||
self.assertEqual(e.maxlen, d.maxlen)
|
||||
|
||||
def test_iterator_pickle(self):
|
||||
data = deque(range(200))
|
||||
orig = deque(range(200))
|
||||
data = [i*1.01 for i in orig]
|
||||
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||
it = itorg = iter(data)
|
||||
d = pickle.dumps(it, proto)
|
||||
it = pickle.loads(d)
|
||||
self.assertEqual(type(itorg), type(it))
|
||||
self.assertEqual(list(it), list(data))
|
||||
# initial iterator
|
||||
itorg = iter(orig)
|
||||
dump = pickle.dumps((itorg, orig), proto)
|
||||
it, d = pickle.loads(dump)
|
||||
for i, x in enumerate(data):
|
||||
d[i] = x
|
||||
self.assertEqual(type(it), type(itorg))
|
||||
self.assertEqual(list(it), data)
|
||||
|
||||
it = pickle.loads(d)
|
||||
next(it)
|
||||
d = pickle.dumps(it, proto)
|
||||
self.assertEqual(list(it), list(data)[1:])
|
||||
# running iterator
|
||||
next(itorg)
|
||||
dump = pickle.dumps((itorg, orig), proto)
|
||||
it, d = pickle.loads(dump)
|
||||
for i, x in enumerate(data):
|
||||
d[i] = x
|
||||
self.assertEqual(type(it), type(itorg))
|
||||
self.assertEqual(list(it), data[1:])
|
||||
|
||||
# empty iterator
|
||||
for i in range(1, len(data)):
|
||||
next(itorg)
|
||||
dump = pickle.dumps((itorg, orig), proto)
|
||||
it, d = pickle.loads(dump)
|
||||
for i, x in enumerate(data):
|
||||
d[i] = x
|
||||
self.assertEqual(type(it), type(itorg))
|
||||
self.assertEqual(list(it), [])
|
||||
|
||||
# exhausted iterator
|
||||
self.assertRaises(StopIteration, next, itorg)
|
||||
dump = pickle.dumps((itorg, orig), proto)
|
||||
it, d = pickle.loads(dump)
|
||||
for i, x in enumerate(data):
|
||||
d[i] = x
|
||||
self.assertEqual(type(it), type(itorg))
|
||||
self.assertEqual(list(it), [])
|
||||
|
||||
def test_deepcopy(self):
|
||||
mut = [10]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue