Skip to content

Commit

Permalink
Issue python#14107: fix bigmem tests on str.capitalize(), str.swapcas…
Browse files Browse the repository at this point in the history
…e() and

str.title(). Compute correctly how much memory is required for the test
(memuse).
  • Loading branch information
Victor Stinner committed Feb 24, 2012
1 parent c6fbf47 commit abc649d
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 12 deletions.
45 changes: 39 additions & 6 deletions Lib/test/test_bigmem.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,7 @@

class BaseStrTest:

@bigmemtest(size=_2G, memuse=2)
def test_capitalize(self, size):
def _test_capitalize(self, size):
_ = self.from_latin1
SUBSTR = self.from_latin1(' abc def ghi')
s = _('-') * size + SUBSTR
Expand Down Expand Up @@ -421,8 +420,7 @@ def test_strip(self, size):
self.assertEqual(len(s), size)
self.assertEqual(s.strip(), SUBSTR.strip())

@bigmemtest(size=_2G, memuse=2)
def test_swapcase(self, size):
def _test_swapcase(self, size):
_ = self.from_latin1
SUBSTR = _("aBcDeFG12.'\xa9\x00")
sublen = len(SUBSTR)
Expand All @@ -433,8 +431,7 @@ def test_swapcase(self, size):
self.assertEqual(s[:sublen * 3], SUBSTR.swapcase() * 3)
self.assertEqual(s[-sublen * 3:], SUBSTR.swapcase() * 3)

@bigmemtest(size=_2G, memuse=2)
def test_title(self, size):
def _test_title(self, size):
_ = self.from_latin1
SUBSTR = _('SpaaHAaaAaham')
s = SUBSTR * (size // len(SUBSTR) + 2)
Expand Down Expand Up @@ -608,6 +605,18 @@ def tearDown(self):
for name, memuse in self._adjusted.items():
getattr(type(self), name).memuse = memuse

@bigmemtest(size=_2G, memuse=ucs4_char_size * 3)
def test_capitalize(self, size):
self._test_capitalize(size)

@bigmemtest(size=_2G, memuse=ucs4_char_size * 3)
def test_title(self, size):
self._test_title(size)

@bigmemtest(size=_2G, memuse=ucs4_char_size * 3)
def test_swapcase(self, size):
self._test_swapcase(size)

# Many codecs convert to the legacy representation first, explaining
# why we add 'ucs4_char_size' to the 'memuse' below.

Expand Down Expand Up @@ -763,6 +772,18 @@ def test_decode(self, size):
s = self.from_latin1('.') * size
self.assertEqual(len(s.decode('utf-8')), size)

@bigmemtest(size=_2G, memuse=2)
def test_capitalize(self, size):
self._test_capitalize(size)

@bigmemtest(size=_2G, memuse=2)
def test_title(self, size):
self._test_title(size)

@bigmemtest(size=_2G, memuse=2)
def test_swapcase(self, size):
self._test_swapcase(size)


class BytearrayTest(unittest.TestCase, BaseStrTest):

Expand All @@ -774,6 +795,18 @@ def test_decode(self, size):
s = self.from_latin1('.') * size
self.assertEqual(len(s.decode('utf-8')), size)

@bigmemtest(size=_2G, memuse=2)
def test_capitalize(self, size):
self._test_capitalize(size)

@bigmemtest(size=_2G, memuse=2)
def test_title(self, size):
self._test_title(size)

@bigmemtest(size=_2G, memuse=2)
def test_swapcase(self, size):
self._test_swapcase(size)

test_hash = None
test_split_large = None

Expand Down
24 changes: 18 additions & 6 deletions Objects/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -10628,7 +10628,10 @@ unicode_title(PyObject *self)
{
if (PyUnicode_READY(self) == -1)
return NULL;
return case_operation(self, do_title);
if (PyUnicode_IS_ASCII(self))
return ascii_case_operation(self, ascii_do_title);
else
return case_operation(self, do_title);
}

PyDoc_STRVAR(capitalize__doc__,
Expand All @@ -10644,7 +10647,10 @@ unicode_capitalize(PyObject *self)
return NULL;
if (PyUnicode_GET_LENGTH(self) == 0)
return unicode_result_unchanged(self);
return case_operation(self, do_capitalize);
if (PyUnicode_IS_ASCII(self))
return ascii_case_operation(self, ascii_do_capitalize);
else
return case_operation(self, do_capitalize);
}

PyDoc_STRVAR(casefold__doc__,
Expand All @@ -10659,7 +10665,8 @@ unicode_casefold(PyObject *self)
return NULL;
if (PyUnicode_IS_ASCII(self))
return ascii_upper_or_lower(self, 1);
return case_operation(self, do_casefold);
else
return case_operation(self, do_casefold);
}


Expand Down Expand Up @@ -11893,7 +11900,8 @@ unicode_lower(PyObject *self)
return NULL;
if (PyUnicode_IS_ASCII(self))
return ascii_upper_or_lower(self, 1);
return case_operation(self, do_lower);
else
return case_operation(self, do_lower);
}

#define LEFTSTRIP 0
Expand Down Expand Up @@ -12784,7 +12792,10 @@ unicode_swapcase(PyObject *self)
{
if (PyUnicode_READY(self) == -1)
return NULL;
return case_operation(self, do_swapcase);
if (PyUnicode_IS_ASCII(self))
return ascii_case_operation(self, ascii_do_swapcase);
else
return case_operation(self, do_swapcase);
}

PyDoc_STRVAR(maketrans__doc__,
Expand Down Expand Up @@ -12934,7 +12945,8 @@ unicode_upper(PyObject *self)
return NULL;
if (PyUnicode_IS_ASCII(self))
return ascii_upper_or_lower(self, 0);
return case_operation(self, do_upper);
else
return case_operation(self, do_upper);
}

PyDoc_STRVAR(zfill__doc__,
Expand Down

0 comments on commit abc649d

Please sign in to comment.