# Tests domain errors in special math functions

try:
    import math

    math.erf
except (ImportError, AttributeError):
    print("SKIP")
    raise SystemExit

inf = float("inf")
nan = float("nan")

# single argument functions
for name, f, args in (
    ("expm1", math.exp, ()),
    ("log2", math.log2, (-1, 0)),
    ("log10", math.log10, (-1, 0)),
    ("sinh", math.sinh, ()),
    ("cosh", math.cosh, ()),
    ("tanh", math.tanh, ()),
    ("asinh", math.asinh, ()),
    ("acosh", math.acosh, (-1, 0.9, 1)),
    ("atanh", math.atanh, (-1, 1)),
    ("erf", math.erf, ()),
    ("erfc", math.erfc, ()),
    ("gamma", math.gamma, (-2, -1, 0, 1)),
    ("lgamma", math.lgamma, (-2, -1, 0, 1)),
):
    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))
