rust/tests/ui/nonminimal_bool.rs
bors af91e6ea8c Auto merge of #12374 - Alexendoo:duplicate-diagnostics, r=Manishearth
Show duplicate diagnostics in UI tests by default

Duplicated diagnostics can indicate where redundant work is being done, this PR doesn't fix any of that but does indicate in which tests they're occurring for future investigation or to catch issues in future lints

changelog: none
2024-02-28 16:19:08 +00:00

183 lines
4.6 KiB
Rust

//@no-rustfix: overlapping suggestions
//@compile-flags: -Zdeduplicate-diagnostics=yes
#![feature(lint_reasons)]
#![allow(
unused,
clippy::diverging_sub_expression,
clippy::needless_if,
clippy::redundant_pattern_matching
)]
#![warn(clippy::nonminimal_bool)]
#![allow(clippy::useless_vec)]
fn main() {
let a: bool = unimplemented!();
let b: bool = unimplemented!();
let c: bool = unimplemented!();
let d: bool = unimplemented!();
let e: bool = unimplemented!();
let _ = !true;
//~^ ERROR: this boolean expression can be simplified
//~| NOTE: `-D clippy::nonminimal-bool` implied by `-D warnings`
let _ = !false;
//~^ ERROR: this boolean expression can be simplified
let _ = !!a;
//~^ ERROR: this boolean expression can be simplified
let _ = false || a;
//~^ ERROR: this boolean expression can be simplified
// don't lint on cfgs
let _ = cfg!(you_shall_not_not_pass) && a;
let _ = a || !b || !c || !d || !e;
let _ = !(!a && b);
//~^ ERROR: this boolean expression can be simplified
let _ = !(!a || b);
//~^ ERROR: this boolean expression can be simplified
let _ = !a && !(b && c);
//~^ ERROR: this boolean expression can be simplified
}
fn equality_stuff() {
let a: i32 = unimplemented!();
let b: i32 = unimplemented!();
let c: i32 = unimplemented!();
let d: i32 = unimplemented!();
let _ = a == b && c == 5 && a == b;
//~^ ERROR: this boolean expression can be simplified
let _ = a == b || c == 5 || a == b;
//~^ ERROR: this boolean expression can be simplified
let _ = a == b && c == 5 && b == a;
//~^ ERROR: this boolean expression can be simplified
let _ = a != b || !(a != b || c == d);
//~^ ERROR: this boolean expression can be simplified
let _ = a != b && !(a != b && c == d);
//~^ ERROR: this boolean expression can be simplified
}
fn issue3847(a: u32, b: u32) -> bool {
const THRESHOLD: u32 = 1_000;
if a < THRESHOLD && b >= THRESHOLD || a >= THRESHOLD && b < THRESHOLD {
return false;
}
true
}
fn issue4548() {
fn f(_i: u32, _j: u32) -> u32 {
unimplemented!();
}
let i = 0;
let j = 0;
if i != j && f(i, j) != 0 || i == j && f(i, j) != 1 {}
}
fn check_expect() {
let a: bool = unimplemented!();
#[expect(clippy::nonminimal_bool)]
let _ = !!a;
}
fn issue9428() {
if matches!(true, true) && true {
//~^ ERROR: this boolean expression can be simplified
println!("foo");
}
}
fn issue_10523() {
macro_rules! a {
($v:expr) => {
$v.is_some()
};
}
let x: Option<u32> = None;
if !a!(x) {}
}
fn issue_10523_1() {
macro_rules! a {
($v:expr) => {
!$v.is_some()
};
}
let x: Option<u32> = None;
if a!(x) {}
}
fn issue_10523_2() {
macro_rules! a {
() => {
!None::<u32>.is_some()
};
}
if a!() {}
}
fn issue_10435() {
let x = vec![0];
let y = vec![1];
let z = vec![2];
// vvv Should not lint
#[allow(clippy::nonminimal_bool)]
if !x.is_empty() && !(y.is_empty() || z.is_empty()) {
println!("{}", line!());
}
// vvv Should not lint (#10435 talks about a bug where it lints)
#[allow(clippy::nonminimal_bool)]
if !(x == [0]) {
println!("{}", line!());
}
}
fn issue10836() {
struct Foo(bool);
impl std::ops::Not for Foo {
type Output = bool;
fn not(self) -> Self::Output {
!self.0
}
}
// Should not lint
let _: bool = !!Foo(true);
}
fn issue11932() {
let x: i32 = unimplemented!();
#[allow(clippy::nonminimal_bool)]
let _ = x % 2 == 0 || {
// Should not lint
assert!(x > 0);
x % 3 == 0
};
}
fn issue_5794() {
let a = 0;
if !(12 == a) {} //~ ERROR: this boolean expression can be simplified
if !(a == 12) {} //~ ERROR: this boolean expression can be simplified
if !(12 != a) {} //~ ERROR: this boolean expression can be simplified
if !(a != 12) {} //~ ERROR: this boolean expression can be simplified
let b = true;
let c = false;
if !b == true {} //~ ERROR: this boolean expression can be simplified
if !b != true {} //~ ERROR: this boolean expression can be simplified
if true == !b {} //~ ERROR: this boolean expression can be simplified
if true != !b {} //~ ERROR: this boolean expression can be simplified
if !b == !c {} //~ ERROR: this boolean expression can be simplified
if !b != !c {} //~ ERROR: this boolean expression can be simplified
}
fn issue_12371(x: usize) -> bool {
// Should not warn!
!x != 0
}