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 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 assert('Math.erf 0') do
Math.erf(0) == 0 check(Math.erf(0), 0)
end end
assert('Math.exp 0') do assert('Math.exp 0') do
Math.exp(0) == 1.0 check(Math.exp(0), 1.0)
end end
assert('Math.exp 1') do assert('Math.exp 1') do
Math.exp(1) == 2.718281828459045 check(Math.exp(1), 2.718281828459045)
end end
assert('Math.exp 1.5') do assert('Math.exp 1.5') do
Math.exp(1.5) == 4.4816890703380645 check(Math.exp(1.5), 4.4816890703380645)
end end
assert('Math.log 1') do assert('Math.log 1') do
Math.log(1) == 0 check(Math.log(1), 0)
end end
assert('Math.log E') do assert('Math.log E') do
Math.log(Math::E) == 1.0 check(Math.log(Math::E), 1.0)
end end
assert('Math.log E**3') do assert('Math.log E**3') do
Math.log(Math::E**3) == 3.0 check(Math.log(Math::E**3), 3.0)
end end
assert('Math.log2 1') do assert('Math.log2 1') do
Math.log2(1) == 0.0 check(Math.log2(1), 0.0)
end end
assert('Math.log2 2') do assert('Math.log2 2') do
Math.log2(2) == 1.0 check(Math.log2(2), 1.0)
end end
assert('Math.log10 1') do assert('Math.log10 1') do
Math.log10(1) == 0.0 check(Math.log10(1), 0.0)
end end
assert('Math.log10 10') do assert('Math.log10 10') do
Math.log10(10) == 1.0 check(Math.log10(10), 1.0)
end end
assert('Math.log10 10**100') do assert('Math.log10 10**100') do
Math.log10(10**100) == 100.0 check(Math.log10(10**100), 100.0)
end end
assert('Math.cbrt') do assert('Math.cbrt') do
a = [-8, -1, 0, 1, 8].map do |i| num = [-2.0, -1.0, 0.0, 1.0, 2.0]
Math.cbrt(i) cub = [-8, -1, 0, 1, 8]
result = true
cub.each_with_index do |v,i|
result &= check(Math.cbrt(v), num[i])
end end
result
a == [-2.0, -1.0, 0.0, 1.0, 2.0]
end end
assert('Math.hypot') do assert('Math.hypot') do
Math.hypot(3, 4) == 5.0 check(Math.hypot(3, 4), 5.0)
end 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