1from test import test_support 2from test.test_support import bigaddrspacetest, MAX_Py_ssize_t 3 4import unittest 5import operator 6import sys 7 8 9class StrTest(unittest.TestCase): 10 11 @bigaddrspacetest 12 def test_concat(self): 13 s1 = 'x' * MAX_Py_ssize_t 14 self.assertRaises(OverflowError, operator.add, s1, '?') 15 16 @bigaddrspacetest 17 def test_optimized_concat(self): 18 x = 'x' * MAX_Py_ssize_t 19 try: 20 x = x + '?' # this statement uses a fast path in ceval.c 21 except OverflowError: 22 pass 23 else: 24 self.fail("should have raised OverflowError") 25 try: 26 x += '?' # this statement uses a fast path in ceval.c 27 except OverflowError: 28 pass 29 else: 30 self.fail("should have raised OverflowError") 31 self.assertEqual(len(x), MAX_Py_ssize_t) 32 33 ### the following test is pending a patch 34 # (http://mail.python.org/pipermail/python-dev/2006-July/067774.html) 35 #@bigaddrspacetest 36 #def test_repeat(self): 37 # self.assertRaises(OverflowError, operator.mul, 'x', MAX_Py_ssize_t + 1) 38 39 40def test_main(): 41 test_support.run_unittest(StrTest) 42 43if __name__ == '__main__': 44 if len(sys.argv) > 1: 45 test_support.set_memlimit(sys.argv[1]) 46 test_main() 47