2021-10-04 01:33:40 -05:00
|
|
|
// run-rustfix
|
2022-06-30 10:45:34 -05:00
|
|
|
// aux-build:macro_rules.rs
|
2021-10-04 01:33:40 -05:00
|
|
|
|
2022-05-06 02:10:11 -05:00
|
|
|
#![allow(unused_variables, dead_code, clippy::derive_partial_eq_without_eq)]
|
2021-10-04 01:33:40 -05:00
|
|
|
#![warn(clippy::equatable_if_let)]
|
|
|
|
|
2022-06-30 10:45:34 -05:00
|
|
|
#[macro_use]
|
|
|
|
extern crate macro_rules;
|
|
|
|
|
2021-10-04 01:33:40 -05:00
|
|
|
use std::cmp::Ordering;
|
|
|
|
|
|
|
|
#[derive(PartialEq)]
|
|
|
|
enum Enum {
|
|
|
|
TupleVariant(i32, u64),
|
|
|
|
RecordVariant { a: i64, b: u32 },
|
|
|
|
UnitVariant,
|
|
|
|
Recursive(Struct),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(PartialEq)]
|
|
|
|
struct Struct {
|
|
|
|
a: i32,
|
|
|
|
b: bool,
|
|
|
|
}
|
|
|
|
|
2022-08-23 12:50:34 -05:00
|
|
|
struct NoPartialEqStruct {
|
|
|
|
a: i32,
|
|
|
|
b: bool,
|
|
|
|
}
|
|
|
|
|
2021-10-04 01:33:40 -05:00
|
|
|
enum NotPartialEq {
|
|
|
|
A,
|
|
|
|
B,
|
|
|
|
}
|
|
|
|
|
|
|
|
enum NotStructuralEq {
|
|
|
|
A,
|
|
|
|
B,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl PartialEq for NotStructuralEq {
|
|
|
|
fn eq(&self, _: &NotStructuralEq) -> bool {
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let a = 2;
|
|
|
|
let b = 3;
|
|
|
|
let c = Some(2);
|
|
|
|
let d = Struct { a: 2, b: false };
|
|
|
|
let e = Enum::UnitVariant;
|
|
|
|
let f = NotPartialEq::A;
|
|
|
|
let g = NotStructuralEq::A;
|
2022-08-23 12:50:34 -05:00
|
|
|
let h = NoPartialEqStruct { a: 2, b: false };
|
2021-10-04 01:33:40 -05:00
|
|
|
|
|
|
|
// true
|
|
|
|
|
|
|
|
if a == 2 {}
|
|
|
|
if a.cmp(&b) == Ordering::Greater {}
|
|
|
|
if c == Some(2) {}
|
|
|
|
if d == (Struct { a: 2, b: false }) {}
|
|
|
|
if e == Enum::TupleVariant(32, 64) {}
|
|
|
|
if e == (Enum::RecordVariant { a: 64, b: 32 }) {}
|
|
|
|
if e == Enum::UnitVariant {}
|
|
|
|
if (e, &d) == (Enum::UnitVariant, &Struct { a: 2, b: false }) {}
|
|
|
|
|
|
|
|
// false
|
|
|
|
|
|
|
|
if let 2 | 3 = a {}
|
|
|
|
if let x @ 2 = a {}
|
|
|
|
if let Some(3 | 4) = c {}
|
|
|
|
if let Struct { a, b: false } = d {}
|
|
|
|
if let Struct { a: 2, b: x } = d {}
|
2022-08-23 12:50:34 -05:00
|
|
|
if matches!(f, NotPartialEq::A) {}
|
2021-10-04 01:33:40 -05:00
|
|
|
if g == NotStructuralEq::A {}
|
2022-08-23 12:50:34 -05:00
|
|
|
if matches!(Some(f), Some(NotPartialEq::A)) {}
|
2021-10-04 01:33:40 -05:00
|
|
|
if Some(g) == Some(NotStructuralEq::A) {}
|
2022-08-23 12:50:34 -05:00
|
|
|
if matches!(h, NoPartialEqStruct { a: 2, b: false }) {}
|
2021-10-08 08:26:10 -05:00
|
|
|
|
|
|
|
macro_rules! m1 {
|
|
|
|
(x) => {
|
|
|
|
"abc"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
if "abc" == m1!(x) {
|
|
|
|
println!("OK");
|
|
|
|
}
|
2022-06-30 10:45:34 -05:00
|
|
|
|
|
|
|
equatable_if_let!(a);
|
2021-10-04 01:33:40 -05:00
|
|
|
}
|