# guide the C implementation; it's way more convoluted than speed-
# ignoring auto-overflow-to-long idiomatic Python could be.
- # XXX Check that all inputs are ints or floats.
+ for name, value in (
+ ("days", days),
+ ("seconds", seconds),
+ ("microseconds", microseconds),
+ ("milliseconds", milliseconds),
+ ("minutes", minutes),
+ ("hours", hours),
+ ("weeks", weeks)
+ ):
+ if not isinstance(value, (int, float)):
+ raise TypeError(
+ f"unsupported type for timedelta {name} component: {type(value).__name__}"
+ )
# Final values, all integer.
# s and us fit in 32-bit signed ints; d isn't bounded.
def test_constructor(self):
eq = self.assertEqual
+ ra = self.assertRaises
td = timedelta
# Check keyword args to constructor
eq(td(seconds=0.001), td(milliseconds=1))
eq(td(milliseconds=0.001), td(microseconds=1))
+ # Check type of args to constructor
+ ra(TypeError, lambda: td(weeks='1'))
+ ra(TypeError, lambda: td(days='1'))
+ ra(TypeError, lambda: td(hours='1'))
+ ra(TypeError, lambda: td(minutes='1'))
+ ra(TypeError, lambda: td(seconds='1'))
+ ra(TypeError, lambda: td(milliseconds='1'))
+ ra(TypeError, lambda: td(microseconds='1'))
+
def test_computations(self):
eq = self.assertEqual
td = timedelta