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.assertEqual(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()
