class RSpec::Core::Bisect::SubsetEnumerator

Enumerates each subset of the given list of ids that is half the size of the total list, so that hopefully we can discard half the list each repeatedly in order to our minimal repro case. @private

Public Class Methods

new(ids) click to toggle source
# File lib/rspec/core/bisect/subset_enumerator.rb, line 11
def initialize(ids)
  @ids = ids
end

Public Instance Methods

each() { |subset| ... } click to toggle source
# File lib/rspec/core/bisect/subset_enumerator.rb, line 19
def each
  yielded     = Set.new
  slice_size  = subset_size
  combo_count = 1

  while slice_size > 0
    @ids.each_slice(slice_size).to_a.combination(combo_count) do |combos|
      subset = combos.flatten
      next if yielded.include?(subset)
      yield subset
      yielded << subset
    end

    slice_size  /= 2
    combo_count *= 2
  end
end
subset_size() click to toggle source
# File lib/rspec/core/bisect/subset_enumerator.rb, line 15
def subset_size
  @subset_size ||= (@ids.size / 2.0).ceil
end