|
2 | 2 |
|
3 | 3 | See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
|
4 | 4 | """
|
5 |
| -from test.support import is_resource_enabled |
6 |
| - |
7 | 5 | import itertools
|
8 | 6 | import bisect
|
9 |
| - |
10 | 7 | import copy
|
11 | 8 | import decimal
|
12 | 9 | import sys
|
|
22 | 19 | from operator import lt, le, gt, ge, eq, ne, truediv, floordiv, mod
|
23 | 20 |
|
24 | 21 | from test import support
|
| 22 | +from test.support import is_resource_enabled, ALWAYS_EQ, LARGEST, SMALLEST |
25 | 23 |
|
26 | 24 | import datetime as datetime_module
|
27 | 25 | from datetime import MINYEAR, MAXYEAR
|
|
54 | 52 | NAN = float("nan")
|
55 | 53 |
|
56 | 54 |
|
57 |
| -class ComparesEqualClass(object): |
58 |
| - """ |
59 |
| - A class that is always equal to whatever you compare it to. |
60 |
| - """ |
61 |
| - |
62 |
| - def __eq__(self, other): |
63 |
| - return True |
64 |
| - |
65 |
| - def __ne__(self, other): |
66 |
| - return False |
67 |
| - |
68 |
| - |
69 | 55 | #############################################################################
|
70 | 56 | # module tests
|
71 | 57 |
|
@@ -353,6 +339,18 @@ def test_comparison(self):
|
353 | 339 | self.assertTrue(timezone(ZERO) != None)
|
354 | 340 | self.assertFalse(timezone(ZERO) == None)
|
355 | 341 |
|
| 342 | + tz = timezone(ZERO) |
| 343 | + self.assertTrue(tz == ALWAYS_EQ) |
| 344 | + self.assertFalse(tz != ALWAYS_EQ) |
| 345 | + self.assertTrue(tz < LARGEST) |
| 346 | + self.assertFalse(tz > LARGEST) |
| 347 | + self.assertTrue(tz <= LARGEST) |
| 348 | + self.assertFalse(tz >= LARGEST) |
| 349 | + self.assertFalse(tz < SMALLEST) |
| 350 | + self.assertTrue(tz > SMALLEST) |
| 351 | + self.assertFalse(tz <= SMALLEST) |
| 352 | + self.assertTrue(tz >= SMALLEST) |
| 353 | + |
356 | 354 | def test_aware_datetime(self):
|
357 | 355 | # test that timezone instances can be used by datetime
|
358 | 356 | t = datetime(1, 1, 1)
|
@@ -414,10 +412,21 @@ def test_harmless_mixed_comparison(self):
|
414 | 412 |
|
415 | 413 | # Comparison to objects of unsupported types should return
|
416 | 414 | # NotImplemented which falls back to the right hand side's __eq__
|
417 |
| - # method. In this case, ComparesEqualClass.__eq__ always returns True. |
418 |
| - # ComparesEqualClass.__ne__ always returns False. |
419 |
| - self.assertTrue(me == ComparesEqualClass()) |
420 |
| - self.assertFalse(me != ComparesEqualClass()) |
| 415 | + # method. In this case, ALWAYS_EQ.__eq__ always returns True. |
| 416 | + # ALWAYS_EQ.__ne__ always returns False. |
| 417 | + self.assertTrue(me == ALWAYS_EQ) |
| 418 | + self.assertFalse(me != ALWAYS_EQ) |
| 419 | + |
| 420 | + # If the other class explicitly defines ordering |
| 421 | + # relative to our class, it is allowed to do so |
| 422 | + self.assertTrue(me < LARGEST) |
| 423 | + self.assertFalse(me > LARGEST) |
| 424 | + self.assertTrue(me <= LARGEST) |
| 425 | + self.assertFalse(me >= LARGEST) |
| 426 | + self.assertFalse(me < SMALLEST) |
| 427 | + self.assertTrue(me > SMALLEST) |
| 428 | + self.assertFalse(me <= SMALLEST) |
| 429 | + self.assertTrue(me >= SMALLEST) |
421 | 430 |
|
422 | 431 | def test_harmful_mixed_comparison(self):
|
423 | 432 | me = self.theclass(1, 1, 1)
|
@@ -1582,29 +1591,6 @@ class SomeClass:
|
1582 | 1591 | self.assertRaises(TypeError, lambda: our < their)
|
1583 | 1592 | self.assertRaises(TypeError, lambda: their < our)
|
1584 | 1593 |
|
1585 |
| - # However, if the other class explicitly defines ordering |
1586 |
| - # relative to our class, it is allowed to do so |
1587 |
| - |
1588 |
| - class LargerThanAnything: |
1589 |
| - def __lt__(self, other): |
1590 |
| - return False |
1591 |
| - def __le__(self, other): |
1592 |
| - return isinstance(other, LargerThanAnything) |
1593 |
| - def __eq__(self, other): |
1594 |
| - return isinstance(other, LargerThanAnything) |
1595 |
| - def __gt__(self, other): |
1596 |
| - return not isinstance(other, LargerThanAnything) |
1597 |
| - def __ge__(self, other): |
1598 |
| - return True |
1599 |
| - |
1600 |
| - their = LargerThanAnything() |
1601 |
| - self.assertEqual(our == their, False) |
1602 |
| - self.assertEqual(their == our, False) |
1603 |
| - self.assertEqual(our != their, True) |
1604 |
| - self.assertEqual(their != our, True) |
1605 |
| - self.assertEqual(our < their, True) |
1606 |
| - self.assertEqual(their < our, False) |
1607 |
| - |
1608 | 1594 | def test_bool(self):
|
1609 | 1595 | # All dates are considered true.
|
1610 | 1596 | self.assertTrue(self.theclass.min)
|
@@ -3781,8 +3767,8 @@ def test_replace(self):
|
3781 | 3767 | self.assertRaises(ValueError, base.replace, microsecond=1000000)
|
3782 | 3768 |
|
3783 | 3769 | def test_mixed_compare(self):
|
3784 |
| - t1 = time(1, 2, 3) |
3785 |
| - t2 = time(1, 2, 3) |
| 3770 | + t1 = self.theclass(1, 2, 3) |
| 3771 | + t2 = self.theclass(1, 2, 3) |
3786 | 3772 | self.assertEqual(t1, t2)
|
3787 | 3773 | t2 = t2.replace(tzinfo=None)
|
3788 | 3774 | self.assertEqual(t1, t2)
|
|
0 commit comments