Fix rb_ary_sum for mathn
* array.c (rb_ary_sum): fix for mathn * test/ruby/test_array.rb (test_sum): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b1376614de
commit
78729a59a2
@ -1,3 +1,9 @@
|
||||
Sun May 1 23:59:59 2016 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* array.c (rb_ary_sum): fix for mathn
|
||||
|
||||
* test/ruby/test_array.rb (test_sum): ditto.
|
||||
|
||||
Sun May 1 23:51:54 2016 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* test/lib/test/unit.rb (Options#non_options): fixed wrong regexp.
|
||||
|
22
array.c
22
array.c
@ -5732,15 +5732,29 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary)
|
||||
}
|
||||
if (n != 0)
|
||||
v = rb_fix_plus(LONG2FIX(n), v);
|
||||
if (r != Qundef)
|
||||
v = rb_rational_plus(r, v);
|
||||
if (r != Qundef) {
|
||||
/* r can be a Integer when mathn is loaded */
|
||||
if (FIXNUM_P(r))
|
||||
v = rb_fix_plus(r, v);
|
||||
else if (RB_TYPE_P(r, T_BIGNUM))
|
||||
v = rb_big_plus(r, v);
|
||||
else
|
||||
v = rb_rational_plus(r, v);
|
||||
}
|
||||
return v;
|
||||
|
||||
not_exact:
|
||||
if (n != 0)
|
||||
v = rb_fix_plus(LONG2FIX(n), v);
|
||||
if (r != Qundef)
|
||||
v = rb_rational_plus(r, v);
|
||||
if (r != Qundef) {
|
||||
/* r can be a Integer when mathn is loaded */
|
||||
if (FIXNUM_P(r))
|
||||
v = rb_fix_plus(r, v);
|
||||
else if (RB_TYPE_P(r, T_BIGNUM))
|
||||
v = rb_big_plus(r, v);
|
||||
else
|
||||
v = rb_rational_plus(r, v);
|
||||
}
|
||||
|
||||
if (RB_FLOAT_TYPE_P(e)) {
|
||||
/* Kahan's compensated summation algorithm */
|
||||
|
@ -2789,6 +2789,10 @@ class TestArray < Test::Unit::TestCase
|
||||
|
||||
assert_equal("abc", ["a", "b", "c"].sum(""))
|
||||
assert_equal([1, [2], 3], [[1], [[2]], [3]].sum([]))
|
||||
|
||||
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
|
||||
assert_equal(6, [1r, 2, 3r].sum)
|
||||
EOS
|
||||
end
|
||||
|
||||
private
|
||||
|
Loading…
x
Reference in New Issue
Block a user