mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2562 from cubicdaiya/issues/pow_flo
Fix and add test for Numeric#pow behavior.
This commit is contained in:
+4
-3
@@ -54,11 +54,12 @@ static mrb_value
|
||||
num_pow(mrb_state *mrb, mrb_value x)
|
||||
{
|
||||
mrb_value y;
|
||||
mrb_float d;
|
||||
mrb_float d, yv;
|
||||
|
||||
mrb_get_args(mrb, "o", &y);
|
||||
d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
|
||||
if (mrb_fixnum_p(x) && mrb_fixnum_p(y) && FIXABLE(d))
|
||||
yv = mrb_to_flo(mrb, y);
|
||||
d = pow(mrb_to_flo(mrb, x), yv);
|
||||
if (mrb_fixnum_p(x) && mrb_fixnum_p(y) && FIXABLE(d) && yv > 0)
|
||||
return mrb_fixnum_value((mrb_int)d);
|
||||
return mrb_float_value(mrb, d);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,14 @@ assert('Numeric#abs', '15.2.7.4.3') do
|
||||
assert_equal(1.0, -1.abs)
|
||||
end
|
||||
|
||||
assert('Numeric#pow') do
|
||||
assert_equal(8, 2 ** 3)
|
||||
assert_equal(-8, -2 ** 3)
|
||||
assert_equal(1, 2 ** 0)
|
||||
assert_equal(1, 2.2 ** 0)
|
||||
assert_equal(0.5, 2 ** -1)
|
||||
end
|
||||
|
||||
assert('Numeric#/', '15.2.8.3.4') do
|
||||
n = Class.new(Numeric){ def /(x); 15.1;end }.new
|
||||
|
||||
|
||||
Reference in New Issue
Block a user