]> git.proxmox.com Git - rustc.git/blame - src/test/ui/or-patterns/search-via-bindings.rs
New upstream version 1.46.0~beta.2+dfsg1
[rustc.git] / src / test / ui / or-patterns / search-via-bindings.rs
CommitLineData
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
7fn 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.
24fn 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
47fn 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}