summaryrefslogtreecommitdiffstatshomepage
path: root/tests/float/math_domain.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/float/math_domain.py')
-rw-r--r--tests/float/math_domain.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/float/math_domain.py b/tests/float/math_domain.py
new file mode 100644
index 0000000000..0cf10fb2ad
--- /dev/null
+++ b/tests/float/math_domain.py
@@ -0,0 +1,51 @@
+# 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')