mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00
Fixes #23521: Corrected pure python implementation of timedelta division.
* Eliminated OverflowError from timedelta * float for some floats; * Corrected rounding in timedlta true division.
This commit is contained in:
parent
cf265fd02a
commit
24d3deefcf
3 changed files with 61 additions and 3 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue