11from test import support
2- from test .support import bigmemtest , _1G , _2G
2+ from test .support import bigmemtest , _1G , _2G , _4G , precisionbigmemtest
33
44import unittest
55import operator
@@ -53,6 +53,22 @@ def test_center(self, size):
5353 self .assertEquals (s [lpadsize :- rpadsize ], SUBSTR )
5454 self .assertEquals (s .strip (), SUBSTR .strip ())
5555
56+ @precisionbigmemtest (size = _2G - 1 , memuse = 1 )
57+ def test_center_unicode (self , size ):
58+ SUBSTR = ' abc def ghi'
59+ try :
60+ s = SUBSTR .center (size )
61+ except OverflowError :
62+ pass # acceptable on 32-bit
63+ else :
64+ self .assertEquals (len (s ), size )
65+ lpadsize = rpadsize = (len (s ) - len (SUBSTR )) // 2
66+ if len (s ) % 2 :
67+ lpadsize += 1
68+ self .assertEquals (s [lpadsize :- rpadsize ], SUBSTR )
69+ self .assertEquals (s .strip (), SUBSTR .strip ())
70+ del s
71+
5672 @bigmemtest (minsize = _2G , memuse = 2 )
5773 def test_count (self , size ):
5874 SUBSTR = ' abc def ghi'
@@ -69,10 +85,51 @@ def test_decode(self, size):
6985 s = b'.' * size
7086 self .assertEquals (len (s .decode ('utf-8' )), size )
7187
88+ def basic_encode_test (self , size , enc , c = '.' , expectedsize = None ):
89+ if expectedsize is None :
90+ expectedsize = size
91+
92+ s = c * size
93+ self .assertEquals (len (s .encode (enc )), expectedsize )
94+
7295 @bigmemtest (minsize = _2G + 2 , memuse = 3 )
7396 def test_encode (self , size ):
74- s = '.' * size
75- self .assertEquals (len (s .encode ('utf-8' )), size )
97+ return self .basic_encode_test (size , 'utf-8' )
98+
99+ @precisionbigmemtest (size = _4G / 6 + 2 , memuse = 2 )
100+ def test_encode_raw_unicode_escape (self , size ):
101+ try :
102+ return self .basic_encode_test (size , 'raw_unicode_escape' )
103+ except MemoryError :
104+ pass # acceptable on 32-bit
105+
106+ @precisionbigmemtest (size = _4G / 5 + 70 , memuse = 3 )
107+ def test_encode_utf7 (self , size ):
108+ try :
109+ return self .basic_encode_test (size , 'utf7' )
110+ except MemoryError :
111+ pass # acceptable on 32-bit
112+
113+ @precisionbigmemtest (size = _4G / 4 + 5 , memuse = 6 )
114+ def test_encode_utf32 (self , size ):
115+ try :
116+ return self .basic_encode_test (size , 'utf32' , expectedsize = 4 * size + 4 )
117+ except MemoryError :
118+ pass # acceptable on 32-bit
119+
120+ @precisionbigmemtest (size = _2G - 1 , memuse = 2 )
121+ def test_decodeascii (self , size ):
122+ return self .basic_encode_test (size , 'ascii' , c = 'A' )
123+
124+ @precisionbigmemtest (size = _4G / 5 , memuse = 6 + 2 )
125+ def test_unicode_repr_oflw (self , size ):
126+ try :
127+ s = "\uAAAA " * size
128+ r = repr (s )
129+ except MemoryError :
130+ pass # acceptable on 32-bit
131+ else :
132+ self .failUnless (s == eval (r ))
76133
77134 @bigmemtest (minsize = _2G , memuse = 2 )
78135 def test_endswith (self , size ):
@@ -458,6 +515,11 @@ def test_repr_large(self, size):
458515 self .assertEquals (s .count ('\\ ' ), size )
459516 self .assertEquals (s .count ('0' ), size * 2 )
460517
518+ @bigmemtest (minsize = 2 ** 32 / 5 , memuse = 6 + 2 )
519+ def test_unicode_repr (self , size ):
520+ s = "\uAAAA " * size
521+ self .failUnless (len (repr (s )) > size )
522+
461523 # This test is meaningful even with size < 2G, as long as the
462524 # doubled string is > 2G (but it tests more if both are > 2G :)
463525 @bigmemtest (minsize = _1G + 2 , memuse = 3 )
@@ -641,6 +703,35 @@ def test_repeat_small(self, size):
641703 def test_repeat_large (self , size ):
642704 return self .basic_test_repeat (size )
643705
706+ @bigmemtest (minsize = _1G - 1 , memuse = 12 )
707+ def test_repeat_large_2 (self , size ):
708+ return self .basic_test_repeat (size )
709+
710+ @precisionbigmemtest (size = _1G - 1 , memuse = 9 )
711+ def test_from_2G_generator (self , size ):
712+ try :
713+ t = tuple (range (size ))
714+ except MemoryError :
715+ pass # acceptable on 32-bit
716+ else :
717+ count = 0
718+ for item in t :
719+ self .assertEquals (item , count )
720+ count += 1
721+ self .assertEquals (count , size )
722+
723+ @precisionbigmemtest (size = _1G - 25 , memuse = 9 )
724+ def test_from_almost_2G_generator (self , size ):
725+ try :
726+ t = tuple (range (size ))
727+ count = 0
728+ for item in t :
729+ self .assertEquals (item , count )
730+ count += 1
731+ self .assertEquals (count , size )
732+ except MemoryError :
733+ pass # acceptable, expected on 32-bit
734+
644735 # Like test_concat, split in two.
645736 def basic_test_repr (self , size ):
646737 t = (0 ,) * size
0 commit comments