Commit d1f6f504 authored by Paolo Bosetti's avatar Paolo Bosetti

Added some tests for Math module. Some refactoring in math.c; numeric...

Added some tests for Math module. Some refactoring in math.c; numeric tolerance exported as Math::TOLERANCE and also used for fuzzy tests in mrbtest suite
parent 8027d512
## ##
# Math Test # Math Test
##
# Performs fuzzy check for equality on methods returning floats
# on the basis of the Math::TOLERANCE constant.
def check(a,b) def check(a,b)
a = a.to_f a = a.to_f
b = b.to_f b = b.to_f
...@@ -11,9 +14,8 @@ def check(a,b) ...@@ -11,9 +14,8 @@ def check(a,b)
end end
end end
assert('Math.sin 0') do assert('Math.sin 0') do
check(Math.sin(0), 1) check(Math.sin(0), 0)
end end
assert('Math.sin PI/2') do assert('Math.sin PI/2') do
...@@ -26,11 +28,12 @@ assert('Fundamental trig identities') do ...@@ -26,11 +28,12 @@ assert('Fundamental trig identities') do
N = 15 N = 15
N.times do |i| N.times do |i|
a = Math::PI / N * i a = Math::PI / N * i
ca = Math::PI / 2 - a
s = Math.sin(a) s = Math.sin(a)
c = Math.cos(a) c = Math.cos(a)
t = Math.tan(a) t = Math.tan(a)
result &= check(s, Math.cos(Math::PI / 2 - a)) result &= check(s, Math.cos(ca))
result &= check(t, 1 / Math.tan(Math::PI / 2 - a)) result &= check(t, 1 / Math.tan(ca))
result &= check(s ** 2 + c ** 2, 1) result &= check(s ** 2 + c ** 2, 1)
result &= check(t ** 2 + 1, (1/c) ** 2) result &= check(t ** 2 + 1, (1/c) ** 2)
result &= check((1/t) ** 2 + 1, (1/s) ** 2) result &= check((1/t) ** 2 + 1, (1/s) ** 2)
...@@ -100,3 +103,16 @@ assert('Math.hypot') do ...@@ -100,3 +103,16 @@ assert('Math.hypot') do
check(Math.hypot(3, 4), 5.0) check(Math.hypot(3, 4), 5.0)
end end
assert('Math.frexp 1234') do
n = 1234
fraction, exponent = Math.frexp(n)
check(Math.ldexp(fraction, exponent), n)
end
assert('Math.erf 1') do
check(Math.erf(1), 0.842700792949715)
end
assert('Math.erfc 1') do
check(Math.erfc(1), 0.157299207050285)
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