Project

General

Profile

Bug #3089

limited size for Array#combination [patch]

Added by marcandre (Marc-Andre Lafortune) over 9 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.9.2dev (2010-04-03 trunk 27200) [x86_64-darwin10.2.0]
Backport:
[ruby-core:29240]

Description

=begin
I would expect the following to work, but it raises an error

(0..100).to_a.combination(50).first(42)
# => RangeError: too big for combination

There is a limit of 1 << 31 potential results (or 1 <<63, depending on the platform).

Since there is an explicit test for this, I learned the hard way I better ask if there is a valid reason for this artificial limit for #combination ?

If not, and unless there is objection, I'll commit the attached patch.

Note: I noticed this when implementing the block form of #product where a similar limit exists. Since #product without a block needs to return an array of this size, it is sensible that an error is raised in that case.
When an block is given, though, I didn't see why there should be a limit, so the limitation applies only to the form without a block. This does mean, though, that arr.product(...) might not behave the same as arr.to_enum(:product, ...).to_a, at least until Enumerators have a length method (see issue #2673)
=end


Files

combination_unlimited.diff (1.85 KB) combination_unlimited.diff marcandre (Marc-Andre Lafortune), 04/04/2010 05:54 AM

History

#1

Updated by yugui (Yuki Sonoda) over 9 years ago

  • Assignee set to matz (Yukihiro Matsumoto)

=begin

I learned the hard way I better ask if there is a valid reason for this artificial limit for #combination ?

hmm, matz, is this behavior intended? If not, I regard the limitation as a bug. It means, The patch can be merged into ruby 1.9.2.
=end

#2

Updated by matz (Yukihiro Matsumoto) over 9 years ago

=begin
Hi,

In message "Re: [ruby-core:29241] [Bug #3089] limited size for Array#combination [patch]"
on Sun, 4 Apr 2010 07:32:44 +0900, Yuki Sonoda redmine@ruby-lang.org writes:

|> I learned the hard way I better ask if there is a valid reason for this artificial limit for #combination ?
|
|hmm, matz, is this behavior intended? If not, I regard the limitation as a bug. It means, The patch can be merged into ruby 1.9.2.

It's not intended, so that the patch can be applied. Will you apply?

                        matz.

=end

#3

Updated by marcandre (Marc-Andre Lafortune) over 9 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r27252.
Marc-Andre, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Also available in: Atom PDF