diff options
author | Damien George <damien@micropython.org> | 2023-02-23 10:53:39 +1100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-02-24 15:55:12 +1100 |
commit | 2e4dda3c2072c4de15ac8d51ddb471b9c3833db7 (patch) | |
tree | 67dfb031c40e96f41b37d4a3736ce8caa9ae79bb /tests/float/math_domain.py | |
parent | 5327cd1021dc92cad428ff44cb114c4a94c0bc45 (diff) |
py/modmath: Fix two-argument math function domain check.
Prior to this fix, pow(1.5, inf) and pow(0.5, -inf) (among other things)
would incorrectly raise a ValueError, because the result is inf with the
first argument being finite. This commit fixes this by allowing the result
to be infinite if the first or second (or both) argument is infinite.
This fix doesn't affect the other three math functions that have two
arguments:
- atan2 never returns inf, so always fails isinf(ans)
- copysign returns inf only if the first argument x is inf, so will never
reach the isinf(y) check
- fmod never returns inf, so always fails isinf(ans)
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests/float/math_domain.py')
-rw-r--r-- | tests/float/math_domain.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/tests/float/math_domain.py b/tests/float/math_domain.py index 063d509b5..606a65528 100644 --- a/tests/float/math_domain.py +++ b/tests/float/math_domain.py @@ -39,7 +39,26 @@ for name, f, args in ( # double argument functions for name, f, args in ( - ("pow", math.pow, ((0, 2), (-1, 2), (0, -1), (-1, 2.3), (nan, 0), (1, nan))), + ( + "pow", + math.pow, + ( + (0, 2), + (-1, 2), + (0, -1), + (-1, 2.3), + (0.5, inf), + (-0.5, inf), + (0.5, -inf), + (-0.5, -inf), + (1.5, inf), + (-1.5, inf), + (1.5, -inf), + (-1.5, -inf), + (nan, 0), + (1, nan), + ), + ), ("log", math.log, ()), ("fmod", math.fmod, ((1.2, inf), (1.2, -inf), (1.2, 0), (inf, 1.2))), ("atan2", math.atan2, ((0, 0), (-inf, inf), (-inf, -inf), (inf, -inf))), |