summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-17 14:53:00 +0000
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-17 14:53:00 +0000
commit94468b4ea5d46eed4280841b7770f650870b52b3 (patch)
treef2e4cfaf96d362d3d00fc73c9624adb41f6edc07 /numeric.c
parentaf2d3c98664d83519a3334d560fad3ecdc6990ee (diff)
numeric.c, complex.c: Add finite? and infinite? consistent with Float
* numeric.c (num_finite_p, num_infinite_p): Add Numeric#finite? and Numeric#infinite? [Feature #12039] [ruby-core:73618] * complex.c (rb_complex_finite_p): Add Complex#finite? * complex.c (rb_complex_infinite_p): Add Complex#infinite? * test/ruby/test_bignum.rb: Add test for Integer#finite? and Integer#infinite? * test/ruby/test_fixnum.rb: ditto. * test/ruby/test_rational.rb: Add test for Rational#finite? and Rational#infinite? * test/ruby/test_complex.rb: Add test for Complex#finite? and Complex#infinite? git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55702 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/numeric.c b/numeric.c
index 7296ab704a..0c0ca82b49 100644
--- a/numeric.c
+++ b/numeric.c
@@ -673,6 +673,34 @@ num_nonzero_p(VALUE num)
/*
* call-seq:
+ * num.finite? -> true or false
+ *
+ * Return true if +num+ is finite number, oterwise returns false.
+ */
+static VALUE
+num_finite_p(VALUE num)
+{
+ return Qtrue;
+}
+
+/*
+ * call-seq:
+ * num.infinite? -> nil or 1 or -1
+ *
+ * Returns values corresponding to the value of +num+'s magnitude:
+ *
+ * +finite+:: +nil+
+ * +-Infinity+:: +-1+
+ * ++Infinity+:: ++1+
+ */
+static VALUE
+num_infinite_p(VALUE num)
+{
+ return Qnil;
+}
+
+/*
+ * call-seq:
* num.to_int -> integer
*
* Invokes the child class's +to_i+ method to convert +num+ to an integer.
@@ -5002,6 +5030,8 @@ Init_Numeric(void)
rb_define_method(rb_cNumeric, "integer?", num_int_p, 0);
rb_define_method(rb_cNumeric, "zero?", num_zero_p, 0);
rb_define_method(rb_cNumeric, "nonzero?", num_nonzero_p, 0);
+ rb_define_method(rb_cNumeric, "finite?", num_finite_p, 0);
+ rb_define_method(rb_cNumeric, "infinite?", num_infinite_p, 0);
rb_define_method(rb_cNumeric, "floor", num_floor, -1);
rb_define_method(rb_cNumeric, "ceil", num_ceil, -1);