8
8
use std:: collections:: BTreeMap ;
9
9
use std:: fmt;
10
10
11
- pub fn least_satisfying < T , P > ( slice : & [ T ] , mut predicate : P ) -> usize
11
+ pub fn least_satisfying < T , P > ( slice : & [ T ] , start_check : bool , mut predicate : P ) -> usize
12
12
where
13
13
T : fmt:: Display + fmt:: Debug ,
14
14
P : FnMut ( & T ) -> Satisfies ,
@@ -18,12 +18,14 @@ where
18
18
let mut unknown_ranges: Vec < ( usize , usize ) > = Vec :: new ( ) ;
19
19
let mut rm_no = 0 ; // presume that the slice starts with a no
20
20
21
- eprintln ! ( "verifying the start of the range does not reproduce the regression" ) ;
22
- match predicate ( rm_no) {
23
- Satisfies :: No => {
24
- eprintln ! ( "confirmed the start of the range does not reproduce the regression" )
21
+ if start_check {
22
+ eprintln ! ( "verifying the start of the range does not reproduce the regression" ) ;
23
+ match predicate ( rm_no) {
24
+ Satisfies :: No => {
25
+ eprintln ! ( "confirmed the start of the range does not reproduce the regression" )
26
+ }
27
+ _ => panic ! ( "the start of the range to test must not reproduce the regression" ) ,
25
28
}
26
- _ => panic ! ( "the start of the range to test must not reproduce the regression" ) ,
27
29
}
28
30
29
31
let mut lm_yes = slice. len ( ) - 1 ; // presume that the slice ends with a yes
@@ -103,59 +105,111 @@ mod tests {
103
105
}
104
106
}
105
107
106
- let res = least_satisfying ( & satisfies_v, |i| * i) ;
108
+ let res = least_satisfying ( & satisfies_v, true , |i| * i) ;
107
109
let exp = first_yes. unwrap ( ) ;
108
110
TestResult :: from_bool ( res == exp)
109
111
}
110
112
111
113
#[ test]
112
114
fn least_satisfying_1 ( ) {
113
115
assert_eq ! (
114
- least_satisfying( & [ No , Unknown , Unknown , No , Yes ] , |i| * i) ,
116
+ least_satisfying( & [ No , Unknown , Unknown , No , Yes ] , true , |i| * i) ,
117
+ 4
118
+ ) ;
119
+ }
120
+
121
+ #[ test]
122
+ fn least_satisfying_1f ( ) {
123
+ assert_eq ! (
124
+ least_satisfying( & [ No , Unknown , Unknown , No , Yes ] , false , |i| * i) ,
115
125
4
116
126
) ;
117
127
}
118
128
119
129
#[ test]
120
130
fn least_satisfying_2 ( ) {
121
131
assert_eq ! (
122
- least_satisfying( & [ No , Unknown , Yes , Unknown , Yes ] , |i| * i) ,
132
+ least_satisfying( & [ No , Unknown , Yes , Unknown , Yes ] , true , |i| * i) ,
133
+ 2
134
+ ) ;
135
+ }
136
+
137
+ #[ test]
138
+ fn least_satisfying_2f ( ) {
139
+ assert_eq ! (
140
+ least_satisfying( & [ No , Unknown , Yes , Unknown , Yes ] , false , |i| * i) ,
123
141
2
124
142
) ;
125
143
}
126
144
127
145
#[ test]
128
146
fn least_satisfying_3 ( ) {
129
- assert_eq ! ( least_satisfying( & [ No , No , No , No , Yes ] , |i| * i) , 4 ) ;
147
+ assert_eq ! ( least_satisfying( & [ No , No , No , No , Yes ] , true , |i| * i) , 4 ) ;
148
+ }
149
+
150
+ #[ test]
151
+ fn least_satisfying_3f ( ) {
152
+ assert_eq ! ( least_satisfying( & [ No , No , No , No , Yes ] , false , |i| * i) , 4 ) ;
130
153
}
131
154
132
155
#[ test]
133
156
fn least_satisfying_4 ( ) {
134
- assert_eq ! ( least_satisfying( & [ No , No , Yes , Yes , Yes ] , |i| * i) , 2 ) ;
157
+ assert_eq ! ( least_satisfying( & [ No , No , Yes , Yes , Yes ] , true , |i| * i) , 2 ) ;
158
+ }
159
+
160
+ #[ test]
161
+ fn least_satisfying_4f ( ) {
162
+ assert_eq ! ( least_satisfying( & [ No , No , Yes , Yes , Yes ] , false , |i| * i) , 2 ) ;
135
163
}
136
164
137
165
#[ test]
138
166
fn least_satisfying_5 ( ) {
139
- assert_eq ! ( least_satisfying( & [ No , Yes , Yes , Yes , Yes ] , |i| * i) , 1 ) ;
167
+ assert_eq ! ( least_satisfying( & [ No , Yes , Yes , Yes , Yes ] , true , |i| * i) , 1 ) ;
168
+ }
169
+
170
+ #[ test]
171
+ fn least_satisfying_5f ( ) {
172
+ assert_eq ! ( least_satisfying( & [ No , Yes , Yes , Yes , Yes ] , false , |i| * i) , 1 ) ;
140
173
}
141
174
142
175
#[ test]
143
176
fn least_satisfying_6 ( ) {
144
177
assert_eq ! (
145
- least_satisfying( & [ No , Yes , Yes , Unknown , Unknown , Yes , Unknown , Yes ] , |i| * i) ,
178
+ least_satisfying( & [ No , Yes , Yes , Unknown , Unknown , Yes , Unknown , Yes ] , true , |i| * i) ,
179
+ 1
180
+ ) ;
181
+ }
182
+
183
+ #[ test]
184
+ fn least_satisfying_6f ( ) {
185
+ assert_eq ! (
186
+ least_satisfying( & [ No , Yes , Yes , Unknown , Unknown , Yes , Unknown , Yes ] , false , |i| * i) ,
146
187
1
147
188
) ;
148
189
}
149
190
150
191
#[ test]
151
192
fn least_satisfying_7 ( ) {
152
- assert_eq ! ( least_satisfying( & [ No , Yes , Unknown , Yes ] , |i| * i) , 1 ) ;
193
+ assert_eq ! ( least_satisfying( & [ No , Yes , Unknown , Yes ] , true , |i| * i) , 1 ) ;
194
+ }
195
+
196
+ #[ test]
197
+ fn least_satisfying_7f ( ) {
198
+ assert_eq ! ( least_satisfying( & [ No , Yes , Unknown , Yes ] , false , |i| * i) , 1 ) ;
153
199
}
154
200
155
201
#[ test]
156
202
fn least_satisfying_8 ( ) {
157
203
assert_eq ! (
158
- least_satisfying( & [ No , Unknown , No , No , Unknown , Yes , Yes ] , |i| * i) ,
204
+ least_satisfying( & [ No , Unknown , No , No , Unknown , Yes , Yes ] , true , |i| * i) ,
205
+ 5
206
+ ) ;
207
+ }
208
+
209
+ #[ test]
210
+ fn least_satisfying_8f ( ) {
211
+ assert_eq ! (
212
+ least_satisfying( & [ No , Unknown , No , No , Unknown , Yes , Yes ] , false , |i| * i) ,
159
213
5
160
214
) ;
161
215
}
0 commit comments