@@ -42,6 +42,23 @@ fn search_old_style(target: (bool, bool, bool)) -> u32 {
42
42
}
43
43
}
44
44
45
+ // Check that a dummy or-pattern also leads to running the guard multiple times.
46
+ fn search_with_dummy ( target : ( bool , bool ) ) -> u32 {
47
+ let x = ( ( false , true ) , ( false , true ) , ( ) ) ;
48
+ let mut guard_count = 0 ;
49
+ match x {
50
+ ( ( a, _) | ( _, a) , ( b, _) | ( _, b) , _ | _)
51
+ if {
52
+ guard_count += 1 ;
53
+ ( a, b) == target
54
+ } =>
55
+ {
56
+ guard_count
57
+ }
58
+ _ => unreachable ! ( ) ,
59
+ }
60
+ }
61
+
45
62
fn main ( ) {
46
63
assert_eq ! ( search( ( false , false , false ) ) , 1 ) ;
47
64
assert_eq ! ( search( ( false , false , true ) ) , 2 ) ;
@@ -60,4 +77,9 @@ fn main() {
60
77
assert_eq ! ( search_old_style( ( true , false , true ) ) , 6 ) ;
61
78
assert_eq ! ( search_old_style( ( true , true , false ) ) , 7 ) ;
62
79
assert_eq ! ( search_old_style( ( true , true , true ) ) , 8 ) ;
80
+
81
+ assert_eq ! ( search_with_dummy( ( false , false ) ) , 1 ) ;
82
+ assert_eq ! ( search_with_dummy( ( false , true ) ) , 3 ) ;
83
+ assert_eq ! ( search_with_dummy( ( true , false ) ) , 5 ) ;
84
+ assert_eq ! ( search_with_dummy( ( true , true ) ) , 7 ) ;
63
85
}
0 commit comments