From 5760ad7d594b731e17954674dda448dfd4c1b7aa Mon Sep 17 00:00:00 2001 From: Paolo Bosetti Date: Thu, 17 May 2012 17:40:21 -0700 Subject: Minor edits in tests for Math module --- test/assert.rb | 2 +- test/t/math.rb | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/test/assert.rb b/test/assert.rb index afc39fc24..54b50138e 100644 --- a/test/assert.rb +++ b/test/assert.rb @@ -22,7 +22,7 @@ end # iso : The ISO reference code of the feature # which will be tested by this # assertion -def assert(str = 'Assertion failed', iso = '') +def assert(str = 'Assertion failed', iso = 'No ISO') begin if(!yield) $asserts.push([str, iso]) diff --git a/test/t/math.rb b/test/t/math.rb index 0f42e7d49..eb4cebabc 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -1,12 +1,11 @@ ## # 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 + (a-b).abs < Math::TOLERANCE else true end @@ -14,7 +13,7 @@ end assert('Math.sin 0') do - check(Math.sin(0), 0) + check(Math.sin(0), 1) end assert('Math.sin PI/2') do -- cgit v1.2.3 From d1f6f504d52ced12a9d58aa98b7ee158feef26ee Mon Sep 17 00:00:00 2001 From: Paolo Bosetti Date: Thu, 17 May 2012 23:50:56 -0700 Subject: 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 --- test/t/math.rb | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'test') diff --git a/test/t/math.rb b/test/t/math.rb index eb4cebabc..a9c7e7fb7 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -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 -- cgit v1.2.3