Add a similar test for rich comparisons.
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index bd04605..4ed85df 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1833,7 +1833,9 @@
 
 def classic_comparisons():
     if verbose: print "Testing classic comparisons..."
-    for base in (int, object):
+    class classic:
+        pass
+    for base in (classic, int, object):
         if verbose: print "        (base = %s)" % base
         class C(base):
             def __init__(self, value):
@@ -1858,6 +1860,69 @@
                 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 rich_comparisons():
+    if verbose:
+        print "Testing rich comparisons..."
+    class classic:
+        pass
+    for base in (classic, int, object, list):
+        if verbose: print "        (base = %s)" % base
+        class C(base):
+            def __init__(self, value):
+                self.value = int(value)
+            def __cmp__(self, other):
+                raise TestFailed, "shouldn't call __cmp__"
+            def __eq__(self, other):
+                if isinstance(other, C):
+                    return self.value == other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return self.value == other
+                return NotImplemented
+            def __ne__(self, other):
+                if isinstance(other, C):
+                    return self.value != other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return self.value != other
+                return NotImplemented
+            def __lt__(self, other):
+                if isinstance(other, C):
+                    return self.value < other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return self.value < other
+                return NotImplemented
+            def __le__(self, other):
+                if isinstance(other, C):
+                    return self.value <= other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return self.value <= other
+                return NotImplemented
+            def __gt__(self, other):
+                if isinstance(other, C):
+                    return self.value > other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return self.value > other
+                return NotImplemented
+            def __ge__(self, other):
+                if isinstance(other, C):
+                    return self.value >= other.value
+                if isinstance(other, int) or isinstance(other, long):
+                    return 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:
+                for op in "<", "<=", "==", "!=", ">", ">=":
+                    verify(eval("c[x] %s c[y]" % op) == eval("x %s y" % op),
+                           "x=%d, y=%d" % (x, y))
+                    verify(eval("c[x] %s y" % op) == eval("x %s y" % op),
+                           "x=%d, y=%d" % (x, y))
+                    verify(eval("x %s c[y]" % op) == eval("x %s y" % op),
+                           "x=%d, y=%d" % (x, y))
+
 
 def all():
     lists()
@@ -1897,6 +1962,7 @@
     restricted()
     str_subclass_as_dict_key()
     classic_comparisons()
+    rich_comparisons()
 
 all()