| //@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() |
| } |
| } |