diff options
author | Jean Boussier <byroot@ruby-lang.org> | 2023-03-14 10:12:32 +0100 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2023-03-15 09:12:59 +0000 |
commit | ca437aeb395e77125fcd2ab9bc83bbcd3e357610 (patch) | |
tree | 4177bcd2728e77b0fd1fed4c299681456bfe5b20 /spec/ruby | |
parent | 6462c1a042fec4017f7e3bf2c13ec6a29efd23d6 (diff) | |
download | ruby-ca437aeb395e77125fcd2ab9bc83bbcd3e357610.tar.gz |
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.
Diffstat (limited to 'spec/ruby')
-rw-r--r-- | spec/ruby/core/array/sum_spec.rb | 13 |
1 files changed, 13 insertions, 0 deletions
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 |