@@ -636,6 +636,7 @@ def test_cycle(self):
636
636
self .assertRaises (TypeError , cycle , 5 )
637
637
self .assertEqual (list (islice (cycle (gen3 ()),10 )), [0 ,1 ,2 ,0 ,1 ,2 ,0 ,1 ,2 ,0 ])
638
638
639
+ def test_cycle_copy_pickle (self ):
639
640
# check copy, deepcopy, pickle
640
641
c = cycle ('abc' )
641
642
self .assertEqual (next (c ), 'a' )
@@ -671,6 +672,37 @@ def test_cycle(self):
671
672
d = pickle .loads (p ) # rebuild the cycle object
672
673
self .assertEqual (take (20 , d ), list ('cdeabcdeabcdeabcdeab' ))
673
674
675
+ def test_cycle_unpickle_compat (self ):
676
+ testcases = [
677
+ b'citertools\n cycle\n (c__builtin__\n iter\n ((lI1\n aI2\n aI3\n atRI1\n btR((lI1\n aI0\n tb.' ,
678
+ b'citertools\n cycle\n (c__builtin__\n iter\n (](K\x01 K\x02 K\x03 etRK\x01 btR(]K\x01 aK\x00 tb.' ,
679
+ b'\x80 \x02 citertools\n cycle\n c__builtin__\n iter\n ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 aK\x00 \x86 b.' ,
680
+ b'\x80 \x03 citertools\n cycle\n cbuiltins\n iter\n ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 aK\x00 \x86 b.' ,
681
+ b'\x80 \x04 \x95 =\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x8c \t itertools\x8c \x05 cycle\x93 \x8c \x08 builtins\x8c \x04 iter\x93 ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 aK\x00 \x86 b.' ,
682
+
683
+ b'citertools\n cycle\n (c__builtin__\n iter\n ((lp0\n I1\n aI2\n aI3\n atRI1\n btR(g0\n I1\n tb.' ,
684
+ b'citertools\n cycle\n (c__builtin__\n iter\n (]q\x00 (K\x01 K\x02 K\x03 etRK\x01 btR(h\x00 K\x01 tb.' ,
685
+ b'\x80 \x02 citertools\n cycle\n c__builtin__\n iter\n ]q\x00 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 K\x01 \x86 b.' ,
686
+ b'\x80 \x03 citertools\n cycle\n cbuiltins\n iter\n ]q\x00 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 K\x01 \x86 b.' ,
687
+ b'\x80 \x04 \x95 <\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x8c \t itertools\x8c \x05 cycle\x93 \x8c \x08 builtins\x8c \x04 iter\x93 ]\x94 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 K\x01 \x86 b.' ,
688
+
689
+ b'citertools\n cycle\n (c__builtin__\n iter\n ((lI1\n aI2\n aI3\n atRI1\n btR((lI1\n aI00\n tb.' ,
690
+ b'citertools\n cycle\n (c__builtin__\n iter\n (](K\x01 K\x02 K\x03 etRK\x01 btR(]K\x01 aI00\n tb.' ,
691
+ b'\x80 \x02 citertools\n cycle\n c__builtin__\n iter\n ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 a\x89 \x86 b.' ,
692
+ b'\x80 \x03 citertools\n cycle\n cbuiltins\n iter\n ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 a\x89 \x86 b.' ,
693
+ b'\x80 \x04 \x95 <\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x8c \t itertools\x8c \x05 cycle\x93 \x8c \x08 builtins\x8c \x04 iter\x93 ](K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 R]K\x01 a\x89 \x86 b.' ,
694
+
695
+ b'citertools\n cycle\n (c__builtin__\n iter\n ((lp0\n I1\n aI2\n aI3\n atRI1\n btR(g0\n I01\n tb.' ,
696
+ b'citertools\n cycle\n (c__builtin__\n iter\n (]q\x00 (K\x01 K\x02 K\x03 etRK\x01 btR(h\x00 I01\n tb.' ,
697
+ b'\x80 \x02 citertools\n cycle\n c__builtin__\n iter\n ]q\x00 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 \x88 \x86 b.' ,
698
+ b'\x80 \x03 citertools\n cycle\n cbuiltins\n iter\n ]q\x00 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 \x88 \x86 b.' ,
699
+ b'\x80 \x04 \x95 ;\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x8c \t itertools\x8c \x05 cycle\x93 \x8c \x08 builtins\x8c \x04 iter\x93 ]\x94 (K\x01 K\x02 K\x03 e\x85 RK\x01 b\x85 Rh\x00 \x88 \x86 b.' ,
700
+ ]
701
+ assert len (testcases ) == 20
702
+ for t in testcases :
703
+ it = pickle .loads (t )
704
+ self .assertEqual (take (10 , it ), [2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 ])
705
+
674
706
def test_cycle_setstate (self ):
675
707
# Verify both modes for restoring state
676
708
0 commit comments