[ruby-core:120512] [Ruby master Bug#21008] Array#sum, Enumerator#sum, Numeric subclass

Issue #21008 has been reported by MSP-Greg (Greg L). ---------------------------------------- Bug #21008: Array#sum, Enumerator#sum, Numeric subclass https://bugs.ruby-lang.org/issues/21008 * Author: MSP-Greg (Greg L) * Status: Open * ruby -v: ruby 3.5.0dev (2025-01-06T17:07:57Z master a61c16ba42) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- The following code seems to show a bug or 'quirk'. When using a Numeric subclass, `Array#sum` works correctly, but `Enumerator#sum` does not. They both work fine when using a `Float`. ```ruby class Length < Numeric def initialize(val) @val = Float(val) end def to_f @val end end ary = [] #────────────────────────────────────────── Use Length ary[0] = Length.new 5 ary[1] = Length.new 10 ary[2] = Length.new 20 puts "Length ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Length enum #{enum.sum}" #=> 20.0 #────────────────────────────────────────── Use Float ary[0] = 5.0 ary[1] = 10.0 ary[2] = 20.0 puts "Float ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Float enum #{enum.sum}" #=> 35.0 ``` -- https://bugs.ruby-lang.org/

Issue #21008 has been updated by nobu (Nobuyoshi Nakada). Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED https://github.com/ruby/ruby/pull/12522 ---------------------------------------- Bug #21008: Array#sum, Enumerator#sum, Numeric subclass https://bugs.ruby-lang.org/issues/21008#change-111305 * Author: MSP-Greg (Greg L) * Status: Open * ruby -v: ruby 3.5.0dev (2025-01-06T17:07:57Z master a61c16ba42) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED ---------------------------------------- The following code seems to show a bug or 'quirk'. When using a Numeric subclass, `Array#sum` works correctly, but `Enumerator#sum` does not. They both work fine when using a `Float`. ```ruby class Length < Numeric def initialize(val) @val = Float(val) end def to_f @val end end ary = [] #────────────────────────────────────────── Use Length ary[0] = Length.new 5 ary[1] = Length.new 10 ary[2] = Length.new 20 puts "Length ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Length enum #{enum.sum}" #=> 20.0 #────────────────────────────────────────── Use Float ary[0] = 5.0 ary[1] = 10.0 ary[2] = 20.0 puts "Float ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Float enum #{enum.sum}" #=> 35.0 ``` -- https://bugs.ruby-lang.org/

Issue #21008 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED to 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED, 3.4: REQUIRED ruby_3_2 commit:845763fdf370846938b86a062827b237313c924f merged revision(s) commit:b176d4f52e4af67654814dab3e9c5f4bf9170e54. ---------------------------------------- Bug #21008: Array#sum, Enumerator#sum, Numeric subclass https://bugs.ruby-lang.org/issues/21008#change-111441 * Author: MSP-Greg (Greg L) * Status: Closed * ruby -v: ruby 3.5.0dev (2025-01-06T17:07:57Z master a61c16ba42) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED, 3.4: REQUIRED ---------------------------------------- The following code seems to show a bug or 'quirk'. When using a Numeric subclass, `Array#sum` works correctly, but `Enumerator#sum` does not. They both work fine when using a `Float`. ```ruby class Length < Numeric def initialize(val) @val = Float(val) end def to_f @val end end ary = [] #────────────────────────────────────────── Use Length ary[0] = Length.new 5 ary[1] = Length.new 10 ary[2] = Length.new 20 puts "Length ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Length enum #{enum.sum}" #=> 20.0 #────────────────────────────────────────── Use Float ary[0] = 5.0 ary[1] = 10.0 ary[2] = 20.0 puts "Float ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Float enum #{enum.sum}" #=> 35.0 ``` -- https://bugs.ruby-lang.org/

Issue #21008 has been updated by k0kubun (Takashi Kokubun). Backport changed from 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED, 3.4: REQUIRED to 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: REQUIRED ruby_3_3 commit:7b9caf19ba480d168ef4c5e93690735240975c91 merged revision(s) commit:b176d4f52e4af67654814dab3e9c5f4bf9170e54. ---------------------------------------- Bug #21008: Array#sum, Enumerator#sum, Numeric subclass https://bugs.ruby-lang.org/issues/21008#change-111516 * Author: MSP-Greg (Greg L) * Status: Closed * ruby -v: ruby 3.5.0dev (2025-01-06T17:07:57Z master a61c16ba42) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: REQUIRED ---------------------------------------- The following code seems to show a bug or 'quirk'. When using a Numeric subclass, `Array#sum` works correctly, but `Enumerator#sum` does not. They both work fine when using a `Float`. ```ruby class Length < Numeric def initialize(val) @val = Float(val) end def to_f @val end end ary = [] #────────────────────────────────────────── Use Length ary[0] = Length.new 5 ary[1] = Length.new 10 ary[2] = Length.new 20 puts "Length ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Length enum #{enum.sum}" #=> 20.0 #────────────────────────────────────────── Use Float ary[0] = 5.0 ary[1] = 10.0 ary[2] = 20.0 puts "Float ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Float enum #{enum.sum}" #=> 35.0 ``` -- https://bugs.ruby-lang.org/

Issue #21008 has been updated by k0kubun (Takashi Kokubun). Backport changed from 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: REQUIRED to 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: DONE ruby_3_4 commit:bc359b9971088ff921e26346f395c70640654e9e merged revision(s) commit:b176d4f52e4af67654814dab3e9c5f4bf9170e54. ---------------------------------------- Bug #21008: Array#sum, Enumerator#sum, Numeric subclass https://bugs.ruby-lang.org/issues/21008#change-111922 * Author: MSP-Greg (Greg L) * Status: Closed * ruby -v: ruby 3.5.0dev (2025-01-06T17:07:57Z master a61c16ba42) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: DONE, 3.3: DONE, 3.4: DONE ---------------------------------------- The following code seems to show a bug or 'quirk'. When using a Numeric subclass, `Array#sum` works correctly, but `Enumerator#sum` does not. They both work fine when using a `Float`. ```ruby class Length < Numeric def initialize(val) @val = Float(val) end def to_f @val end end ary = [] #────────────────────────────────────────── Use Length ary[0] = Length.new 5 ary[1] = Length.new 10 ary[2] = Length.new 20 puts "Length ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Length enum #{enum.sum}" #=> 20.0 #────────────────────────────────────────── Use Float ary[0] = 5.0 ary[1] = 10.0 ary[2] = 20.0 puts "Float ary #{ary.sum}" #=> 35.0 enum = ary.each puts "Float enum #{enum.sum}" #=> 35.0 ``` -- https://bugs.ruby-lang.org/
participants (4)
-
k0kubun (Takashi Kokubun)
-
MSP-Greg (Greg L)
-
nagachika (Tomoyuki Chikanaga)
-
nobu (Nobuyoshi Nakada)