Skip to content
This repository was archived by the owner on Nov 30, 2024. It is now read-only.

Commit c54fc0b

Browse files
Restore round counting to bisect progress formatter
Counting rounds in the formatter eliminates the need to track this state in the example minimizer, while preserving the numbered rounds output.
1 parent e2c19ca commit c54fc0b

File tree

3 files changed

+26
-19
lines changed

3 files changed

+26
-19
lines changed

features/command_line/bisect.feature

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ Feature: Bisect
5656
Starting bisect with 1 failing example and 9 non-failing examples.
5757
Checking that failure(s) are order-dependent... failure appears to be order-dependent
5858
59-
Bisecting over non-failing examples 1-9 .. ignoring examples 6-9 (0.30166 seconds)
60-
Bisecting over non-failing examples 1-5 .. ignoring examples 4-5 (0.30306 seconds)
61-
Bisecting over non-failing examples 1-3 .. ignoring example 3 (0.33292 seconds)
62-
Bisecting over non-failing examples 1-2 . ignoring example 1 (0.16476 seconds)
59+
Round 1: bisecting over non-failing examples 1-9 .. ignoring examples 6-9 (0.30166 seconds)
60+
Round 2: bisecting over non-failing examples 1-5 .. ignoring examples 4-5 (0.30306 seconds)
61+
Round 3: bisecting over non-failing examples 1-3 .. ignoring example 3 (0.33292 seconds)
62+
Round 4: bisecting over non-failing examples 1-2 . ignoring example 1 (0.16476 seconds)
6363
Bisect complete! Reduced necessary non-failing examples from 9 to 1 in 1.26 seconds.
6464
6565
The minimal reproduction command is:
@@ -77,9 +77,9 @@ Feature: Bisect
7777
Starting bisect with 1 failing example and 9 non-failing examples.
7878
Checking that failure(s) are order-dependent... failure appears to be order-dependent
7979
80-
Bisecting over non-failing examples 1-9 .. ignoring examples 6-9 (0.32943 seconds)
81-
Bisecting over non-failing examples 1-5 .. ignoring examples 4-5 (0.3154 seconds)
82-
Bisecting over non-failing examples 1-3 .. ignoring example 3 (0.2175 seconds)
80+
Round 1: bisecting over non-failing examples 1-9 .. ignoring examples 6-9 (0.32943 seconds)
81+
Round 2: bisecting over non-failing examples 1-5 .. ignoring examples 4-5 (0.3154 seconds)
82+
Round 3: bisecting over non-failing examples 1-3 .. ignoring example 3 (0.2175 seconds)
8383
8484
Bisect aborted!
8585
@@ -110,7 +110,7 @@ Feature: Bisect
110110
Checking that failure(s) are order-dependent..
111111
- Running: rspec ./spec/calculator_1_spec.rb[1:1] --seed 1234 (n.nnnn seconds) failure appears to be order-dependent
112112
113-
Bisecting over non-failing examples 1-9
113+
Round 1: bisecting over non-failing examples 1-9
114114
- Running: rspec ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_6_spec.rb[1:1] ./spec/calculator_7_spec.rb[1:1] ./spec/calculator_8_spec.rb[1:1] ./spec/calculator_9_spec.rb[1:1] --seed 1234 (0.15302 seconds)
115115
- Running: rspec ./spec/calculator_10_spec.rb[1:1] ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_2_spec.rb[1:1] ./spec/calculator_3_spec.rb[1:1] ./spec/calculator_4_spec.rb[1:1] ./spec/calculator_5_spec.rb[1:1] --seed 1234 (0.19708 seconds)
116116
- Examples we can safely ignore (4):
@@ -124,7 +124,7 @@ Feature: Bisect
124124
- ./spec/calculator_3_spec.rb[1:1]
125125
- ./spec/calculator_4_spec.rb[1:1]
126126
- ./spec/calculator_5_spec.rb[1:1]
127-
Bisecting over non-failing examples 1-5
127+
Round 2: bisecting over non-failing examples 1-5
128128
- Running: rspec ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_4_spec.rb[1:1] ./spec/calculator_5_spec.rb[1:1] --seed 1234 (0.15836 seconds)
129129
- Running: rspec ./spec/calculator_10_spec.rb[1:1] ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_2_spec.rb[1:1] ./spec/calculator_3_spec.rb[1:1] --seed 1234 (0.19065 seconds)
130130
- Examples we can safely ignore (2):
@@ -134,15 +134,15 @@ Feature: Bisect
134134
- ./spec/calculator_10_spec.rb[1:1]
135135
- ./spec/calculator_2_spec.rb[1:1]
136136
- ./spec/calculator_3_spec.rb[1:1]
137-
Bisecting over non-failing examples 1-3
137+
Round 3: bisecting over non-failing examples 1-3
138138
- Running: rspec ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_2_spec.rb[1:1] --seed 1234 (0.21028 seconds)
139139
- Running: rspec ./spec/calculator_10_spec.rb[1:1] ./spec/calculator_1_spec.rb[1:1] ./spec/calculator_3_spec.rb[1:1] --seed 1234 (0.1975 seconds)
140140
- Examples we can safely ignore (1):
141141
- ./spec/calculator_2_spec.rb[1:1]
142142
- Remaining non-failing examples (2):
143143
- ./spec/calculator_10_spec.rb[1:1]
144144
- ./spec/calculator_3_spec.rb[1:1]
145-
Bisecting over non-failing examples 1-2
145+
Round 4: bisecting over non-failing examples 1-2
146146
- Running: rspec ./spec/calculator_10_spec.rb[1:1] ./spec/calculator_1_spec.rb[1:1] --seed 1234 (0.17173 seconds)
147147
- Examples we can safely ignore (1):
148148
- ./spec/calculator_3_spec.rb[1:1]

