]> granicus.if.org Git - python/commitdiff
needspeed: rpartition documentation, tests, and a bug fixes.
authorFredrik Lundh <fredrik@pythonware.com>
Fri, 26 May 2006 18:24:15 +0000 (18:24 +0000)
committerFredrik Lundh <fredrik@pythonware.com>
Fri, 26 May 2006 18:24:15 +0000 (18:24 +0000)
feel free to add more tests and improve the documentation.

Doc/lib/libstdtypes.tex
Lib/test/string_tests.py
Objects/unicodeobject.c

index 798585ae6962197adcfb7cb29de297d2420b3a74..576a5adbb1d6dd2a534a26085baa8c1f6ce14926 100644 (file)
@@ -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}
index e242170dd8476ade722e0610b3900d494a9c5a50..489af20a16d53ffdb2511a99faed98e41e386d3c 100644 (file)
@@ -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
index df15f4be88ade03cacdbcf3bfda1d05b34de8f78..7d644d3c57b3ed8635c7a3a2258a3b895649c5ec 100644 (file)
@@ -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));
 }