* bignum.c (Bignum#even?, Bignum#odd?): remove definitions
because they are unified with Integer#even? and Integer#odd?. * numeric.c (Fixnum#zero?, Fixnum#even?, Fixnum#odd?): remove definitions because they are unified with Numeric#zero?, Integer#even?, and Integer#odd?. * numeric.c (num_zero_p, int_even_p, int_odd_p): treat Fixnum and Bignum values directly. * test/ruby/test_integer.rb (test_odd_p_even_p): remove meaningless test case. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54164 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a3c9cda6d7
commit
aa1ea07d37
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
Fri Mar 18 02:07:00 2016 Kenta Murata <mrkn@mrkn.jp>
|
||||||
|
|
||||||
|
* bignum.c (Bignum#even?, Bignum#odd?): remove definitions
|
||||||
|
because they are unified with Integer#even? and Integer#odd?.
|
||||||
|
|
||||||
|
* numeric.c (Fixnum#zero?, Fixnum#even?, Fixnum#odd?): remove
|
||||||
|
definitions because they are unified with Numeric#zero?,
|
||||||
|
Integer#even?, and Integer#odd?.
|
||||||
|
|
||||||
|
* numeric.c (num_zero_p, int_even_p, int_odd_p): treat Fixnum and
|
||||||
|
Bignum values directly.
|
||||||
|
|
||||||
|
* test/ruby/test_integer.rb (test_odd_p_even_p): remove meaningless
|
||||||
|
test case.
|
||||||
|
|
||||||
Fri Mar 18 01:51:00 2016 Kenta Murata <mrkn@mrkn.jp>
|
Fri Mar 18 01:51:00 2016 Kenta Murata <mrkn@mrkn.jp>
|
||||||
|
|
||||||
* bignum.c (rb_big_even_p, rb_big_odd_p): make them public functions
|
* bignum.c (rb_big_even_p, rb_big_odd_p): make them public functions
|
||||||
|
2
bignum.c
2
bignum.c
@ -7091,8 +7091,6 @@ Init_Bignum(void)
|
|||||||
rb_define_method(rb_cBignum, "magnitude", rb_big_abs, 0);
|
rb_define_method(rb_cBignum, "magnitude", rb_big_abs, 0);
|
||||||
rb_define_method(rb_cBignum, "size", rb_big_size, 0);
|
rb_define_method(rb_cBignum, "size", rb_big_size, 0);
|
||||||
rb_define_method(rb_cBignum, "bit_length", rb_big_bit_length, 0);
|
rb_define_method(rb_cBignum, "bit_length", rb_big_bit_length, 0);
|
||||||
rb_define_method(rb_cBignum, "odd?", rb_big_odd_p, 0);
|
|
||||||
rb_define_method(rb_cBignum, "even?", rb_big_even_p, 0);
|
|
||||||
|
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
/* The version of loaded GMP. */
|
/* The version of loaded GMP. */
|
||||||
|
23
numeric.c
23
numeric.c
@ -605,7 +605,15 @@ num_abs(VALUE num)
|
|||||||
static VALUE
|
static VALUE
|
||||||
num_zero_p(VALUE num)
|
num_zero_p(VALUE num)
|
||||||
{
|
{
|
||||||
if (rb_equal(num, INT2FIX(0))) {
|
if (FIXNUM_P(num)) {
|
||||||
|
if (FIX2LONG(num) == 0) {
|
||||||
|
return Qtrue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (RB_TYPE_P(num, T_BIGNUM)) {
|
||||||
|
return rb_bigzero_p(num);
|
||||||
|
}
|
||||||
|
else if (rb_equal(num, INT2FIX(0))) {
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
@ -2670,7 +2678,15 @@ int_int_p(VALUE num)
|
|||||||
static VALUE
|
static VALUE
|
||||||
int_odd_p(VALUE num)
|
int_odd_p(VALUE num)
|
||||||
{
|
{
|
||||||
if (rb_funcall(num, '%', 1, INT2FIX(2)) != INT2FIX(0)) {
|
if (FIXNUM_P(num)) {
|
||||||
|
if (num & 2) {
|
||||||
|
return Qtrue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (RB_TYPE_P(num, T_BIGNUM)) {
|
||||||
|
return rb_big_odd_p(num);
|
||||||
|
}
|
||||||
|
else if (rb_funcall(num, '%', 1, INT2FIX(2)) != INT2FIX(0)) {
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
@ -4268,9 +4284,6 @@ Init_Numeric(void)
|
|||||||
rb_define_method(rb_cFixnum, "to_f", fix_to_f, 0);
|
rb_define_method(rb_cFixnum, "to_f", fix_to_f, 0);
|
||||||
rb_define_method(rb_cFixnum, "size", fix_size, 0);
|
rb_define_method(rb_cFixnum, "size", fix_size, 0);
|
||||||
rb_define_method(rb_cFixnum, "bit_length", rb_fix_bit_length, 0);
|
rb_define_method(rb_cFixnum, "bit_length", rb_fix_bit_length, 0);
|
||||||
rb_define_method(rb_cFixnum, "zero?", fix_zero_p, 0);
|
|
||||||
rb_define_method(rb_cFixnum, "odd?", fix_odd_p, 0);
|
|
||||||
rb_define_method(rb_cFixnum, "even?", fix_even_p, 0);
|
|
||||||
rb_define_method(rb_cFixnum, "succ", fix_succ, 0);
|
rb_define_method(rb_cFixnum, "succ", fix_succ, 0);
|
||||||
|
|
||||||
rb_cFloat = rb_define_class("Float", rb_cNumeric);
|
rb_cFloat = rb_define_class("Float", rb_cNumeric);
|
||||||
|
@ -105,26 +105,6 @@ class TestInteger < Test::Unit::TestCase
|
|||||||
assert_predicate(1, :integer?)
|
assert_predicate(1, :integer?)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_odd_p_even_p
|
|
||||||
Fixnum.class_eval do
|
|
||||||
alias odd_bak odd?
|
|
||||||
alias even_bak even?
|
|
||||||
remove_method :odd?, :even?
|
|
||||||
end
|
|
||||||
|
|
||||||
assert_predicate(1, :odd?)
|
|
||||||
assert_not_predicate(2, :odd?)
|
|
||||||
assert_not_predicate(1, :even?)
|
|
||||||
assert_predicate(2, :even?)
|
|
||||||
|
|
||||||
ensure
|
|
||||||
Fixnum.class_eval do
|
|
||||||
alias odd? odd_bak
|
|
||||||
alias even? even_bak
|
|
||||||
remove_method :odd_bak, :even_bak
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_succ
|
def test_succ
|
||||||
assert_equal(2, 1.send(:succ))
|
assert_equal(2, 1.send(:succ))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user