summaryrefslogtreecommitdiff
path: root/tests/float/math_domain.py
blob: 063d509b5935d9d85199daa472edb4698bf0ccda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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, ()),
    ("log", math.log, ()),
    ("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, -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, args in (
    ("pow", math.pow, ((0, 2), (-1, 2), (0, -1), (-1, 2.3), (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))),
    ("copysign", math.copysign, ()),
):
    for x in args + ((0, inf), (inf, 0), (inf, inf), (inf, nan), (nan, inf), (nan, nan)):
        try:
            ans = "%.4f" % f(*x)
        except ValueError:
            ans = "ValueError"
        print("%s(%.4f, %.4f) = %s" % (name, x[0], x[1], ans))