mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge branch 'tests' of github.com:pbosetti/mruby into tests
This commit is contained in:
+6
-3
@@ -10,6 +10,8 @@
|
||||
#define domain_error(msg) \
|
||||
mrb_raise(mrb, E_RANGE_ERROR, "Numerical argument is out of domain - " #msg);
|
||||
|
||||
#define MATH_TOLERANCE 1E-12
|
||||
|
||||
/* math functions not provided under Microsoft Visual C++ */
|
||||
#ifdef _MSC_VER
|
||||
#define asinh(x) log(x + sqrt(pow(x,2.0) + 1))
|
||||
@@ -25,7 +27,7 @@ erfc(double x);
|
||||
** Implementations of error functions
|
||||
** credits to http://www.digitalmars.com/archives/cplusplus/3634.html
|
||||
*/
|
||||
#define REL_ERROR 1E-12
|
||||
|
||||
/* Implementation of Error function */
|
||||
double
|
||||
erf(double x)
|
||||
@@ -45,7 +47,7 @@ erf(double x)
|
||||
term *= xsqr/j;
|
||||
sum += term/(2*j+1);
|
||||
++j;
|
||||
} while (fabs(term)/sum > REL_ERROR);
|
||||
} while (fabs(term)/sum > MATH_TOLERANCE);
|
||||
return two_sqrtpi*sum;
|
||||
}
|
||||
|
||||
@@ -77,7 +79,7 @@ erfc(double x)
|
||||
n += 0.5;
|
||||
q1 = q2;
|
||||
q2 = b/d;
|
||||
} while (fabs(q1-q2)/q2 > REL_ERROR);
|
||||
} while (fabs(q1-q2)/q2 > MATH_TOLERANCE);
|
||||
return one_sqrtpi*exp(-x*x)*q2;
|
||||
}
|
||||
|
||||
@@ -610,6 +612,7 @@ mrb_init_math(mrb_state *mrb)
|
||||
struct RClass *mrb_math;
|
||||
mrb_math = mrb_define_module(mrb, "Math");
|
||||
|
||||
mrb_define_const(mrb, mrb_math, "TOLERANCE", mrb_float_value(MATH_TOLERANCE));
|
||||
#ifdef M_PI
|
||||
mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(M_PI));
|
||||
#else
|
||||
|
||||
+1
-1
@@ -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])
|
||||
|
||||
+2
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user