diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-07-17 14:53:00 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-07-17 14:53:00 +0000 |
commit | 94468b4ea5d46eed4280841b7770f650870b52b3 (patch) | |
tree | f2e4cfaf96d362d3d00fc73c9624adb41f6edc07 /numeric.c | |
parent | af2d3c98664d83519a3334d560fad3ecdc6990ee (diff) | |
download | ruby-94468b4ea5d46eed4280841b7770f650870b52b3.tar.gz |
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.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -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); |