mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			47 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from test import test_support
							 | 
						||
| 
								 | 
							
								from test.test_support import bigaddrspacetest, MAX_Py_ssize_t
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import unittest
							 | 
						||
| 
								 | 
							
								import operator
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StrTest(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @bigaddrspacetest
							 | 
						||
| 
								 | 
							
								    def test_concat(self):
							 | 
						||
| 
								 | 
							
								        s1 = 'x' * MAX_Py_ssize_t
							 | 
						||
| 
								 | 
							
								        self.assertRaises(OverflowError, operator.add, s1, '?')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @bigaddrspacetest
							 | 
						||
| 
								 | 
							
								    def test_optimized_concat(self):
							 | 
						||
| 
								 | 
							
								        x = 'x' * MAX_Py_ssize_t
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            x = x + '?'     # this statement uses a fast path in ceval.c
							 | 
						||
| 
								 | 
							
								        except OverflowError:
							 | 
						||
| 
								 | 
							
								            pass
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            self.fail("should have raised OverflowError")
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            x += '?'        # this statement uses a fast path in ceval.c
							 | 
						||
| 
								 | 
							
								        except OverflowError:
							 | 
						||
| 
								 | 
							
								            pass
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            self.fail("should have raised OverflowError")
							 | 
						||
| 
								 | 
							
								        self.assertEquals(len(x), MAX_Py_ssize_t)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ### the following test is pending a patch
							 | 
						||
| 
								 | 
							
								    #   (http://mail.python.org/pipermail/python-dev/2006-July/067774.html)
							 | 
						||
| 
								 | 
							
								    #@bigaddrspacetest
							 | 
						||
| 
								 | 
							
								    #def test_repeat(self):
							 | 
						||
| 
								 | 
							
								    #    self.assertRaises(OverflowError, operator.mul, 'x', MAX_Py_ssize_t + 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def test_main():
							 | 
						||
| 
								 | 
							
								    test_support.run_unittest(StrTest)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								    if len(sys.argv) > 1:
							 | 
						||
| 
								 | 
							
								        test_support.set_memlimit(sys.argv[1])
							 | 
						||
| 
								 | 
							
								    test_main()
							 |