]> git.lizzy.rs Git - rust.git/blob - tests/ui/match_same_arms.rs
UI test cleanup: Rename copies.rs to match_same_arms.rs
[rust.git] / tests / ui / match_same_arms.rs
1 #![allow(
2     clippy::blacklisted_name,
3     clippy::collapsible_if,
4     clippy::cyclomatic_complexity,
5     clippy::eq_op,
6     clippy::needless_continue,
7     clippy::needless_return,
8     clippy::no_effect,
9     clippy::zero_divided_by_zero,
10     clippy::unused_unit
11 )]
12
13 fn bar<T>(_: T) {}
14 fn foo() -> bool {
15     unimplemented!()
16 }
17
18 pub enum Abc {
19     A,
20     B,
21     C,
22 }
23
24 #[warn(clippy::match_same_arms)]
25 #[allow(clippy::unused_unit)]
26 fn match_same_arms() {
27     let _ = match 42 {
28         42 => {
29             foo();
30             let mut a = 42 + [23].len() as i32;
31             if true {
32                 a += 7;
33             }
34             a = -31 - a;
35             a
36         },
37         _ => {
38             //~ ERROR match arms have same body
39             foo();
40             let mut a = 42 + [23].len() as i32;
41             if true {
42                 a += 7;
43             }
44             a = -31 - a;
45             a
46         },
47     };
48
49     let _ = match Abc::A {
50         Abc::A => 0,
51         Abc::B => 1,
52         _ => 0, //~ ERROR match arms have same body
53     };
54
55     let _ = match 42 {
56         42 => foo(),
57         51 => foo(), //~ ERROR match arms have same body
58         _ => true,
59     };
60
61     let _ = match Some(42) {
62         Some(_) => 24,
63         None => 24, //~ ERROR match arms have same body
64     };
65
66     let _ = match Some(42) {
67         Some(foo) => 24,
68         None => 24,
69     };
70
71     let _ = match Some(42) {
72         Some(42) => 24,
73         Some(a) => 24, // bindings are different
74         None => 0,
75     };
76
77     let _ = match Some(42) {
78         Some(a) if a > 0 => 24,
79         Some(a) => 24, // one arm has a guard
80         None => 0,
81     };
82
83     match (Some(42), Some(42)) {
84         (Some(a), None) => bar(a),
85         (None, Some(a)) => bar(a), //~ ERROR match arms have same body
86         _ => (),
87     }
88
89     match (Some(42), Some(42)) {
90         (Some(a), ..) => bar(a),
91         (.., Some(a)) => bar(a), //~ ERROR match arms have same body
92         _ => (),
93     }
94
95     match (1, 2, 3) {
96         (1, .., 3) => 42,
97         (.., 3) => 42, //~ ERROR match arms have same body
98         _ => 0,
99     };
100
101     let _ = match Some(()) {
102         Some(()) => 0.0,
103         None => -0.0,
104     };
105
106     match (Some(42), Some("")) {
107         (Some(a), None) => bar(a),
108         (None, Some(a)) => bar(a), // bindings have different types
109         _ => (),
110     }
111 }
112
113 fn main() {}