@@ -70,6 +70,7 @@ fn push_pop() {
7070 "A" => ProcessResult :: Changed ( vec ! [ "A.1" , "A.2" , "A.3" ] ) ,
7171 "B" => ProcessResult :: Error ( "B is for broken" ) ,
7272 "C" => ProcessResult :: Changed ( vec ! [ ] ) ,
73+ "A.1" | "A.2" | "A.3" => ProcessResult :: Unchanged ,
7374 _ => unreachable ! ( ) ,
7475 }
7576 } , |_| { } ) , DoCompleted :: Yes ) ;
@@ -94,6 +95,7 @@ fn push_pop() {
9495 "A.2" => ProcessResult :: Unchanged ,
9596 "A.3" => ProcessResult :: Changed ( vec ! [ "A.3.i" ] ) ,
9697 "D" => ProcessResult :: Changed ( vec ! [ "D.1" , "D.2" ] ) ,
98+ "A.3.i" | "D.1" | "D.2" => ProcessResult :: Unchanged ,
9799 _ => unreachable ! ( ) ,
98100 }
99101 } , |_| { } ) , DoCompleted :: Yes ) ;
@@ -113,6 +115,7 @@ fn push_pop() {
113115 "A.3.i" => ProcessResult :: Changed ( vec ! [ ] ) ,
114116 "D.1" => ProcessResult :: Changed ( vec ! [ "D.1.i" ] ) ,
115117 "D.2" => ProcessResult :: Changed ( vec ! [ "D.2.i" ] ) ,
118+ "D.1.i" | "D.2.i" => ProcessResult :: Unchanged ,
116119 _ => unreachable ! ( ) ,
117120 }
118121 } , |_| { } ) , DoCompleted :: Yes ) ;
@@ -161,35 +164,38 @@ fn success_in_grandchildren() {
161164 forest. process_obligations ( & mut C ( |obligation| {
162165 match * obligation {
163166 "A" => ProcessResult :: Changed ( vec ! [ "A.1" , "A.2" , "A.3" ] ) ,
167+ "A.1" => ProcessResult :: Changed ( vec ! [ ] ) ,
168+ "A.2" => ProcessResult :: Changed ( vec ! [ "A.2.i" , "A.2.ii" ] ) ,
169+ "A.3" => ProcessResult :: Changed ( vec ! [ ] ) ,
170+ "A.2.i" | "A.2.ii" => ProcessResult :: Unchanged ,
164171 _ => unreachable ! ( ) ,
165172 }
166173 } , |_| { } ) , DoCompleted :: Yes ) ;
167- assert ! ( ok. unwrap( ) . is_empty( ) ) ;
174+ let mut ok = ok. unwrap ( ) ;
175+ ok. sort ( ) ;
176+ assert_eq ! ( ok, vec![ "A.1" , "A.3" ] ) ;
168177 assert ! ( err. is_empty( ) ) ;
169178
170179 let Outcome { completed : ok, errors : err, .. } =
171180 forest. process_obligations ( & mut C ( |obligation| {
172181 match * obligation {
173- "A.1" => ProcessResult :: Changed ( vec ! [ ] ) ,
174- "A.2" => ProcessResult :: Changed ( vec ! [ "A.2.i" , "A.2.ii" ] ) ,
175- "A.3" => ProcessResult :: Changed ( vec ! [ ] ) ,
182+ "A.2.i" => ProcessResult :: Unchanged ,
183+ "A.2.ii" => ProcessResult :: Changed ( vec ! [ ] ) ,
176184 _ => unreachable ! ( ) ,
177185 }
178186 } , |_| { } ) , DoCompleted :: Yes ) ;
179- let mut ok = ok. unwrap ( ) ;
180- ok. sort ( ) ;
181- assert_eq ! ( ok, vec![ "A.1" , "A.3" ] ) ;
187+ assert_eq ! ( ok. unwrap( ) , vec![ "A.2.ii" ] ) ;
182188 assert ! ( err. is_empty( ) ) ;
183189
184190 let Outcome { completed : ok, errors : err, .. } =
185191 forest. process_obligations ( & mut C ( |obligation| {
186192 match * obligation {
187193 "A.2.i" => ProcessResult :: Changed ( vec ! [ "A.2.i.a" ] ) ,
188- "A.2.ii " => ProcessResult :: Changed ( vec ! [ ] ) ,
194+ "A.2.i.a " => ProcessResult :: Unchanged ,
189195 _ => unreachable ! ( ) ,
190196 }
191197 } , |_| { } ) , DoCompleted :: Yes ) ;
192- assert_eq ! ( ok. unwrap( ) , vec! [ "A.2.ii" ] ) ;
198+ assert ! ( ok. unwrap( ) . is_empty ( ) ) ;
193199 assert ! ( err. is_empty( ) ) ;
194200
195201 let Outcome { completed : ok, errors : err, .. } =
@@ -222,6 +228,7 @@ fn to_errors_no_throw() {
222228 forest. process_obligations ( & mut C ( |obligation| {
223229 match * obligation {
224230 "A" => ProcessResult :: Changed ( vec ! [ "A.1" , "A.2" , "A.3" ] ) ,
231+ "A.1" | "A.2" | "A.3" => ProcessResult :: Unchanged ,
225232 _ => unreachable ! ( ) ,
226233 }
227234 } , |_|{ } ) , DoCompleted :: Yes ) ;
@@ -243,6 +250,7 @@ fn diamond() {
243250 forest. process_obligations ( & mut C ( |obligation| {
244251 match * obligation {
245252 "A" => ProcessResult :: Changed ( vec ! [ "A.1" , "A.2" ] ) ,
253+ "A.1" | "A.2" => ProcessResult :: Unchanged ,
246254 _ => unreachable ! ( ) ,
247255 }
248256 } , |_|{ } ) , DoCompleted :: Yes ) ;
@@ -254,6 +262,7 @@ fn diamond() {
254262 match * obligation {
255263 "A.1" => ProcessResult :: Changed ( vec ! [ "D" ] ) ,
256264 "A.2" => ProcessResult :: Changed ( vec ! [ "D" ] ) ,
265+ "D" => ProcessResult :: Unchanged ,
257266 _ => unreachable ! ( ) ,
258267 }
259268 } , |_|{ } ) , DoCompleted :: Yes ) ;
@@ -282,6 +291,7 @@ fn diamond() {
282291 forest. process_obligations ( & mut C ( |obligation| {
283292 match * obligation {
284293 "A'" => ProcessResult :: Changed ( vec ! [ "A'.1" , "A'.2" ] ) ,
294+ "A'.1" | "A'.2" => ProcessResult :: Unchanged ,
285295 _ => unreachable ! ( ) ,
286296 }
287297 } , |_|{ } ) , DoCompleted :: Yes ) ;
@@ -293,6 +303,7 @@ fn diamond() {
293303 match * obligation {
294304 "A'.1" => ProcessResult :: Changed ( vec ! [ "D'" , "A'" ] ) ,
295305 "A'.2" => ProcessResult :: Changed ( vec ! [ "D'" ] ) ,
306+ "D'" | "A'" => ProcessResult :: Unchanged ,
296307 _ => unreachable ! ( ) ,
297308 }
298309 } , |_|{ } ) , DoCompleted :: Yes ) ;
@@ -370,6 +381,7 @@ fn orphan() {
370381 "B" => ProcessResult :: Unchanged ,
371382 "C1" => ProcessResult :: Changed ( vec ! [ ] ) ,
372383 "C2" => ProcessResult :: Changed ( vec ! [ ] ) ,
384+ "D" | "E" => ProcessResult :: Unchanged ,
373385 _ => unreachable ! ( ) ,
374386 }
375387 } , |_|{ } ) , DoCompleted :: Yes ) ;
0 commit comments