From: Victor Stinner Date: Fri, 24 Feb 2012 23:43:27 +0000 (+0100) Subject: Issue #14107: fix bigmem tests on str.capitalize(), str.swapcase() and X-Git-Tag: v3.3.0a1~72 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=abc649ddbe1894107218eb4a332a0476dab78a23;p=python Issue #14107: fix bigmem tests on str.capitalize(), str.swapcase() and str.title(). Compute correctly how much memory is required for the test (memuse). --- diff --git a/Lib/test/test_bigmem.py b/Lib/test/test_bigmem.py index 28e69a0b6c..0e545950ee 100644 --- a/Lib/test/test_bigmem.py +++ b/Lib/test/test_bigmem.py @@ -69,8 +69,7 @@ ucs4_char_size = 4 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 @@ -421,8 +420,7 @@ class BaseStrTest: 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) @@ -433,8 +431,7 @@ class BaseStrTest: 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) @@ -608,6 +605,18 @@ class StrTest(unittest.TestCase, BaseStrTest): 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. @@ -763,6 +772,18 @@ class BytesTest(unittest.TestCase, BaseStrTest): 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): @@ -774,6 +795,18 @@ class BytearrayTest(unittest.TestCase, BaseStrTest): 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 diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 7cc6b1bd9d..d73145b458 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -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__, @@ -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__, @@ -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); } @@ -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 @@ -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__, @@ -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__,