[Python-checkins] CVS: python/dist/src/Lib/test test_descr.py,1.60,1.61
Guido van Rossum
gvanrossum@users.sourceforge.net
Tue, 18 Sep 2001 13:38:55 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv26332/Lib/test
Modified Files:
test_descr.py
Log Message:
Hopefully fix 3-way comparisons. This unfortunately adds yet another
hack, and it's even more disgusting than a PyInstance_Check() call.
If the tp_compare slot is the slot used for overrides in Python,
it's always called.
Add some tests that show what should work too.
Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.60
retrieving revision 1.61
diff -C2 -d -r1.60 -r1.61
*** test_descr.py 2001/09/18 20:04:26 1.60
--- test_descr.py 2001/09/18 20:38:53 1.61
***************
*** 1832,1835 ****
--- 1832,1862 ----
verify(d.get(cistr('thrEE')) == 3)
+ def classic_comparisons():
+ if verbose: print "Testing classic comparisons..."
+ for base in (int, object):
+ if verbose: print " (base = %s)" % base
+ class C(base):
+ def __init__(self, value):
+ self.value = int(value)
+ def __cmp__(self, other):
+ if isinstance(other, C):
+ return cmp(self.value, other.value)
+ if isinstance(other, int) or isinstance(other, long):
+ return cmp(self.value, other)
+ return NotImplemented
+ c1 = C(1)
+ c2 = C(2)
+ c3 = C(3)
+ verify(c1 == 1)
+ c = {1: c1, 2: c2, 3: c3}
+ for x in 1, 2, 3:
+ for y in 1, 2, 3:
+ verify(cmp(c[x], c[y]) == cmp(x, y), "x=%d, y=%d" % (x, y))
+ for op in "<", "<=", "==", "!=", ">", ">=":
+ verify(eval("c[x] %s c[y]" % op) == eval("x %s y" % op),
+ "x=%d, y=%d" % (x, y))
+ verify(cmp(c[x], y) == cmp(x, y), "x=%d, y=%d" % (x, y))
+ verify(cmp(x, c[y]) == cmp(x, y), "x=%d, y=%d" % (x, y))
+
def all():
***************
*** 1870,1873 ****
--- 1897,1901 ----
restricted()
str_subclass_as_dict_key()
+ classic_comparisons()
all()