mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
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
This commit is contained in:
+24
-8
@@ -1,6 +1,9 @@
|
||||
##
|
||||
# Math Test
|
||||
|
||||
##
|
||||
# Performs fuzzy check for equality on methods returning floats
|
||||
# on the basis of the Math::TOLERANCE constant.
|
||||
def check(a,b)
|
||||
a = a.to_f
|
||||
b = b.to_f
|
||||
@@ -11,9 +14,8 @@ def check(a,b)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
assert('Math.sin 0') do
|
||||
check(Math.sin(0), 1)
|
||||
check(Math.sin(0), 0)
|
||||
end
|
||||
|
||||
assert('Math.sin PI/2') do
|
||||
@@ -25,12 +27,13 @@ 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))
|
||||
a = Math::PI / N * i
|
||||
ca = Math::PI / 2 - a
|
||||
s = Math.sin(a)
|
||||
c = Math.cos(a)
|
||||
t = Math.tan(a)
|
||||
result &= check(s, Math.cos(ca))
|
||||
result &= check(t, 1 / Math.tan(ca))
|
||||
result &= check(s ** 2 + c ** 2, 1)
|
||||
result &= check(t ** 2 + 1, (1/c) ** 2)
|
||||
result &= check((1/t) ** 2 + 1, (1/s) ** 2)
|
||||
@@ -100,3 +103,16 @@ assert('Math.hypot') do
|
||||
check(Math.hypot(3, 4), 5.0)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user