From 9b5ce3ede3f234a7b18f708a62eea367f253092c Mon Sep 17 00:00:00 2001 From: upstream Date: Fri, 4 Sep 2026 09:31:35 +0200 Subject: [PATCH] Upstream wroberts/pytimeparse state of the touched files before a9e844e72e --- pytimeparse/tests/testtimeparse.py | 10 ---------- pytimeparse/timeparse.py | 10 +++------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/pytimeparse/tests/testtimeparse.py b/pytimeparse/tests/testtimeparse.py index 760057c..c305bb5 100644 --- a/pytimeparse/tests/testtimeparse.py +++ b/pytimeparse/tests/testtimeparse.py @@ -358,16 +358,6 @@ class TestTimeparse(unittest.TestCase): self.assertEqual(timeparse.timeparse('+5.6 weeks'), 3386880) self.assertEqual(timeparse.timeparse('-5.6 weeks'), -3386880) - def test_timeparse_fractional_rounding(self): - '''Decimal quantities that equal a whole number of seconds must not be - truncated by binary floating-point error (e.g. 2.05 * 60 == 122.999...).''' - self.assertEqual(timeparse.timeparse('2.05m'), 123) - self.assertEqual(timeparse.timeparse('+2.05m'), 123) - self.assertEqual(timeparse.timeparse('-2.05m'), -123) - self.assertEqual(timeparse.timeparse('4.1m'), 246) - self.assertEqual(timeparse.timeparse('1.13h'), 4068) - self.assertEqual(timeparse.timeparse('8.03h'), 28908) - def test_doctest(self): '''Run timeparse doctests.''' self.assertTrue(doctest.testmod(timeparse, raise_on_error=True)) diff --git a/pytimeparse/timeparse.py b/pytimeparse/timeparse.py index bcfe1a4..ace5cc3 100644 --- a/pytimeparse/timeparse.py +++ b/pytimeparse/timeparse.py @@ -172,14 +172,10 @@ def timeparse(sval, granularity='seconds'): elif ('secs' not in mdict or mdict['secs'] is None or mdict['secs'].isdigit()): - # we will return an integer. Round (not truncate) the - # sub-second unit contribution: multiplying a decimal - # quantity such as 2.05 minutes by 60 yields a binary - # float slightly below the exact value (122.999...), and - # int() would truncate it to 122 instead of 123. + # we will return an integer return ( - sign * int(round(sum([MULTIPLIERS[k] * float(v) for (k, v) in - list(mdict.items()) if k != 'secs' and v is not None]))) + + sign * int(sum([MULTIPLIERS[k] * float(v) for (k, v) in + list(mdict.items()) if k != 'secs' and v is not None])) + (int(mdict['secs'], 10) if mdict['secs'] else 0)) else: # SECS is a float, we will return a float