diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex index 798585ae696..576a5adbb1d 100644 --- a/Doc/lib/libstdtypes.tex +++ b/Doc/lib/libstdtypes.tex @@ -763,6 +763,15 @@ The original string is returned if \versionchanged[Support for the \var{fillchar} argument]{2.4} \end{methoddesc} +\begin{methoddesc}[string]{rpartition}{sep} +Split the string at the last occurrence of \var{sep}, and return +a 3-tuple containing the part before the separator, the separator +itself, and the part after the separator. If the separator is not +found, return a 3-tuple containing the string itself, followed by +two empty strings. +\versionadded{2.5} +\end{methoddesc} + \begin{methoddesc}[string]{rsplit}{\optional{sep \optional{,maxsplit}}} Return a list of the words in the string, using \var{sep} as the delimiter string. If \var{maxsplit} is given, at most \var{maxsplit} diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index e242170dd84..489af20a16d 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -999,8 +999,8 @@ class MixinStrUnicodeUserStringTest: def test_partition(self): - self.checkequal(('this', ' is ', 'the partition method'), - 'this is the partition method', 'partition', ' is ') + self.checkequal(('this is the par', 'ti', 'tion method'), + 'this is the partition method', 'partition', 'ti') # from raymond's original specification S = 'http://www.python.org' @@ -1012,6 +1012,21 @@ class MixinStrUnicodeUserStringTest: self.checkraises(ValueError, S, 'partition', '') self.checkraises(TypeError, S, 'partition', None) + def test_rpartition(self): + + self.checkequal(('this is the rparti', 'ti', 'on method'), + 'this is the rpartition method', 'rpartition', 'ti') + + # from raymond's original specification + S = 'http://www.python.org' + self.checkequal(('http', '://', 'www.python.org'), S, 'rpartition', '://') + self.checkequal(('http://www.python.org', '', ''), S, 'rpartition', '?') + self.checkequal(('', 'http://', 'www.python.org'), S, 'rpartition', 'http://') + self.checkequal(('http://www.python.', 'org', ''), S, 'rpartition', 'org') + + self.checkraises(ValueError, S, 'rpartition', '') + self.checkraises(TypeError, S, 'rpartition', None) + class MixinStrStringUserStringTest: # Additional tests for 8bit strings, i.e. str, UserString and diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index df15f4be88a..7d644d3c57b 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -3861,8 +3861,8 @@ int PyUnicode_EncodeDecimal(Py_UNICODE *s, Py_LOCAL(int) STRINGLIB_CMP(const Py_UNICODE* str, const Py_UNICODE* other, Py_ssize_t len) { - if (str[0] == other[0]) - return 0; + if (str[0] != other[0]) + return 1; return memcmp((void*) str, (void*) other, len * sizeof(Py_UNICODE)); }