From 86d3e1c66aef9c68dc554980a0505d953621e701 Mon Sep 17 00:00:00 2001 From: mrkn Date: Fri, 15 Apr 2016 14:46:35 +0000 Subject: array.c (rb_ary_sum): use rb_rational_add directly * rational.c (rb_rational_add): rename from nurat_add. * array.c (rb_ary_sum): use rb_rational_add directly. * test/ruby/test_array.rb (test_sum): add assertions for an array of Rational values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ array.c | 2 +- internal.h | 1 + rational.c | 6 +++--- test/ruby/test_array.rb | 2 ++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a0f3051eb..727df82f27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Fri Apr 15 23:42:00 2016 Kenta Murata + + * rational.c (rb_rational_add): rename from nurat_add. + + * array.c (rb_ary_sum): use rb_rational_add directly. + + * test/ruby/test_array.rb (test_sum): add assertions for an array of + Rational values. + Fri Apr 15 22:31:00 2016 Kenta Murata * array.c (rb_ary_sum): apply the precision compensated algorithm diff --git a/array.c b/array.c index 93d3d47db0..2bb31dd1e7 100644 --- a/array.c +++ b/array.c @@ -5762,7 +5762,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) v = rb_to_float(v); goto float_value; } - v = rb_funcall(v, idPLUS, 1, e); + v = rb_rational_add(e, v); } return v; } diff --git a/internal.h b/internal.h index 15cad55c20..77fad73f72 100644 --- a/internal.h +++ b/internal.h @@ -1204,6 +1204,7 @@ rb_pid_t rb_fork_ruby(int *status); void rb_last_status_clear(void); /* rational.c */ +VALUE rb_rational_add(VALUE self, VALUE other); VALUE rb_lcm(VALUE x, VALUE y); VALUE rb_rational_reciprocal(VALUE x); VALUE rb_cstr_to_rat(const char *, int); diff --git a/rational.c b/rational.c index 65902cd7d9..8624ea1771 100644 --- a/rational.c +++ b/rational.c @@ -741,8 +741,8 @@ f_addsub(VALUE self, VALUE anum, VALUE aden, VALUE bnum, VALUE bden, int k) * Rational(9, 8) + 4 #=> (41/8) * Rational(20, 9) + 9.8 #=> 12.022222222222222 */ -static VALUE -nurat_add(VALUE self, VALUE other) +VALUE +rb_rational_add(VALUE self, VALUE other) { if (RB_TYPE_P(other, T_FIXNUM) || RB_TYPE_P(other, T_BIGNUM)) { { @@ -2538,7 +2538,7 @@ Init_Rational(void) rb_define_method(rb_cRational, "numerator", nurat_numerator, 0); rb_define_method(rb_cRational, "denominator", nurat_denominator, 0); - rb_define_method(rb_cRational, "+", nurat_add, 1); + rb_define_method(rb_cRational, "+", rb_rational_add, 1); rb_define_method(rb_cRational, "-", nurat_sub, 1); rb_define_method(rb_cRational, "*", nurat_mul, 1); rb_define_method(rb_cRational, "/", nurat_div, 1); diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 929cd1590b..8293a784da 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -2761,6 +2761,8 @@ class TestArray < Test::Unit::TestCase assert_float_equal((FIXNUM_MAX+1).to_f, [FIXNUM_MAX, 1, 0.0].sum) assert_float_equal((FIXNUM_MAX+1).to_f, [0.0, FIXNUM_MAX+1].sum) + assert_rational_equal(5/6r, [1/2r, 1/3r].sum) + assert_equal(2.0+3.0i, [2.0, 3.0i].sum) assert_int_equal(13, [1, 2].sum(10)) -- cgit v1.2.3