blob: 03f75e725ed5955b26df93538116a4dc48e8298f [file] [log] [blame]
//@aux-build: proc_macros.rs
#![warn(clippy::manual_is_multiple_of)]
fn main() {}
#[clippy::msrv = "1.87"]
fn f(a: u64, b: u64) {
let _ = a.is_multiple_of(b); //~ manual_is_multiple_of
let _ = (a + 1).is_multiple_of(b + 1); //~ manual_is_multiple_of
let _ = !a.is_multiple_of(b); //~ manual_is_multiple_of
let _ = !(a + 1).is_multiple_of(b + 1); //~ manual_is_multiple_of
let _ = !a.is_multiple_of(b); //~ manual_is_multiple_of
let _ = !a.is_multiple_of(b); //~ manual_is_multiple_of
proc_macros::external! {
let a: u64 = 23424;
let _ = a % 4096 == 0;
}
}
#[clippy::msrv = "1.86"]
fn g(a: u64, b: u64) {
let _ = a % b == 0;
}
fn needs_deref(a: &u64, b: &u64) {
let _ = a.is_multiple_of(*b); //~ manual_is_multiple_of
}
fn closures(a: u64, b: u64) {
// Do not lint, types are ambiguous at this point
let cl = |a, b| a % b == 0;
let _ = cl(a, b);
// Do not lint, types are ambiguous at this point
let cl = |a: _, b: _| a % b == 0;
let _ = cl(a, b);
// Type of `a` is enough
let cl = |a: u64, b| a.is_multiple_of(b); //~ manual_is_multiple_of
let _ = cl(a, b);
// Type of `a` is enough
let cl = |a: &u64, b| a.is_multiple_of(b); //~ manual_is_multiple_of
let _ = cl(&a, b);
// Type of `b` is not enough
let cl = |a, b: u64| a % b == 0;
let _ = cl(&a, b);
}
fn any_rem<T: std::ops::Rem<Output = u32>>(a: T, b: T) {
// An arbitrary `Rem` implementation should not lint
let _ = a % b == 0;
}
mod issue15103 {
fn foo() -> Option<u64> {
let mut n: u64 = 150_000_000;
(2..).find(|p| {
while n.is_multiple_of(*p) {
//~^ manual_is_multiple_of
n /= p;
}
n <= 1
})
}
const fn generate_primes<const N: usize>() -> [u64; N] {
let mut result = [0; N];
if N == 0 {
return result;
}
result[0] = 2;
if N == 1 {
return result;
}
let mut idx = 1;
let mut p = 3;
while idx < N {
let mut j = 0;
while j < idx && p % result[j] != 0 {
j += 1;
}
if j == idx {
result[idx] = p;
idx += 1;
}
p += 1;
}
result
}
fn bar() -> u32 {
let d = |n: u32| -> u32 { (1..=n / 2).filter(|i| n.is_multiple_of(*i)).sum() };
//~^ manual_is_multiple_of
let d = |n| (1..=n / 2).filter(|i| n % i == 0).sum();
(1..1_000).filter(|&i| i == d(d(i)) && i != d(i)).sum()
}
}