131 lines
3.0 KiB
Python
131 lines
3.0 KiB
Python
# Tests the functions imported from math
|
|
|
|
try:
|
|
from math import *
|
|
except ImportError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
test_values = [-100.0, -1.23456, -1, -0.5, 0.0, 0.5, 1.23456, 100.0]
|
|
test_values_small = [
|
|
-10.0,
|
|
-1.23456,
|
|
-1,
|
|
-0.5,
|
|
0.0,
|
|
0.5,
|
|
1.23456,
|
|
10.0,
|
|
] # so we don't overflow 32-bit precision
|
|
unit_range_test_values = [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0]
|
|
|
|
functions = [
|
|
("sqrt", sqrt, test_values),
|
|
("exp", exp, test_values_small),
|
|
("log", log, test_values),
|
|
("cos", cos, test_values),
|
|
("sin", sin, test_values),
|
|
("tan", tan, test_values),
|
|
("acos", acos, unit_range_test_values),
|
|
("asin", asin, unit_range_test_values),
|
|
("atan", atan, test_values),
|
|
("ceil", ceil, test_values),
|
|
("fabs", fabs, test_values),
|
|
("floor", floor, test_values),
|
|
("trunc", trunc, test_values),
|
|
("radians", radians, test_values),
|
|
("degrees", degrees, test_values),
|
|
]
|
|
|
|
for function_name, function, test_vals in functions:
|
|
for value in test_vals:
|
|
try:
|
|
ans = "{:.5g}".format(function(value))
|
|
except ValueError as e:
|
|
ans = str(e)
|
|
print("{}({:.5g}) = {}".format(function_name, value, ans))
|
|
|
|
tuple_functions = [
|
|
("frexp", frexp, test_values),
|
|
("modf", modf, test_values),
|
|
]
|
|
|
|
for function_name, function, test_vals in tuple_functions:
|
|
for value in test_vals:
|
|
x, y = function(value)
|
|
print("{}({:.5g}) = ({:.5g}, {:.5g})".format(function_name, value, x, y))
|
|
|
|
binary_functions = [
|
|
(
|
|
"copysign",
|
|
copysign,
|
|
[(23.0, 42.0), (-23.0, 42.0), (23.0, -42.0), (-23.0, -42.0), (1.0, 0.0), (1.0, -0.0)],
|
|
),
|
|
(
|
|
"pow",
|
|
pow,
|
|
(
|
|
(1.0, 0.0),
|
|
(0.0, 1.0),
|
|
(2.0, 0.5),
|
|
(-3.0, 5.0),
|
|
(-3.0, -4.0),
|
|
),
|
|
),
|
|
(
|
|
"atan2",
|
|
atan2,
|
|
(
|
|
(1.0, 0.0),
|
|
(0.0, 1.0),
|
|
(2.0, 0.5),
|
|
(-3.0, 5.0),
|
|
(-3.0, -4.0),
|
|
),
|
|
),
|
|
(
|
|
"fmod",
|
|
fmod,
|
|
(
|
|
(1.0, 1.0),
|
|
(0.0, 1.0),
|
|
(2.0, 0.5),
|
|
(-3.0, 5.0),
|
|
(-3.0, -4.0),
|
|
),
|
|
),
|
|
(
|
|
"ldexp",
|
|
ldexp,
|
|
(
|
|
(1.0, 0),
|
|
(0.0, 1),
|
|
(2.0, 2),
|
|
(3.0, -2),
|
|
(-3.0, -4),
|
|
),
|
|
),
|
|
(
|
|
"log",
|
|
log,
|
|
(
|
|
(2.0, 2.0),
|
|
(3.0, 2.0),
|
|
(4.0, 5.0),
|
|
(0.0, 1.0),
|
|
(1.0, 0.0),
|
|
(-1.0, 1.0),
|
|
(1.0, -1.0),
|
|
(2.0, 1.0),
|
|
),
|
|
),
|
|
]
|
|
|
|
for function_name, function, test_vals in binary_functions:
|
|
for value1, value2 in test_vals:
|
|
try:
|
|
ans = "{:.5g}".format(function(value1, value2))
|
|
except (ValueError, ZeroDivisionError) as e:
|
|
ans = type(e)
|
|
print("{}({:.5g}, {:.5g}) = {}".format(function_name, value1, value2, ans))
|