class RSpecSearchAndDestroy::Bisector
Attributes
executor[R]
output[R]
selector[R]
Public Class Methods
new(output, selector, executor)
click to toggle source
# File lib/rspec-search-and-destroy/bisector.rb, line 7 def initialize(output, selector, executor) @output = output @selector = selector @executor = executor end
Public Instance Methods
bisect(causal_examples, failed_example, progress = nil)
click to toggle source
# File lib/rspec-search-and-destroy/bisector.rb, line 13 def bisect(causal_examples, failed_example, progress = nil) case causal_examples.size when 1 output.found(causal_examples.first, failed_example) return when 0 output.unable_to_bisect return end enabled, disabled = selector.enable_set(causal_examples) to_run = enabled + [failed_example] progress = if progress progress.next_iteration(enabled.size) else BisectionProgress.new(total_examples: causal_examples.size, enabled_examples: enabled.size) end output.progress(progress) executor.run_examples(to_run) results = executor.load_run_results next_set = results.failed? ? enabled : disabled bisect(next_set, failed_example, progress) end