rust/tests/ui/len_zero.rs

152 lines
3.1 KiB
Rust
Raw Normal View History

// run-rustfix
#![warn(clippy::len_zero)]
#![allow(dead_code, unused, clippy::len_without_is_empty)]
pub struct One;
struct Wither;
trait TraitsToo {
2019-01-30 19:15:29 -06:00
fn len(self: &Self) -> isize;
// No error; `len` is private; see issue #1085.
}
impl TraitsToo for One {
fn len(self: &Self) -> isize {
0
}
}
pub struct HasIsEmpty;
impl HasIsEmpty {
pub fn len(self: &Self) -> isize {
1
}
fn is_empty(self: &Self) -> bool {
false
}
}
pub struct HasWrongIsEmpty;
impl HasWrongIsEmpty {
2017-02-08 07:58:07 -06:00
pub fn len(self: &Self) -> isize {
1
}
pub fn is_empty(self: &Self, x: u32) -> bool {
false
}
}
pub trait WithIsEmpty {
fn len(self: &Self) -> isize;
fn is_empty(self: &Self) -> bool;
}
impl WithIsEmpty for Wither {
fn len(self: &Self) -> isize {
1
}
fn is_empty(self: &Self) -> bool {
false
}
}
fn main() {
let x = [1, 2];
2016-02-24 13:52:47 -06:00
if x.len() == 0 {
println!("This should not happen!");
}
if "".len() == 0 {}
let y = One;
if y.len() == 0 {
2019-01-30 19:15:29 -06:00
// No error; `One` does not have `.is_empty()`.
println!("This should not happen either!");
}
let z: &dyn TraitsToo = &y;
if z.len() > 0 {
2019-01-30 19:15:29 -06:00
// No error; `TraitsToo` has no `.is_empty()` method.
println!("Nor should this!");
}
let has_is_empty = HasIsEmpty;
if has_is_empty.len() == 0 {
println!("Or this!");
}
if has_is_empty.len() != 0 {
println!("Or this!");
}
if has_is_empty.len() > 0 {
println!("Or this!");
}
if has_is_empty.len() < 1 {
println!("Or this!");
}
if has_is_empty.len() >= 1 {
println!("Or this!");
}
if has_is_empty.len() > 1 {
2019-01-30 19:15:29 -06:00
// No error.
println!("This can happen.");
}
if has_is_empty.len() <= 1 {
2019-01-30 19:15:29 -06:00
// No error.
println!("This can happen.");
}
if 0 == has_is_empty.len() {
println!("Or this!");
}
if 0 != has_is_empty.len() {
println!("Or this!");
}
if 0 < has_is_empty.len() {
println!("Or this!");
}
if 1 <= has_is_empty.len() {
println!("Or this!");
}
if 1 > has_is_empty.len() {
println!("Or this!");
}
if 1 < has_is_empty.len() {
2019-01-30 19:15:29 -06:00
// No error.
println!("This can happen.");
}
if 1 >= has_is_empty.len() {
2019-01-30 19:15:29 -06:00
// No error.
println!("This can happen.");
}
assert!(!has_is_empty.is_empty());
let with_is_empty: &dyn WithIsEmpty = &Wither;
if with_is_empty.len() == 0 {
println!("Or this!");
}
assert!(!with_is_empty.is_empty());
let has_wrong_is_empty = HasWrongIsEmpty;
if has_wrong_is_empty.len() == 0 {
2019-01-30 19:15:29 -06:00
// No error; `HasWrongIsEmpty` does not have `.is_empty()`.
println!("Or this!");
}
}
2017-02-24 21:26:33 -06:00
fn test_slice(b: &[u8]) {
if b.len() != 0 {}
2017-02-24 21:26:33 -06:00
}
mod issue_3807 {
// Avoid suggesting changes to ranges if the user did not enable `range_is_empty`.
// See https://github.com/rust-lang/rust/issues/48111#issuecomment-445132965
fn no_suggestion() {
let _ = (0..42).len() == 0;
}
}