1 // run-rustfix
2 
3 #![allow(unused_variables, dead_code)]
4 #![warn(clippy::equatable_if_let)]
5 
6 use std::cmp::Ordering;
7 
8 #[derive(PartialEq)]
9 enum Enum {
10     TupleVariant(i32, u64),
11     RecordVariant { a: i64, b: u32 },
12     UnitVariant,
13     Recursive(Struct),
14 }
15 
16 #[derive(PartialEq)]
17 struct Struct {
18     a: i32,
19     b: bool,
20 }
21 
22 enum NotPartialEq {
23     A,
24     B,
25 }
26 
27 enum NotStructuralEq {
28     A,
29     B,
30 }
31 
32 impl PartialEq for NotStructuralEq {
eq(&self, _: &NotStructuralEq) -> bool33     fn eq(&self, _: &NotStructuralEq) -> bool {
34         false
35     }
36 }
37 
main()38 fn main() {
39     let a = 2;
40     let b = 3;
41     let c = Some(2);
42     let d = Struct { a: 2, b: false };
43     let e = Enum::UnitVariant;
44     let f = NotPartialEq::A;
45     let g = NotStructuralEq::A;
46 
47     // true
48 
49     if let 2 = a {}
50     if let Ordering::Greater = a.cmp(&b) {}
51     if let Some(2) = c {}
52     if let Struct { a: 2, b: false } = d {}
53     if let Enum::TupleVariant(32, 64) = e {}
54     if let Enum::RecordVariant { a: 64, b: 32 } = e {}
55     if let Enum::UnitVariant = e {}
56     if let (Enum::UnitVariant, &Struct { a: 2, b: false }) = (e, &d) {}
57 
58     // false
59 
60     if let 2 | 3 = a {}
61     if let x @ 2 = a {}
62     if let Some(3 | 4) = c {}
63     if let Struct { a, b: false } = d {}
64     if let Struct { a: 2, b: x } = d {}
65     if let NotPartialEq::A = f {}
66     if let NotStructuralEq::A = g {}
67     if let Some(NotPartialEq::A) = Some(f) {}
68     if let Some(NotStructuralEq::A) = Some(g) {}
69 
70     macro_rules! m1 {
71         (x) => {
72             "abc"
73         };
74     }
75     if let m1!(x) = "abc" {
76         println!("OK");
77     }
78 }
79