diff options
author | Robert Collins <rbtcollins@hp.com> | 2015-08-06 22:32:15 (GMT) |
---|---|---|
committer | Robert Collins <rbtcollins@hp.com> | 2015-08-06 22:32:15 (GMT) |
commit | 00cf3c394a7264e8cadd35adacde639c56bd089a (patch) | |
tree | f73bf6278ee8997177b09c161bf59a85e411cb12 /Lib/test/test_binop.py | |
parent | e03f42717cc7e2bab2fc03b72d17a558757060e4 (diff) | |
parent | d84b29f8050f96b981dc13b2e63f7a91358c74a3 (diff) | |
download | cpython-00cf3c394a7264e8cadd35adacde639c56bd089a.zip cpython-00cf3c394a7264e8cadd35adacde639c56bd089a.tar.gz cpython-00cf3c394a7264e8cadd35adacde639c56bd089a.tar.bz2 |
Issue #4395: Better testing and documentation of binary operators.
Patch by Martin Panter.
Diffstat (limited to 'Lib/test/test_binop.py')
-rw-r--r-- | Lib/test/test_binop.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_binop.py b/Lib/test/test_binop.py index 31dc785..823740c 100644 --- a/Lib/test/test_binop.py +++ b/Lib/test/test_binop.py @@ -3,6 +3,7 @@ import unittest from test import support from operator import eq, ne, lt, gt, le, ge +from abc import ABCMeta def gcd(a, b): """Greatest common divisor using Euclid's algorithm.""" @@ -332,7 +333,7 @@ class A(OperationLogger): self.log_operation('A.__ge__') return NotImplemented -class B(OperationLogger): +class B(OperationLogger, metaclass=ABCMeta): def __eq__(self, other): self.log_operation('B.__eq__') return NotImplemented @@ -354,6 +355,20 @@ class C(B): self.log_operation('C.__ge__') return NotImplemented +class V(OperationLogger): + """Virtual subclass of B""" + def __eq__(self, other): + self.log_operation('V.__eq__') + return NotImplemented + def __le__(self, other): + self.log_operation('V.__le__') + return NotImplemented + def __ge__(self, other): + self.log_operation('V.__ge__') + return NotImplemented +B.register(V) + + class OperationOrderTests(unittest.TestCase): def test_comparison_orders(self): self.assertEqual(op_sequence(eq, A, A), ['A.__eq__', 'A.__eq__']) @@ -369,5 +384,10 @@ class OperationOrderTests(unittest.TestCase): self.assertEqual(op_sequence(le, B, C), ['C.__ge__', 'B.__le__']) self.assertEqual(op_sequence(le, C, B), ['C.__le__', 'B.__ge__']) + self.assertTrue(issubclass(V, B)) + self.assertEqual(op_sequence(eq, B, V), ['B.__eq__', 'V.__eq__']) + self.assertEqual(op_sequence(le, B, V), ['B.__le__', 'V.__ge__']) + + if __name__ == "__main__": unittest.main() |