92 lines
2.0 KiB
Python
92 lines
2.0 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 in (
|
|
("fabs", math.fabs),
|
|
("ceil", math.ceil),
|
|
("floor", math.floor),
|
|
("trunc", math.trunc),
|
|
("sqrt", math.sqrt),
|
|
("exp", math.exp),
|
|
("log", math.log),
|
|
("sin", math.sin),
|
|
("cos", math.cos),
|
|
("tan", math.tan),
|
|
("asin", math.asin),
|
|
("acos", math.acos),
|
|
("atan", math.atan),
|
|
("ldexp", lambda x: math.ldexp(x, 0)),
|
|
("radians", math.radians),
|
|
("degrees", math.degrees),
|
|
):
|
|
for x in (0, 1, 1.1, -1, -1.1, inf, -inf, nan):
|
|
try:
|
|
ans = "%.4f" % f(x)
|
|
except ValueError:
|
|
ans = "ValueError"
|
|
except OverflowError:
|
|
ans = "OverflowError"
|
|
print("%s(%.4f) = %s" % (name, x, ans))
|
|
|
|
# double argument functions
|
|
for name, f in (
|
|
("pow", math.pow),
|
|
("log", math.log),
|
|
("fmod", math.fmod),
|
|
("atan2", math.atan2),
|
|
("copysign", math.copysign),
|
|
):
|
|
for x in (
|
|
(0, 0),
|
|
(0, 2),
|
|
(0, -1),
|
|
(1, 0),
|
|
(1.2, 0),
|
|
(-1, 0),
|
|
(-1, 2),
|
|
(-1, 2.3),
|
|
(0, inf),
|
|
(0.5, inf),
|
|
(0.5, -inf),
|
|
(0.9, inf),
|
|
(0.9, -inf),
|
|
(1.2, inf),
|
|
(1.2, -inf),
|
|
(-0.5, inf),
|
|
(-0.5, -inf),
|
|
(-0.9, inf),
|
|
(-0.9, -inf),
|
|
(-1.2, inf),
|
|
(-1.2, -inf),
|
|
(inf, 0),
|
|
(inf, 1.2),
|
|
(inf, -1.2),
|
|
(inf, inf),
|
|
(inf, -inf),
|
|
(-inf, inf),
|
|
(-inf, -inf),
|
|
(0, nan),
|
|
(nan, 0),
|
|
(1, nan),
|
|
(nan, 1),
|
|
(inf, nan),
|
|
(nan, inf),
|
|
(nan, nan),
|
|
):
|
|
try:
|
|
ans = "%.4f" % f(*x)
|
|
except ValueError:
|
|
ans = "ValueError"
|
|
except ZeroDivisionError:
|
|
ans = "ZeroDivisionError"
|
|
print("%s(%.4f, %.4f) = %s" % (name, x[0], x[1], ans))
|