| import python_richcompare |
| import sys |
| |
| def check_unorderable_types(exception): |
| # if str(exception).find("unorderable types") == -1: |
| # raise RuntimeError("A TypeError 'unorderable types' exception was expected"), None, sys.exc_info()[2] |
| pass # Exception message seems to vary from one version of Python to another |
| |
| base1 = python_richcompare.BaseClass(1) |
| base2 = python_richcompare.BaseClass(2) |
| base3 = python_richcompare.BaseClass(3) |
| a1 = python_richcompare.SubClassA(1) |
| a2 = python_richcompare.SubClassA(2) |
| a3 = python_richcompare.SubClassA(3) |
| b1 = python_richcompare.SubClassB(1) |
| b2 = python_richcompare.SubClassB(2) |
| b3 = python_richcompare.SubClassB(3) |
| |
| # Check == and != within a single type |
| #------------------------------------------------------------------------- |
| |
| if not (base1 == base1): |
| raise RuntimeError("Object not == to itself") |
| |
| if not (base1 == python_richcompare.BaseClass(1)): |
| raise RuntimeError("Object not == to an equivalent object") |
| |
| if (base1 == base2): |
| raise RuntimeError( |
| "Comparing non-equivalent objects of the same type, == returned True") |
| |
| if (base1 != base1): |
| raise RuntimeError("Object is != itself") |
| |
| if (base1 != python_richcompare.BaseClass(1)): |
| raise RuntimeError("Object is != an equivalent object") |
| |
| if not (base1 != base2): |
| raise RuntimeError( |
| "Comparing non-equivalent objects of the same type, != returned False") |
| |
| |
| # Check redefined operator== in SubClassA |
| #------------------------------------------------------------------------- |
| |
| if (a2 == base2): |
| raise RuntimeError("Redefined operator== in SubClassA failed") |
| |
| if (a2 == b2): |
| raise RuntimeError("Redefined operator== in SubClassA failed") |
| |
| if not (a1 == a2): |
| raise RuntimeError("Redefined operator== in SubClassA failed") |
| |
| # Check up-casting of subclasses |
| #------------------------------------------------------------------------- |
| |
| if (base2 != a2): |
| raise RuntimeError( |
| "Comparing equivalent base and subclass instances, != returned True") |
| |
| if (a2 == base2): |
| raise RuntimeError( |
| "Comparing non-equivalent base and subclass instances, == returned True") |
| |
| if (a1 == b1): |
| raise RuntimeError( |
| "Comparing equivalent instances of different subclasses, == returned True") |
| |
| if (b1 == a1): |
| raise RuntimeError( |
| "Comparing equivalent instances of different subclasses, == returned True") |
| |
| # Check comparison to other objects |
| #------------------------------------------------------------------------------- |
| if (base1 == 42) : |
| raise RuntimeError("Comparing class to incompatible type, == returned True") |
| if not (base1 != 42) : |
| raise RuntimeError("Comparing class to incompatible type, != returned False") |
| |
| if (a1 == 42) : |
| raise RuntimeError("Comparing class (with overloaded operator ==) to incompatible type, == returned True") |
| if not (a1 != 42) : |
| raise RuntimeError("Comparing class (with overloaded operator ==) to incompatible type, != returned False") |
| |
| # Check inequalities |
| #------------------------------------------------------------------------- |
| |
| if (a2 > b2): |
| raise RuntimeError("operator> failed") |
| |
| if (a2 < b2): |
| raise RuntimeError("operator< failed") |
| |
| if not (a2 >= b2): |
| raise RuntimeError("operator>= failed") |
| |
| if not (a2 <= b2): |
| raise RuntimeError("operator<= failed") |
| |
| # Check inequalities to other objects |
| #------------------------------------------------------------------------------- |
| if sys.version_info[0:2] < (3, 0): |
| if (base1 < 42): |
| raise RuntimeError("Comparing class to incompatible type, < returned True") |
| if (base1 <= 42): |
| raise RuntimeError("Comparing class to incompatible type, <= returned True") |
| if not (base1 > 42): |
| raise RuntimeError("Comparing class to incompatible type, > returned False") |
| if not (base1 >= 42): |
| raise RuntimeError("Comparing class to incompatible type, >= returned False") |
| else: |
| # Python 3 throws: TypeError: unorderable types |
| try: |
| res = base1 < 42 |
| raise RuntimeError("Failed to throw") |
| except TypeError,e: |
| check_unorderable_types(e) |
| try: |
| res = base1 <= 42 |
| raise RuntimeError("Failed to throw") |
| except TypeError,e: |
| check_unorderable_types(e) |
| try: |
| res = base1 > 42 |
| raise RuntimeError("Failed to throw") |
| except TypeError,e: |
| check_unorderable_types(e) |
| try: |
| res = base1 >= 42 |
| raise RuntimeError("Failed to throw") |
| except TypeError,e: |
| check_unorderable_types(e) |
| |
| # Check inequalities used for ordering |
| #------------------------------------------------------------------------- |
| |
| x = sorted([a2, a3, a1]) |
| |
| if not (x[0] is a1): |
| raise RuntimeError("Ordering failed") |
| |
| if not (x[1] is a2): |
| raise RuntimeError("Ordering failed") |
| |
| if not (x[2] is a3): |
| raise RuntimeError("Ordering failed") |
| |
| x = sorted([base2, a3, b1]) |
| |
| if not (x[0] is b1): |
| raise RuntimeError("Ordering failed") |
| |
| if not (x[1] is base2): |
| raise RuntimeError("Ordering failed") |
| |
| if not (x[2] is a3): |
| raise RuntimeError("Ordering failed") |