diff options
| author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2015-02-28 10:41:57 -0500 |
|---|---|---|
| committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2015-02-28 10:41:57 -0500 |
| commit | 24d3deefcf2f78b12fc29ed4c9a3811d46c534bb (patch) | |
| tree | b5f0821a0f1f9bdef43fc1163b821f1a9c7ad7fb /Lib/test | |
| parent | cf265fd02a0daacfa026b774a6eb2d7732b544a4 (diff) | |
| download | cpython-git-24d3deefcf2f78b12fc29ed4c9a3811d46c534bb.tar.gz | |
Fixes #23521: Corrected pure python implementation of timedelta division.
* Eliminated OverflowError from timedelta * float for some floats;
* Corrected rounding in timedlta true division.
Diffstat (limited to 'Lib/test')
| -rw-r--r-- | Lib/test/datetimetester.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index f42b0f907c..8e48b9fd53 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -50,6 +50,33 @@ class TestModule(unittest.TestCase): self.assertEqual(datetime.MINYEAR, 1) self.assertEqual(datetime.MAXYEAR, 9999) + def test_divide_and_round(self): + if '_Fast' in str(self): + return + dar = datetime_module._divide_and_round + + self.assertEqual(dar(-10, -3), 3) + self.assertEqual(dar(5, -2), -2) + + # four cases: (2 signs of a) x (2 signs of b) + self.assertEqual(dar(7, 3), 2) + self.assertEqual(dar(-7, 3), -2) + self.assertEqual(dar(7, -3), -2) + self.assertEqual(dar(-7, -3), 2) + + # ties to even - eight cases: + # (2 signs of a) x (2 signs of b) x (even / odd quotient) + self.assertEqual(dar(10, 4), 2) + self.assertEqual(dar(-10, 4), -2) + self.assertEqual(dar(10, -4), -2) + self.assertEqual(dar(-10, -4), 2) + + self.assertEqual(dar(6, 4), 2) + self.assertEqual(dar(-6, 4), -2) + self.assertEqual(dar(6, -4), -2) + self.assertEqual(dar(-6, -4), 2) + + ############################################################################# # tzinfo tests @@ -382,6 +409,10 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): eq((-3*us) * 0.5, -2*us) eq((-5*us) * 0.5, -2*us) + # Issue #23521 + eq(td(seconds=1) * 0.123456, td(microseconds=123456)) + eq(td(seconds=1) * 0.6112295, td(microseconds=611229)) + # Division by int and float eq((3*us) / 2, 2*us) eq((5*us) / 2, 2*us) @@ -396,6 +427,9 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): for i in range(-10, 10): eq((i*us/-3)//us, round(i/-3)) + # Issue #23521 + eq(td(seconds=1) / (1 / 0.6112295), td(microseconds=611229)) + # Issue #11576 eq(td(999999999, 86399, 999999) - td(999999999, 86399, 999998), td(0, 0, 1)) |
