1 #[warn( 2 clippy::cast_precision_loss, 3 clippy::cast_possible_truncation, 4 clippy::cast_sign_loss, 5 clippy::cast_possible_wrap 6 )] 7 #[allow(clippy::no_effect, clippy::unnecessary_operation)] main()8fn main() { 9 // Test clippy::cast_precision_loss 10 let x0 = 1i32; 11 x0 as f32; 12 let x1 = 1i64; 13 x1 as f32; 14 x1 as f64; 15 let x2 = 1u32; 16 x2 as f32; 17 let x3 = 1u64; 18 x3 as f32; 19 x3 as f64; 20 // Test clippy::cast_possible_truncation 21 1f32 as i32; 22 1f32 as u32; 23 1f64 as f32; 24 1i32 as i8; 25 1i32 as u8; 26 1f64 as isize; 27 1f64 as usize; 28 // Test clippy::cast_possible_wrap 29 1u8 as i8; 30 1u16 as i16; 31 1u32 as i32; 32 1u64 as i64; 33 1usize as isize; 34 // Test clippy::cast_sign_loss 35 1i32 as u32; 36 -1i32 as u32; 37 1isize as usize; 38 -1isize as usize; 39 0i8 as u8; 40 i8::MAX as u8; 41 i16::MAX as u16; 42 i32::MAX as u32; 43 i64::MAX as u64; 44 i128::MAX as u128; 45 46 (-1i8).abs() as u8; 47 (-1i16).abs() as u16; 48 (-1i32).abs() as u32; 49 (-1i64).abs() as u64; 50 (-1isize).abs() as usize; 51 52 (-1i8).checked_abs().unwrap() as u8; 53 (-1i16).checked_abs().unwrap() as u16; 54 (-1i32).checked_abs().unwrap() as u32; 55 (-1i64).checked_abs().unwrap() as u64; 56 (-1isize).checked_abs().unwrap() as usize; 57 58 (-1i8).rem_euclid(1i8) as u8; 59 (-1i8).rem_euclid(1i8) as u16; 60 (-1i16).rem_euclid(1i16) as u16; 61 (-1i16).rem_euclid(1i16) as u32; 62 (-1i32).rem_euclid(1i32) as u32; 63 (-1i32).rem_euclid(1i32) as u64; 64 (-1i64).rem_euclid(1i64) as u64; 65 (-1i64).rem_euclid(1i64) as u128; 66 (-1isize).rem_euclid(1isize) as usize; 67 (1i8).rem_euclid(-1i8) as u8; 68 (1i8).rem_euclid(-1i8) as u16; 69 (1i16).rem_euclid(-1i16) as u16; 70 (1i16).rem_euclid(-1i16) as u32; 71 (1i32).rem_euclid(-1i32) as u32; 72 (1i32).rem_euclid(-1i32) as u64; 73 (1i64).rem_euclid(-1i64) as u64; 74 (1i64).rem_euclid(-1i64) as u128; 75 (1isize).rem_euclid(-1isize) as usize; 76 77 (-1i8).checked_rem_euclid(1i8).unwrap() as u8; 78 (-1i8).checked_rem_euclid(1i8).unwrap() as u16; 79 (-1i16).checked_rem_euclid(1i16).unwrap() as u16; 80 (-1i16).checked_rem_euclid(1i16).unwrap() as u32; 81 (-1i32).checked_rem_euclid(1i32).unwrap() as u32; 82 (-1i32).checked_rem_euclid(1i32).unwrap() as u64; 83 (-1i64).checked_rem_euclid(1i64).unwrap() as u64; 84 (-1i64).checked_rem_euclid(1i64).unwrap() as u128; 85 (-1isize).checked_rem_euclid(1isize).unwrap() as usize; 86 (1i8).checked_rem_euclid(-1i8).unwrap() as u8; 87 (1i8).checked_rem_euclid(-1i8).unwrap() as u16; 88 (1i16).checked_rem_euclid(-1i16).unwrap() as u16; 89 (1i16).checked_rem_euclid(-1i16).unwrap() as u32; 90 (1i32).checked_rem_euclid(-1i32).unwrap() as u32; 91 (1i32).checked_rem_euclid(-1i32).unwrap() as u64; 92 (1i64).checked_rem_euclid(-1i64).unwrap() as u64; 93 (1i64).checked_rem_euclid(-1i64).unwrap() as u128; 94 (1isize).checked_rem_euclid(-1isize).unwrap() as usize; 95 96 // no lint for `cast_possible_truncation` 97 // with `signum` method call (see issue #5395) 98 let x: i64 = 5; 99 let _ = x.signum() as i32; 100 101 let s = x.signum(); 102 let _ = s as i32; 103 104 // Test for signed min 105 (-99999999999i64).min(1) as i8; // should be linted because signed 106 107 // Test for various operations that remove enough bits for the result to fit 108 (999999u64 & 1) as u8; 109 (999999u64 % 15) as u8; 110 (999999u64 / 0x1_0000_0000_0000) as u16; 111 ({ 999999u64 >> 56 }) as u8; 112 ({ 113 let x = 999999u64; 114 x.min(1) 115 }) as u8; 116 999999u64.clamp(0, 255) as u8; 117 999999u64.clamp(0, 256) as u8; // should still be linted 118 } 119