summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-kernel-ext/src/kernel.c22
-rw-r--r--mrbgems/mruby-kernel-ext/test/kernel.rb7
2 files changed, 29 insertions, 0 deletions
diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c
index 10b0bc1ce..63a671aa9 100644
--- a/mrbgems/mruby-kernel-ext/src/kernel.c
+++ b/mrbgems/mruby-kernel-ext/src/kernel.c
@@ -25,6 +25,27 @@ mrb_f_method(mrb_state *mrb, mrb_value self)
/*
* call-seq:
+ * Float(arg) -> float
+ *
+ * Returns <i>arg</i> converted to a float. Numeric types are converted
+ * directly, the rest are converted using <i>arg</i>.to_f.
+ *
+ * Float(1) #=> 1.0
+ * Float(123.456) #=> 123.456
+ * Float("123.456") #=> 123.456
+ * Float(nil) #=> TypeError
+ */
+static mrb_value
+mrb_f_float(mrb_state *mrb, mrb_value self)
+{
+ mrb_value arg;
+
+ mrb_get_args(mrb, "o", &arg);
+ return mrb_Float(mrb, arg);
+}
+
+/*
+ * call-seq:
* String(arg) -> string
*
* Returns <i>arg</i> as an <code>String</code>.
@@ -116,6 +137,7 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb)
mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2));
mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE());
+ mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, krn, "Array", mrb_f_array, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, krn, "Hash", mrb_f_hash, MRB_ARGS_REQ(1));
diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb
index 8ad953262..3e6758b1b 100644
--- a/mrbgems/mruby-kernel-ext/test/kernel.rb
+++ b/mrbgems/mruby-kernel-ext/test/kernel.rb
@@ -17,6 +17,13 @@ assert('Kernel#__method__') do
assert_equal(:m2, c.new.m2)
end
+assert('Kernel#Float') do
+ assert_equal(1.0, Float(1))
+ assert_equal(123.456, Float(123.456))
+ assert_equal(123.456, Float("123.456"))
+ assert_raise(TypeError) { Float(nil) }
+end
+
assert('Kernel#String') do
assert_equal("main", String(self))
assert_equal("Object", String(self.class))