summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-02-02 23:39:00 -0800
committerYukihiro "Matz" Matsumoto <[email protected]>2014-02-02 23:39:00 -0800
commit33bb4578a2ae15e58cb1270adbe9af36d6436311 (patch)
tree8f9064a52ce580aaa12228e1caa066fb5b54132b
parent857e3cfa7cff59425eeb9c92bd4aff5494feaab0 (diff)
parent7bf63c28769ebccb660294a38330a6abc3a22be1 (diff)
downloadmruby-33bb4578a2ae15e58cb1270adbe9af36d6436311.tar.gz
mruby-33bb4578a2ae15e58cb1270adbe9af36d6436311.zip
Merge pull request #1678 from iij/float-nan-p
add Float#nan?
-rw-r--r--src/numeric.c7
-rw-r--r--test/t/float.rb7
2 files changed, 14 insertions, 0 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 0b841bf70..8f9d1ba25 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -612,6 +612,12 @@ flo_truncate(mrb_state *mrb, mrb_value num)
return mrb_fixnum_value((mrb_int)f);
}
+static mrb_value
+flo_nan_p(mrb_state *mrb, mrb_value num)
+{
+ return mrb_bool_value(isnan(mrb_float(num)));
+}
+
/*
* Document-class: Integer
*
@@ -1331,4 +1337,5 @@ mrb_init_numeric(mrb_state *mrb)
mrb_define_method(mrb, fl, "to_s", flo_to_s, MRB_ARGS_NONE()); /* 15.2.9.3.16(x) */
mrb_define_method(mrb, fl, "inspect", flo_to_s, MRB_ARGS_NONE());
+ mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
}
diff --git a/test/t/float.rb b/test/t/float.rb
index f70bf2d66..0c67f510a 100644
--- a/test/t/float.rb
+++ b/test/t/float.rb
@@ -143,3 +143,10 @@ assert('Float#truncate', '15.2.9.3.15') do
assert_equal( 3, 3.123456789.truncate)
assert_equal(-3, -3.1.truncate)
end
+
+assert('Float#nan?') do
+ assert_true (0.0/0.0).nan?
+ assert_false 0.0.nan?
+ assert_false (1.0/0.0).nan?
+ assert_false (-1.0/0.0).nan?
+end