mirror of https://github.com/python/cpython.git
Change string comparison so that it applies even when one (or both)
arguments are subclasses of str, as long as they don't override rich comparison.
This commit is contained in:
parent
ff0e6d6ef5
commit
bb77e6801e
|
@ -1555,7 +1555,7 @@ def rev(self):
|
|||
self._rev = self.__class__("".join(L))
|
||||
return self._rev
|
||||
s = madstring("abcdefghijklmnopqrstuvwxyz")
|
||||
#XXX verify(s == "abcdefghijklmnopqrstuvwxyz")
|
||||
verify(s == "abcdefghijklmnopqrstuvwxyz")
|
||||
verify(s.rev() == madstring("zyxwvutsrqponmlkjihgfedcba"))
|
||||
verify(s.rev().rev() == madstring("abcdefghijklmnopqrstuvwxyz"))
|
||||
for i in range(256):
|
||||
|
@ -1569,12 +1569,12 @@ def rev(self):
|
|||
|
||||
base = "\x00" * 5
|
||||
s = madstring(base)
|
||||
#XXX verify(s == base)
|
||||
verify(s == base)
|
||||
verify(str(s) == base)
|
||||
verify(str(s).__class__ is str)
|
||||
verify(hash(s) == hash(base))
|
||||
#XXX verify({s: 1}[base] == 1)
|
||||
#XXX verify({base: 1}[s] == 1)
|
||||
verify({s: 1}[base] == 1)
|
||||
verify({base: 1}[s] == 1)
|
||||
verify((s + "").__class__ is str)
|
||||
verify(s + "" == base)
|
||||
verify(("" + s).__class__ is str)
|
||||
|
@ -1613,14 +1613,14 @@ def rev(self):
|
|||
verify(s.lower() == base)
|
||||
|
||||
s = madstring("x y")
|
||||
#XXX verify(s == "x y")
|
||||
verify(s == "x y")
|
||||
verify(intern(s).__class__ is str)
|
||||
verify(intern(s) is intern("x y"))
|
||||
verify(intern(s) == "x y")
|
||||
|
||||
i = intern("y x")
|
||||
s = madstring("y x")
|
||||
#XXX verify(s == i)
|
||||
verify(s == i)
|
||||
verify(intern(s).__class__ is str)
|
||||
verify(intern(s) is i)
|
||||
|
||||
|
|
|
@ -824,9 +824,10 @@ string_richcompare(PyStringObject *a, PyStringObject *b, int op)
|
|||
int min_len;
|
||||
PyObject *result;
|
||||
|
||||
/* One of the objects is a string object. Make sure the
|
||||
other one is one, too. */
|
||||
if (a->ob_type != b->ob_type) {
|
||||
/* May sure both arguments use string comparison.
|
||||
This implies PyString_Check(a) && PyString_Check(b). */
|
||||
if (a->ob_type->tp_richcompare != (richcmpfunc)string_richcompare ||
|
||||
b->ob_type->tp_richcompare != (richcmpfunc)string_richcompare) {
|
||||
result = Py_NotImplemented;
|
||||
goto out;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue