From ca437aeb395e77125fcd2ab9bc83bbcd3e357610 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Tue, 14 Mar 2023 10:12:32 +0100 Subject: rb_ary_sum: don't enter fast path if initial isn't a native numeric type. [Bug #19530] If the initial value isn't one of the special cased types, we directly jump to the slow path. --- spec/ruby/core/array/sum_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'spec/ruby') diff --git a/spec/ruby/core/array/sum_spec.rb b/spec/ruby/core/array/sum_spec.rb index 1f1d6b2f14..06abe06135 100644 --- a/spec/ruby/core/array/sum_spec.rb +++ b/spec/ruby/core/array/sum_spec.rb @@ -10,6 +10,10 @@ describe "Array#sum" do [1, 2, 3].sum { |i| i * 10 }.should == 60 end + it "doesn't apply the block init" do + [1, 2, 3].sum(1) { |i| i * 10 }.should == 61 + end + # https://bugs.ruby-lang.org/issues/12217 # https://github.com/ruby/ruby/blob/master/doc/ChangeLog/ChangeLog-2.4.0#L6208-L6214 it "uses Kahan's compensated summation algorithm for precise sum of float numbers" do @@ -69,6 +73,15 @@ describe "Array#sum" do a.should_receive(:+).with(b).and_return(42) [b].sum(a).should == 42 end + + ruby_bug '#19530', ''...'3.3' do + it "calls + on the init value" do + a = mock("a") + b = mock("b") + a.should_receive(:+).with(42).and_return(b) + [42].sum(a).should == b + end + end end describe "Array#sum" do -- cgit v1.2.3