micropython/tests/float/math_domain.py

52 lines
1.4 KiB
Python

# Tests domain errors in math functions
try:
import math
except ImportError:
print("SKIP")
raise SystemExit
inf = float('inf')
nan = float('nan')
# single argument functions
for name, f, args in (
('fabs', math.fabs, ()),
('ceil', math.ceil, ()),
('floor', math.floor, ()),
('trunc', math.trunc, ()),
('sqrt', math.sqrt, (-1, 0)),
('exp', math.exp, ()),
('sin', math.sin, ()),
('cos', math.cos, ()),
('tan', math.tan, ()),
('asin', math.asin, (-1.1, 1, 1.1)),
('acos', math.acos, (-1.1, 1, 1.1)),
('atan', math.atan, ()),
('ldexp', lambda x: math.ldexp(x, 0), ()),
('radians', math.radians, ()),
('degrees', math.degrees, ()),
):
for x in args + (inf, nan):
try:
ans = f(x)
print('%.4f' % ans)
except ValueError:
print(name, 'ValueError')
except OverflowError:
print(name, 'OverflowError')
# double argument functions
for name, f, args in (
('pow', math.pow, ((0, 2), (-1, 2), (0, -1), (-1, 2.3))),
('fmod', math.fmod, ((1.2, inf), (1.2, 0), (inf, 1.2))),
('atan2', math.atan2, ((0, 0),)),
('copysign', math.copysign, ()),
):
for x in args + ((0, inf), (inf, 0), (inf, inf), (inf, nan), (nan, inf), (nan, nan)):
try:
ans = f(*x)
print('%.4f' % ans)
except ValueError:
print(name, 'ValueError')