summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_functools.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index d527e31..abbd50a 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -1049,6 +1049,73 @@ class TestTotalOrdering(unittest.TestCase):
class A:
pass
+ def test_notimplemented(self):
+ # Verify NotImplemented results are correctly handled
+ @functools.total_ordering
+ class ImplementsLessThan:
+ def __init__(self, value):
+ self.value = value
+ def __eq__(self, other):
+ if isinstance(other, ImplementsLessThan):
+ return self.value == other.value
+ return False
+ def __lt__(self, other):
+ if isinstance(other, ImplementsLessThan):
+ return self.value < other.value
+ return NotImplemented
+
+ @functools.total_ordering
+ class ImplementsLessThanEqualTo:
+ def __init__(self, value):
+ self.value = value
+ def __eq__(self, other):
+ if isinstance(other, ImplementsLessThanEqualTo):
+ return self.value == other.value
+ return False
+ def __le__(self, other):
+ if isinstance(other, ImplementsLessThanEqualTo):
+ return self.value <= other.value
+ return NotImplemented
+
+ @functools.total_ordering
+ class ImplementsGreaterThan:
+ def __init__(self, value):
+ self.value = value
+ def __eq__(self, other):
+ if isinstance(other, ImplementsGreaterThan):
+ return self.value == other.value
+ return False
+ def __gt__(self, other):
+ if isinstance(other, ImplementsGreaterThan):
+ return self.value > other.value
+ return NotImplemented
+
+ @functools.total_ordering
+ class ImplementsGreaterThanEqualTo:
+ def __init__(self, value):
+ self.value = value
+ def __eq__(self, other):
+ if isinstance(other, ImplementsGreaterThanEqualTo):
+ return self.value == other.value
+ return False
+ def __ge__(self, other):
+ if isinstance(other, ImplementsGreaterThanEqualTo):
+ return self.value >= other.value
+ return NotImplemented
+
+ self.assertIs(ImplementsLessThan(1).__le__(1), NotImplemented)
+ self.assertIs(ImplementsLessThan(1).__gt__(1), NotImplemented)
+ self.assertIs(ImplementsLessThan(1).__ge__(1), NotImplemented)
+ self.assertIs(ImplementsLessThanEqualTo(1).__lt__(1), NotImplemented)
+ self.assertIs(ImplementsLessThanEqualTo(1).__gt__(1), NotImplemented)
+ self.assertIs(ImplementsLessThanEqualTo(1).__ge__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThan(1).__lt__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThan(1).__gt__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThan(1).__ge__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThanEqualTo(1).__lt__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThanEqualTo(1).__le__(1), NotImplemented)
+ self.assertIs(ImplementsGreaterThanEqualTo(1).__gt__(1), NotImplemented)
+
def test_type_error_when_not_implemented(self):
# bug 10042; ensure stack overflow does not occur
# when decorated types return NotImplemented