]>
Commit | Line | Data |
---|---|---|
74b04a01 XL |
1 | // Check that we expand multiple or-patterns from left to right. |
2 | ||
3 | // run-pass | |
4 | ||
5 | #![feature(or_patterns)] | |
74b04a01 XL |
6 | |
7 | fn search(target: (bool, bool, bool)) -> u32 { | |
8 | let x = ((false, true), (false, true), (false, true)); | |
9 | let mut guard_count = 0; | |
10 | match x { | |
11 | ((a, _) | (_, a), (b @ _, _) | (_, b @ _), (c @ false, _) | (_, c @ true)) | |
12 | if { | |
13 | guard_count += 1; | |
14 | (a, b, c) == target | |
15 | } => | |
16 | { | |
17 | guard_count | |
18 | } | |
19 | _ => unreachable!(), | |
20 | } | |
21 | } | |
22 | ||
23 | // Equivalent to the above code, but hopefully easier to understand. | |
24 | fn search_old_style(target: (bool, bool, bool)) -> u32 { | |
25 | let x = ((false, true), (false, true), (false, true)); | |
26 | let mut guard_count = 0; | |
27 | match x { | |
28 | ((a, _), (b @ _, _), (c @ false, _)) | |
29 | | ((a, _), (b @ _, _), (_, c @ true)) | |
30 | | ((a, _), (_, b @ _), (c @ false, _)) | |
31 | | ((a, _), (_, b @ _), (_, c @ true)) | |
32 | | ((_, a), (b @ _, _), (c @ false, _)) | |
33 | | ((_, a), (b @ _, _), (_, c @ true)) | |
34 | | ((_, a), (_, b @ _), (c @ false, _)) | |
35 | | ((_, a), (_, b @ _), (_, c @ true)) | |
36 | if { | |
37 | guard_count += 1; | |
38 | (a, b, c) == target | |
39 | } => | |
40 | { | |
41 | guard_count | |
42 | } | |
43 | _ => unreachable!(), | |
44 | } | |
45 | } | |
46 | ||
47 | fn main() { | |
48 | assert_eq!(search((false, false, false)), 1); | |
49 | assert_eq!(search((false, false, true)), 2); | |
50 | assert_eq!(search((false, true, false)), 3); | |
51 | assert_eq!(search((false, true, true)), 4); | |
52 | assert_eq!(search((true, false, false)), 5); | |
53 | assert_eq!(search((true, false, true)), 6); | |
54 | assert_eq!(search((true, true, false)), 7); | |
55 | assert_eq!(search((true, true, true)), 8); | |
56 | ||
57 | assert_eq!(search_old_style((false, false, false)), 1); | |
58 | assert_eq!(search_old_style((false, false, true)), 2); | |
59 | assert_eq!(search_old_style((false, true, false)), 3); | |
60 | assert_eq!(search_old_style((false, true, true)), 4); | |
61 | assert_eq!(search_old_style((true, false, false)), 5); | |
62 | assert_eq!(search_old_style((true, false, true)), 6); | |
63 | assert_eq!(search_old_style((true, true, false)), 7); | |
64 | assert_eq!(search_old_style((true, true, true)), 8); | |
65 | } |