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 --- src/math.c | 20 ++++++++++++++++++++ test/t/math.rb | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/math.c b/src/math.c index b0d911573..eff2edcad 100644 --- a/src/math.c +++ b/src/math.c @@ -463,6 +463,25 @@ math_log10(mrb_state *mrb, mrb_value obj) return mrb_float_value(x); } +/* + * call-seq: + * Math.sqrt(numeric) -> float + * + * Returns the square root of numeric. + * + */ +static mrb_value +math_sqrt(mrb_state *mrb, mrb_value obj) +{ + mrb_float x; + + mrb_get_args(mrb, "f", &x); + x = sqrt(x); + + return mrb_float_value(x); +} + + /* * call-seq: * Math.cbrt(numeric) -> float @@ -646,6 +665,7 @@ mrb_init_math(mrb_state *mrb) mrb_define_module_function(mrb, mrb_math, "log", math_log, -1); mrb_define_module_function(mrb, mrb_math, "log2", math_log2, 1); mrb_define_module_function(mrb, mrb_math, "log10", math_log10, 1); + mrb_define_module_function(mrb, mrb_math, "sqrt", math_sqrt, 1); mrb_define_module_function(mrb, mrb_math, "cbrt", math_cbrt, 1); mrb_define_module_function(mrb, mrb_math, "frexp", math_frexp, 1); 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