Merge pull request #6314 from hoshiumiarata/optimize_int_even

This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-07-24 08:11:43 +09:00
committed by GitHub
2 changed files with 28 additions and 2 deletions
+2 -2
View File
@@ -232,8 +232,8 @@ int_even(mrb_state *mrb, mrb_value self)
{
#ifdef MRB_USE_BIGINT
if (mrb_bigint_p(self)) {
mrb_value mod2 = mrb_bint_mod(mrb, self, mrb_fixnum_value(2));
if (mrb_integer(mod2) == 0) return mrb_true_value();
mrb_value and1 = mrb_bint_and(mrb, self, mrb_fixnum_value(1));
if (mrb_integer(and1) == 0) return mrb_true_value();
return mrb_false_value();
}
#endif
+26
View File
@@ -49,3 +49,29 @@ assert('Integer#ceildiv') do
assert_equal(-8, (-2).pow(3))
# assert_equal(361, 9.pow(1024,1000))
end
assert('Integer#even?') do
assert_true(0.even?)
assert_true(2.even?)
assert_true(-2.even?)
assert_false(1.even?)
assert_false(-1.even?)
# assert_true((10**100).even?)
# assert_true((-10**100).even?)
# assert_false((10**100+1).even?)
# assert_false((-10**100-1).even?)
end
assert('Integer#odd?') do
assert_false(0.odd?)
assert_false(2.odd?)
assert_false(-2.odd?)
assert_true(1.odd?)
assert_true(-1.odd?)
# assert_false((10**100).odd?)
# assert_false((-10**100).odd?)
# assert_true((10**100+1).odd?)
# assert_true((-10**100-1).odd?)
end