2 #![allow(incomplete_features)]
5 clippy::cast_precision_loss,
6 clippy::cast_possible_truncation,
7 clippy::cast_sign_loss,
8 clippy::cast_possible_wrap
10 #[allow(clippy::no_effect, clippy::unnecessary_operation)]
12 // Test clippy::cast_precision_loss
23 // Test clippy::cast_possible_truncation
31 // Test clippy::cast_possible_wrap
37 // Test clippy::cast_sign_loss
53 (-1isize).abs() as usize;
55 (-1i8).checked_abs().unwrap() as u8;
56 (-1i16).checked_abs().unwrap() as u16;
57 (-1i32).checked_abs().unwrap() as u32;
58 (-1i64).checked_abs().unwrap() as u64;
59 (-1isize).checked_abs().unwrap() as usize;
61 (-1i8).rem_euclid(1i8) as u8;
62 (-1i8).rem_euclid(1i8) as u16;
63 (-1i16).rem_euclid(1i16) as u16;
64 (-1i16).rem_euclid(1i16) as u32;
65 (-1i32).rem_euclid(1i32) as u32;
66 (-1i32).rem_euclid(1i32) as u64;
67 (-1i64).rem_euclid(1i64) as u64;
68 (-1i64).rem_euclid(1i64) as u128;
69 (-1isize).rem_euclid(1isize) as usize;
70 (1i8).rem_euclid(-1i8) as u8;
71 (1i8).rem_euclid(-1i8) as u16;
72 (1i16).rem_euclid(-1i16) as u16;
73 (1i16).rem_euclid(-1i16) as u32;
74 (1i32).rem_euclid(-1i32) as u32;
75 (1i32).rem_euclid(-1i32) as u64;
76 (1i64).rem_euclid(-1i64) as u64;
77 (1i64).rem_euclid(-1i64) as u128;
78 (1isize).rem_euclid(-1isize) as usize;
80 (-1i8).checked_rem_euclid(1i8).unwrap() as u8;
81 (-1i8).checked_rem_euclid(1i8).unwrap() as u16;
82 (-1i16).checked_rem_euclid(1i16).unwrap() as u16;
83 (-1i16).checked_rem_euclid(1i16).unwrap() as u32;
84 (-1i32).checked_rem_euclid(1i32).unwrap() as u32;
85 (-1i32).checked_rem_euclid(1i32).unwrap() as u64;
86 (-1i64).checked_rem_euclid(1i64).unwrap() as u64;
87 (-1i64).checked_rem_euclid(1i64).unwrap() as u128;
88 (-1isize).checked_rem_euclid(1isize).unwrap() as usize;
89 (1i8).checked_rem_euclid(-1i8).unwrap() as u8;
90 (1i8).checked_rem_euclid(-1i8).unwrap() as u16;
91 (1i16).checked_rem_euclid(-1i16).unwrap() as u16;
92 (1i16).checked_rem_euclid(-1i16).unwrap() as u32;
93 (1i32).checked_rem_euclid(-1i32).unwrap() as u32;
94 (1i32).checked_rem_euclid(-1i32).unwrap() as u64;
95 (1i64).checked_rem_euclid(-1i64).unwrap() as u64;
96 (1i64).checked_rem_euclid(-1i64).unwrap() as u128;
97 (1isize).checked_rem_euclid(-1isize).unwrap() as usize;
99 // no lint for `cast_possible_truncation`
100 // with `signum` method call (see issue #5395)
102 let _ = x.signum() as i32;
107 // Test for signed min
108 (-99999999999i64).min(1) as i8; // should be linted because signed
110 // Test for various operations that remove enough bits for the result to fit
111 (999999u64 & 1) as u8;
112 (999999u64 % 15) as u8;
113 (999999u64 / 0x1_0000_0000_0000) as u16;
114 ({ 999999u64 >> 56 }) as u8;
119 999999u64.clamp(0, 255) as u8;
120 999999u64.clamp(0, 256) as u8; // should still be linted
122 #[derive(Clone, Copy)]
130 let _ = self as u8; // Don't lint. `0..=2` fits in u8
134 #[derive(Clone, Copy)]
142 let _ = Self::B as u8;
143 let _ = self as i16; // Don't lint. `255..=256` fits in i16
144 let _ = Self::A as u8; // Don't lint.
148 #[derive(Clone, Copy)]
156 let _ = self as i8; // Don't lint. `-1..=50` fits in i8
160 #[derive(Clone, Copy)]
167 let _ = self as i8; // Don't lint. `-128..=-127` fits in i8
171 #[derive(Clone, Copy)]
179 let _ = Self::A as i8;
180 let _ = self as i16; // Don't lint. `-129..=127` fits in i16
181 let _ = Self::B as u8; // Don't lint.
185 #[derive(Clone, Copy)]
194 let _ = Self::A as u16; // Don't lint. `2^16-1` fits in u16
195 let _ = self as u32; // Don't lint. `2^16-1..=2^16` fits in u32
196 let _ = Self::A as u16; // Don't lint.
200 #[derive(Clone, Copy)]
208 let _ = self as usize;
209 let _ = Self::A as usize; // Don't lint.
210 let _ = self as u64; // Don't lint. `2^32-1..=2^32` fits in u64
214 #[derive(Clone, Copy)]
224 let _ = self as i128; // Don't lint. `-(2^127)..=2^127-1` fits it i128
228 #[derive(Clone, Copy)]
236 let _ = Self::A as u8; // Don't lint.
237 let _ = self as u128; // Don't lint. `0..=2^128-1` fits in u128
241 #[derive(Clone, Copy)]
245 B = u32::MAX as usize,
250 let _ = Self::B as u32; // Don't lint.
251 let _ = self as u64; // Don't lint.