mirror of https://github.com/python/cpython
Add tests for functools.total_ordering.
This commit is contained in:
parent
b1affc517f
commit
06bc0b6d2e
|
@ -1353,8 +1353,7 @@ Basic customization
|
||||||
Arguments to rich comparison methods are never coerced.
|
Arguments to rich comparison methods are never coerced.
|
||||||
|
|
||||||
To automatically generate ordering operations from a single root operation,
|
To automatically generate ordering operations from a single root operation,
|
||||||
see the `Total Ordering recipe in the ASPN cookbook
|
see :func:`functools.total_ordering`.
|
||||||
<http://code.activestate.com/recipes/576529/>`_\.
|
|
||||||
|
|
||||||
.. method:: object.__cmp__(self, other)
|
.. method:: object.__cmp__(self, other)
|
||||||
|
|
||||||
|
|
|
@ -345,6 +345,75 @@ class TestCmpToKey(unittest.TestCase):
|
||||||
self.assertEqual(sorted(range(5), key=functools.cmp_to_key(mycmp)),
|
self.assertEqual(sorted(range(5), key=functools.cmp_to_key(mycmp)),
|
||||||
[4, 3, 2, 1, 0])
|
[4, 3, 2, 1, 0])
|
||||||
|
|
||||||
|
class TestTotalOrdering(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_total_ordering_lt(self):
|
||||||
|
@functools.total_ordering
|
||||||
|
class A:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
def __lt__(self, other):
|
||||||
|
return self.value < other.value
|
||||||
|
self.assert_(A(1) < A(2))
|
||||||
|
self.assert_(A(2) > A(1))
|
||||||
|
self.assert_(A(1) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(1))
|
||||||
|
self.assert_(A(2) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(2))
|
||||||
|
|
||||||
|
def test_total_ordering_le(self):
|
||||||
|
@functools.total_ordering
|
||||||
|
class A:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
def __le__(self, other):
|
||||||
|
return self.value <= other.value
|
||||||
|
self.assert_(A(1) < A(2))
|
||||||
|
self.assert_(A(2) > A(1))
|
||||||
|
self.assert_(A(1) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(1))
|
||||||
|
self.assert_(A(2) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(2))
|
||||||
|
|
||||||
|
def test_total_ordering_gt(self):
|
||||||
|
@functools.total_ordering
|
||||||
|
class A:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
def __gt__(self, other):
|
||||||
|
return self.value > other.value
|
||||||
|
self.assert_(A(1) < A(2))
|
||||||
|
self.assert_(A(2) > A(1))
|
||||||
|
self.assert_(A(1) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(1))
|
||||||
|
self.assert_(A(2) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(2))
|
||||||
|
|
||||||
|
def test_total_ordering_ge(self):
|
||||||
|
@functools.total_ordering
|
||||||
|
class A:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
def __ge__(self, other):
|
||||||
|
return self.value >= other.value
|
||||||
|
self.assert_(A(1) < A(2))
|
||||||
|
self.assert_(A(2) > A(1))
|
||||||
|
self.assert_(A(1) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(1))
|
||||||
|
self.assert_(A(2) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(2))
|
||||||
|
|
||||||
|
def test_total_ordering_no_overwrite(self):
|
||||||
|
# new methods should not overwrite existing
|
||||||
|
@functools.total_ordering
|
||||||
|
class A(int):
|
||||||
|
pass
|
||||||
|
self.assert_(A(1) < A(2))
|
||||||
|
self.assert_(A(2) > A(1))
|
||||||
|
self.assert_(A(1) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(1))
|
||||||
|
self.assert_(A(2) <= A(2))
|
||||||
|
self.assert_(A(2) >= A(2))
|
||||||
|
|
||||||
def test_main(verbose=None):
|
def test_main(verbose=None):
|
||||||
test_classes = (
|
test_classes = (
|
||||||
|
|
Loading…
Reference in New Issue