From 2c7cee8a1a7886691f5103a4319fca411408b500 Mon Sep 17 00:00:00 2001 From: Paolo Bosetti Date: Mon, 4 Jun 2012 15:56:51 -0700 Subject: Added Math.sqrt() that was missing in math.c, and added relevant test case --- test/t/math.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'test/t/math.rb') diff --git a/test/t/math.rb b/test/t/math.rb index 5b9da4cb3..47a3bf527 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -76,6 +76,16 @@ assert('Math.log10 10**100') do check_float(Math.log10(10**100), 100.0) end +assert('Math.sqrt') do + num = [0.0, 1.0, 2.0, 3.0, 4.0] + sqr = [0, 1, 4, 9, 16] + result = true + sqr.each_with_index do |v,i| + result &= check_float(Math.sqrt(v), num[i]) + end + result +end + assert('Math.cbrt') do num = [-2.0, -1.0, 0.0, 1.0, 2.0] cub = [-8, -1, 0, 1, 8] -- cgit v1.2.3 From c09f804e2bd62fa861cf802181b26f2e01add7aa Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Thu, 21 Jun 2012 14:22:50 +0800 Subject: Skip math test in case that Math isn't implemented --- test/t/math.rb | 178 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 90 insertions(+), 88 deletions(-) (limited to 'test/t/math.rb') diff --git a/test/t/math.rb b/test/t/math.rb index 47a3bf527..d60d80ae7 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -1,115 +1,117 @@ ## # Math Test -assert('Math.sin 0') do - check_float(Math.sin(0), 0) -end +if MathEnabled + assert('Math.sin 0') do + check_float(Math.sin(0), 0) + end -assert('Math.sin PI/2') do - check_float(Math.sin(Math::PI / 2), 1) -end + assert('Math.sin PI/2') do + check_float(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 + ca = Math::PI / 2 - a + s = Math.sin(a) + c = Math.cos(a) + t = Math.tan(a) + result &= check_float(s, Math.cos(ca)) + result &= check_float(t, 1 / Math.tan(ca)) + result &= check_float(s ** 2 + c ** 2, 1) + result &= check_float(t ** 2 + 1, (1/c) ** 2) + result &= check_float((1/t) ** 2 + 1, (1/s) ** 2) + end + result + end -assert('Fundamental trig identities') do - result = true - N = 15 - N.times do |i| - a = Math::PI / N * i - ca = Math::PI / 2 - a - s = Math.sin(a) - c = Math.cos(a) - t = Math.tan(a) - result &= check_float(s, Math.cos(ca)) - result &= check_float(t, 1 / Math.tan(ca)) - result &= check_float(s ** 2 + c ** 2, 1) - result &= check_float(t ** 2 + 1, (1/c) ** 2) - result &= check_float((1/t) ** 2 + 1, (1/s) ** 2) - end - result -end + assert('Math.erf 0') do + check_float(Math.erf(0), 0) + end -assert('Math.erf 0') do - check_float(Math.erf(0), 0) -end + assert('Math.exp 0') do + check_float(Math.exp(0), 1.0) + end -assert('Math.exp 0') do - check_float(Math.exp(0), 1.0) -end + assert('Math.exp 1') do + check_float(Math.exp(1), 2.718281828459045) + end -assert('Math.exp 1') do - check_float(Math.exp(1), 2.718281828459045) -end + assert('Math.exp 1.5') do + check_float(Math.exp(1.5), 4.4816890703380645) + end -assert('Math.exp 1.5') do - check_float(Math.exp(1.5), 4.4816890703380645) -end + assert('Math.log 1') do + check_float(Math.log(1), 0) + end -assert('Math.log 1') do - check_float(Math.log(1), 0) -end + assert('Math.log E') do + check_float(Math.log(Math::E), 1.0) + end -assert('Math.log E') do - check_float(Math.log(Math::E), 1.0) -end + assert('Math.log E**3') do + check_float(Math.log(Math::E**3), 3.0) + end -assert('Math.log E**3') do - check_float(Math.log(Math::E**3), 3.0) -end + assert('Math.log2 1') do + check_float(Math.log2(1), 0.0) + end -assert('Math.log2 1') do - check_float(Math.log2(1), 0.0) -end + assert('Math.log2 2') do + check_float(Math.log2(2), 1.0) + end -assert('Math.log2 2') do - check_float(Math.log2(2), 1.0) -end + assert('Math.log10 1') do + check_float(Math.log10(1), 0.0) + end -assert('Math.log10 1') do - check_float(Math.log10(1), 0.0) -end + assert('Math.log10 10') do + check_float(Math.log10(10), 1.0) + end -assert('Math.log10 10') do - check_float(Math.log10(10), 1.0) -end + assert('Math.log10 10**100') do + check_float(Math.log10(10**100), 100.0) + end -assert('Math.log10 10**100') do - check_float(Math.log10(10**100), 100.0) -end + assert('Math.sqrt') do + num = [0.0, 1.0, 2.0, 3.0, 4.0] + sqr = [0, 1, 4, 9, 16] + result = true + sqr.each_with_index do |v,i| + result &= check_float(Math.sqrt(v), num[i]) + end + result + end -assert('Math.sqrt') do - num = [0.0, 1.0, 2.0, 3.0, 4.0] - sqr = [0, 1, 4, 9, 16] - result = true - sqr.each_with_index do |v,i| - result &= check_float(Math.sqrt(v), num[i]) + assert('Math.cbrt') do + 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_float(Math.cbrt(v), num[i]) + end + result end - result -end -assert('Math.cbrt') do - 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_float(Math.cbrt(v), num[i]) + assert('Math.hypot') do + check_float(Math.hypot(3, 4), 5.0) end - result -end -assert('Math.hypot') do - check_float(Math.hypot(3, 4), 5.0) -end + assert('Math.frexp 1234') do + n = 1234 + fraction, exponent = Math.frexp(n) + check_float(Math.ldexp(fraction, exponent), n) + end -assert('Math.frexp 1234') do - n = 1234 - fraction, exponent = Math.frexp(n) - check_float(Math.ldexp(fraction, exponent), n) -end + assert('Math.erf 1') do + check_float(Math.erf(1), 0.842700792949715) + end -assert('Math.erf 1') do - check_float(Math.erf(1), 0.842700792949715) + assert('Math.erfc 1') do + check_float(Math.erfc(1), 0.157299207050285) + end end -assert('Math.erfc 1') do - check_float(Math.erfc(1), 0.157299207050285) -end -- cgit v1.2.3 From 8e89cd456cca0402c639d31031df29fceaa49ef6 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Thu, 21 Jun 2012 15:01:39 +0800 Subject: only execute math tests if math feature is activated --- test/t/math.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/t/math.rb') diff --git a/test/t/math.rb b/test/t/math.rb index d60d80ae7..025551b82 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -1,7 +1,7 @@ ## # Math Test -if MathEnabled +if Object.const_defined?(:Math) assert('Math.sin 0') do check_float(Math.sin(0), 0) end -- cgit v1.2.3 From 883b97ab05ac8e509ff575c0c8533066f7e900c7 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 1 Aug 2012 01:23:34 +0900 Subject: some test requires double precision --- src/math.c | 2 +- test/t/math.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'test/t/math.rb') diff --git a/src/math.c b/src/math.c index fe10848c3..9aae87acd 100644 --- a/src/math.c +++ b/src/math.c @@ -647,7 +647,7 @@ mrb_init_math(mrb_state *mrb) #endif #ifdef MRB_USE_FLOAT - mrb_define_const(mrb, mrb_math, "TOLERANCE", mrb_float_value(1e-6)); + mrb_define_const(mrb, mrb_math, "TOLERANCE", mrb_float_value(1e-5)); #else mrb_define_const(mrb, mrb_math, "TOLERANCE", mrb_float_value(1e-12)); #endif diff --git a/test/t/math.rb b/test/t/math.rb index 025551b82..d71e44fc9 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -12,7 +12,7 @@ if Object.const_defined?(:Math) assert('Fundamental trig identities') do result = true - N = 15 + N = 13 N.times do |i| a = Math::PI / N * i ca = Math::PI / 2 - a -- cgit v1.2.3