Commit 576fdcdf authored by Paolo Bosetti's avatar Paolo Bosetti

Added some tests for trig functions in Math module. Also, tests are made...

Added some tests for trig functions in Math module. Also, tests are made against a tolerance on Floats
parent 0cc8dcc0
##
# Math Test
MATH_TOLERANCE = 1E-12
def check(a,b)
a = a.to_f
b = b.to_f
if a.finite? and b.finite?
(a-b).abs < MATH_TOLERANCE
else
true
end
end
assert('Math.sin 0') do
check(Math.sin(0), 0)
end
assert('Math.sin PI/2') do
check(Math.sin(Math::PI / 2), 1)
end
assert('Fundamental trig identities') do
result = true
N = 15
N.times do |i|
a = Math::PI / N * i
s = Math.sin(a)
c = Math.cos(a)
t = Math.tan(a)
result &= check(s, Math.cos(Math::PI / 2 - a))
result &= check(t, 1 / Math.tan(Math::PI / 2 - a))
result &= check(s ** 2 + c ** 2, 1)
result &= check(t ** 2 + 1, (1/c) ** 2)
result &= check((1/t) ** 2 + 1, (1/s) ** 2)
end
result
end
assert('Math.erf 0') do
Math.erf(0) == 0
check(Math.erf(0), 0)
end
assert('Math.exp 0') do
Math.exp(0) == 1.0
check(Math.exp(0), 1.0)
end
assert('Math.exp 1') do
Math.exp(1) == 2.718281828459045
check(Math.exp(1), 2.718281828459045)
end
assert('Math.exp 1.5') do
Math.exp(1.5) == 4.4816890703380645
check(Math.exp(1.5), 4.4816890703380645)
end
assert('Math.log 1') do
Math.log(1) == 0
check(Math.log(1), 0)
end
assert('Math.log E') do
Math.log(Math::E) == 1.0
check(Math.log(Math::E), 1.0)
end
assert('Math.log E**3') do
Math.log(Math::E**3) == 3.0
check(Math.log(Math::E**3), 3.0)
end
assert('Math.log2 1') do
Math.log2(1) == 0.0
check(Math.log2(1), 0.0)
end
assert('Math.log2 2') do
Math.log2(2) == 1.0
check(Math.log2(2), 1.0)
end
assert('Math.log10 1') do
Math.log10(1) == 0.0
check(Math.log10(1), 0.0)
end
assert('Math.log10 10') do
Math.log10(10) == 1.0
check(Math.log10(10), 1.0)
end
assert('Math.log10 10**100') do
Math.log10(10**100) == 100.0
check(Math.log10(10**100), 100.0)
end
assert('Math.cbrt') do
a = [-8, -1, 0, 1, 8].map do |i|
Math.cbrt(i)
num = [-2.0, -1.0, 0.0, 1.0, 2.0]
cub = [-8, -1, 0, 1, 8]
result = true
cub.each_with_index do |v,i|
result &= check(Math.cbrt(v), num[i])
end
a == [-2.0, -1.0, 0.0, 1.0, 2.0]
result
end
assert('Math.hypot') do
Math.hypot(3, 4) == 5.0
check(Math.hypot(3, 4), 5.0)
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment