summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2012-02-24 23:43:27 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2012-02-24 23:43:27 (GMT)
commitabc649ddbe1894107218eb4a332a0476dab78a23 (patch)
treee3a8556118de0506964b3b58b62974216ba8fc55
parentc6fbf47b28173c7bbac9a9e19201876d945859d3 (diff)
downloadcpython-abc649ddbe1894107218eb4a332a0476dab78a23.zip
cpython-abc649ddbe1894107218eb4a332a0476dab78a23.tar.gz
cpython-abc649ddbe1894107218eb4a332a0476dab78a23.tar.bz2
Issue #14107: fix bigmem tests on str.capitalize(), str.swapcase() and
str.title(). Compute correctly how much memory is required for the test (memuse).
-rw-r--r--Lib/test/test_bigmem.py45
-rw-r--r--Objects/unicodeobject.c24
2 files changed, 57 insertions, 12 deletions
diff --git a/Lib/test/test_bigmem.py b/Lib/test/test_bigmem.py
index 28e69a0..0e54595 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 7cc6b1b..d73145b 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__,