lib/rspec/core/formatters/bisect_progress_formatter.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class BisectProgressFormatter < BaseTextFormatter
1515
:bisect_dependency_check_failed, :bisect_multiple_culprits_detected
1616

1717
def bisect_starting(notification)
18+
self.round_count = 0
1819
options = notification.original_cli_args.join(' ')
1920
output.puts "Bisect started using options: #{options.inspect}"
2021
output.print "Running suite to find failures..."
@@ -41,12 +42,13 @@ def bisect_dependency_check_failed(notification)
4142
end
4243

4344
def bisect_round_started(notification, include_trailing_space=true)
45+
self.round_count = round_count + 1
4446
range_desc = [
4547
notification.candidates_range.begin,
4648
notification.candidates_range.end,
4749
].join("-")
4850

49-
output.print "\nBisecting over non-failing examples #{range_desc}"
51+
output.print "\nRound #{round_count}: bisecting over non-failing examples #{range_desc}"
5052
output.print " " if include_trailing_space
5153
end
5254

@@ -91,6 +93,11 @@ def bisect_aborted(notification)
9193
output.puts "\n\nBisect aborted!"
9294
output.puts "\nThe most minimal reproduction command discovered so far is:\n #{notification.repro}"
9395
end
96+
97+
private
98+
99+
attr_accessor :round_count
100+
94101
end
95102

96103
# @private

spec/rspec/core/bisect/coordinator_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def find_minimal_repro(output, formatter=Formatters::BisectProgressFormatter)
3636
|Starting bisect with 2 failing examples and 6 non-failing examples.
3737
|Checking that failure(s) are order-dependent... failure appears to be order-dependent
3838
|
39-
|Bisecting over non-failing examples 1-6 .. ignoring examples 4-6 (n.nnnn seconds)
40-
|Bisecting over non-failing examples 1-3 .. multiple culprits detected - splitting candidates (n.nnnn seconds)
41-
|Bisecting over non-failing examples 1-2 .. ignoring example 2 (n.nnnn seconds)
39+
|Round 1: bisecting over non-failing examples 1-6 .. ignoring examples 4-6 (n.nnnn seconds)
40+
|Round 2: bisecting over non-failing examples 1-3 .. multiple culprits detected - splitting candidates (n.nnnn seconds)
41+
|Round 3: bisecting over non-failing examples 1-2 .. ignoring example 2 (n.nnnn seconds)
4242
|Bisect complete! Reduced necessary non-failing examples from 6 to 2 in n.nnnn seconds.
4343
|
4444
|The minimal reproduction command is:
@@ -86,7 +86,7 @@ def find_minimal_repro(output, formatter=Formatters::BisectProgressFormatter)
8686
|Checking that failure(s) are order-dependent..
8787
| - Running: rspec 2.rb[1:1] 5.rb[1:1] (n.nnnn seconds) failure appears to be order-dependent
8888
|
89-
|Bisecting over non-failing examples 1-6
89+
|Round 1: bisecting over non-failing examples 1-6
9090
| - Running: rspec 2.rb[1:1] 5.rb[1:1] 6.rb[1:1] 7.rb[1:1] 8.rb[1:1] (n.nnnn seconds)
9191
| - Running: rspec 1.rb[1:1] 2.rb[1:1] 3.rb[1:1] 4.rb[1:1] 5.rb[1:1] (n.nnnn seconds)
9292
| - Examples we can safely ignore (3):
@@ -97,11 +97,11 @@ def find_minimal_repro(output, formatter=Formatters::BisectProgressFormatter)
9797
| - 1.rb[1:1]
9898
| - 3.rb[1:1]
9999
| - 4.rb[1:1]
100-
|Bisecting over non-failing examples 1-3
100+
|Round 2: bisecting over non-failing examples 1-3
101101
| - Running: rspec 2.rb[1:1] 4.rb[1:1] 5.rb[1:1] (n.nnnn seconds)
102102
| - Running: rspec 1.rb[1:1] 2.rb[1:1] 3.rb[1:1] 5.rb[1:1] (n.nnnn seconds)
103103
| - Multiple culprits detected - splitting candidates
104-
|Bisecting over non-failing examples 1-2
104+
|Round 3: bisecting over non-failing examples 1-2
105105
| - Running: rspec 2.rb[1:1] 3.rb[1:1] 4.rb[1:1] 5.rb[1:1] (n.nnnn seconds)
106106
| - Running: rspec 1.rb[1:1] 2.rb[1:1] 4.rb[1:1] 5.rb[1:1] (n.nnnn seconds)
107107
| - Examples we can safely ignore (1):
@@ -152,7 +152,7 @@ def bisect_round_started(notification)
152152
|Starting bisect with 2 failing examples and 6 non-failing examples.
153153
|Checking that failure(s) are order-dependent... failure appears to be order-dependent
154154
|
155-
|Bisecting over non-failing examples 1-6 .. ignoring examples 4-6 (n.nnnn seconds)
155+
|Round 1: bisecting over non-failing examples 1-6 .. ignoring examples 4-6 (n.nnnn seconds)
156156
|
157157
|Bisect aborted!
158158
|

0 commit comments

Comments
 (0)