|
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) |
@@ -1544,29 +1553,6 @@ class SomeClass: |
1544 | 1553 | self.assertRaises(TypeError, lambda: our < their) |
1545 | 1554 | self.assertRaises(TypeError, lambda: their < our) |
1546 | 1555 |
|
1547 | | - # However, if the other class explicitly defines ordering |
1548 | | - # relative to our class, it is allowed to do so |
1549 | | - |
1550 | | - class LargerThanAnything: |
1551 | | - def __lt__(self, other): |
1552 | | - return False |
1553 | | - def __le__(self, other): |
1554 | | - return isinstance(other, LargerThanAnything) |
1555 | | - def __eq__(self, other): |
1556 | | - return isinstance(other, LargerThanAnything) |
1557 | | - def __gt__(self, other): |
1558 | | - return not isinstance(other, LargerThanAnything) |
1559 | | - def __ge__(self, other): |
1560 | | - return True |
1561 | | - |
1562 | | - their = LargerThanAnything() |
1563 | | - self.assertEqual(our == their, False) |
1564 | | - self.assertEqual(their == our, False) |
1565 | | - self.assertEqual(our != their, True) |
1566 | | - self.assertEqual(their != our, True) |
1567 | | - self.assertEqual(our < their, True) |
1568 | | - self.assertEqual(their < our, False) |
1569 | | - |
1570 | 1556 | def test_bool(self): |
1571 | 1557 | # All dates are considered true. |
1572 | 1558 | self.assertTrue(self.theclass.min) |
@@ -3642,8 +3628,8 @@ def test_replace(self): |
3642 | 3628 | self.assertRaises(ValueError, base.replace, microsecond=1000000) |
3643 | 3629 |
|
3644 | 3630 | def test_mixed_compare(self): |
3645 | | - t1 = time(1, 2, 3) |
3646 | | - t2 = time(1, 2, 3) |
| 3631 | + t1 = self.theclass(1, 2, 3) |
| 3632 | + t2 = self.theclass(1, 2, 3) |
3647 | 3633 | self.assertEqual(t1, t2) |
3648 | 3634 | t2 = t2.replace(tzinfo=None) |
3649 | 3635 | self.assertEqual(t1, t2) |
|
0 commit comments