|
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