mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #14288: Serialization support for builtin iterators.
This commit is contained in:
parent
283b96b6bd
commit
31668b8f7a
28 changed files with 2190 additions and 104 deletions
|
@ -1,5 +1,6 @@
|
|||
import unittest
|
||||
import sys
|
||||
import pickle
|
||||
|
||||
from test import support
|
||||
|
||||
|
@ -61,7 +62,25 @@ class N:
|
|||
def __iter__(self):
|
||||
return self
|
||||
|
||||
class EnumerateTestCase(unittest.TestCase):
|
||||
class PickleTest:
|
||||
# Helper to check picklability
|
||||
def check_pickle(self, itorg, seq):
|
||||
d = pickle.dumps(itorg)
|
||||
it = pickle.loads(d)
|
||||
self.assertEqual(type(itorg), type(it))
|
||||
self.assertEqual(list(it), seq)
|
||||
|
||||
it = pickle.loads(d)
|
||||
try:
|
||||
next(it)
|
||||
except StopIteration:
|
||||
self.assertFalse(seq[1:])
|
||||
return
|
||||
d = pickle.dumps(it)
|
||||
it = pickle.loads(d)
|
||||
self.assertEqual(list(it), seq[1:])
|
||||
|
||||
class EnumerateTestCase(unittest.TestCase, PickleTest):
|
||||
|
||||
enum = enumerate
|
||||
seq, res = 'abc', [(0,'a'), (1,'b'), (2,'c')]
|
||||
|
@ -73,6 +92,9 @@ class EnumerateTestCase(unittest.TestCase):
|
|||
self.assertEqual(list(self.enum(self.seq)), self.res)
|
||||
self.enum.__doc__
|
||||
|
||||
def test_pickle(self):
|
||||
self.check_pickle(self.enum(self.seq), self.res)
|
||||
|
||||
def test_getitemseqn(self):
|
||||
self.assertEqual(list(self.enum(G(self.seq))), self.res)
|
||||
e = self.enum(G(''))
|
||||
|
@ -126,7 +148,7 @@ class TestBig(EnumerateTestCase):
|
|||
seq = range(10,20000,2)
|
||||
res = list(zip(range(20000), seq))
|
||||
|
||||
class TestReversed(unittest.TestCase):
|
||||
class TestReversed(unittest.TestCase, PickleTest):
|
||||
|
||||
def test_simple(self):
|
||||
class A:
|
||||
|
@ -212,6 +234,10 @@ class TestReversed(unittest.TestCase):
|
|||
ngi = NoGetItem()
|
||||
self.assertRaises(TypeError, reversed, ngi)
|
||||
|
||||
def test_pickle(self):
|
||||
for data in 'abc', range(5), tuple(enumerate('abc')), range(1,17,5):
|
||||
self.check_pickle(reversed(data), list(data)[::-1])
|
||||
|
||||
|
||||
class EnumerateStartTestCase(EnumerateTestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue