Home | History | Annotate | Download | only in test
      1 from test import test_support
      2 from test.test_support import bigaddrspacetest, MAX_Py_ssize_t
      3 
      4 import unittest
      5 import operator
      6 import sys
      7 
      8 
      9 class 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 
     40 def test_main():
     41     test_support.run_unittest(StrTest)
     42 
     43 if __name__ == '__main__':
     44     if len(sys.argv) > 1:
     45         test_support.set_memlimit(sys.argv[1])
     46     test_main()
     47