mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 13:13:34 +00:00
Updated test case for cast lints.
Also improved readability and reworded the messages.
This commit is contained in:
parent
f1255d5f5d
commit
807dab943b
1 changed files with 46 additions and 32 deletions
|
@ -1,43 +1,57 @@
|
|||
#![feature(plugin)]
|
||||
#![plugin(clippy)]
|
||||
|
||||
#[deny(cast_precision_loss, cast_possible_truncation, cast_sign_loss)]
|
||||
#[allow(dead_code)]
|
||||
#[deny(cast_precision_loss, cast_possible_truncation, cast_sign_loss, cast_possible_wrap)]
|
||||
fn main() {
|
||||
let i : i32 = 42;
|
||||
let u : u32 = 42;
|
||||
let f : f32 = 42.0;
|
||||
|
||||
// Test cast_precision_loss
|
||||
i as f32; //~ERROR converting from i32 to f32, which causes a loss of precision (i32 is 32 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
(i as i64) as f32; //~ERROR converting from i64 to f32, which causes a loss of precision (i64 is 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
(i as i64) as f64; //~ERROR converting from i64 to f64, which causes a loss of precision (i64 is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
u as f32; //~ERROR converting from u32 to f32, which causes a loss of precision (u32 is 32 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
(u as u64) as f32; //~ERROR converting from u64 to f32, which causes a loss of precision (u64 is 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
(u as u64) as f64; //~ERROR converting from u64 to f64, which causes a loss of precision (u64 is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
i as f64; // Should not trigger the lint
|
||||
u as f64; // Should not trigger the lint
|
||||
1i32 as f32; //~ERROR casting i32 to f32 causes a loss of precision (i32 is 32 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1i64 as f32; //~ERROR casting i64 to f32 causes a loss of precision (i64 is 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1i64 as f64; //~ERROR casting i64 to f64 causes a loss of precision (i64 is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
1u32 as f32; //~ERROR casting u32 to f32 causes a loss of precision (u32 is 32 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1u64 as f32; //~ERROR casting u64 to f32 causes a loss of precision (u64 is 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1u64 as f64; //~ERROR casting u64 to f64 causes a loss of precision (u64 is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
1i32 as f64; // Should not trigger the lint
|
||||
1u32 as f64; // Should not trigger the lint
|
||||
|
||||
// Test cast_possible_truncation
|
||||
f as i32; //~ERROR casting f32 to i32 may cause truncation of the value
|
||||
f as u32; //~ERROR casting f32 to u32 may cause truncation of the value
|
||||
//~^ERROR casting from f32 to u32 loses the sign of the value
|
||||
i as u8; //~ERROR casting i32 to u8 may cause truncation of the value
|
||||
//~^ERROR casting from i32 to u8 loses the sign of the value
|
||||
(f as f64) as f32; //~ERROR casting f64 to f32 may cause truncation of the value
|
||||
i as i8; //~ERROR casting i32 to i8 may cause truncation of the value
|
||||
u as i32; //~ERROR casting u32 to i32 may cause truncation of the value
|
||||
1f32 as i32; //~ERROR casting f32 to i32 may truncate the value
|
||||
1f32 as u32; //~ERROR casting f32 to u32 may truncate the value
|
||||
//~^ERROR casting f32 to u32 may lose the sign of the value
|
||||
1f64 as f32; //~ERROR casting f64 to f32 may truncate the value
|
||||
1i32 as i8; //~ERROR casting i32 to i8 may truncate the value
|
||||
1i32 as u8; //~ERROR casting i32 to u8 may truncate the value
|
||||
//~^ERROR casting i32 to u8 may lose the sign of the value
|
||||
1f64 as isize; //~ERROR casting f64 to isize may truncate the value
|
||||
1f64 as usize; //~ERROR casting f64 to usize may truncate the value
|
||||
//~^ERROR casting f64 to usize may lose the sign of the value
|
||||
|
||||
// Test cast_possible_wrap
|
||||
1u8 as i8; //~ERROR casting u8 to i8 may wrap around the value
|
||||
1u16 as i16; //~ERROR casting u16 to i16 may wrap around the value
|
||||
1u32 as i32; //~ERROR casting u32 to i32 may wrap around the value
|
||||
1u64 as i64; //~ERROR casting u64 to i64 may wrap around the value
|
||||
1usize as isize; //~ERROR casting usize to isize may wrap around the value
|
||||
|
||||
// Test cast_sign_loss
|
||||
i as u32; //~ERROR casting from i32 to u32 loses the sign of the value
|
||||
1i32 as u32; //~ERROR casting i32 to u32 may lose the sign of the value
|
||||
1isize as usize; //~ERROR casting isize to usize may lose the sign of the value
|
||||
|
||||
// Extra checks for usize/isize
|
||||
/*
|
||||
let is : isize = -42;
|
||||
let us : usize = 42;
|
||||
is as usize; //ERROR casting from isize to usize loses the sign of the value
|
||||
is as i8; //ERROR casting isize to i8 may cause truncation of the value
|
||||
is as f64; //ERROR converting from isize to f64, which causes a loss of precision on 64-bit architectures (isize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
us as f64; //ERROR converting from usize to f64, which causes a loss of precision on 64-bit architectures (usize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
*/
|
||||
// Extra checks for *size
|
||||
// Casting from *size
|
||||
1isize as i8; //~ERROR casting isize to i8 may truncate the value
|
||||
1isize as f64; //~ERROR casting isize to f64 causes a loss of precision on targets with 64-bit wide pointers (isize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
1usize as f64; //~ERROR casting usize to f64 causes a loss of precision on targets with 64-bit wide pointers (usize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
1isize as f32; //~ERROR casting isize to f32 causes a loss of precision (isize is 32 or 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1usize as f32; //~ERROR casting usize to f32 causes a loss of precision (usize is 32 or 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
1isize as i32; //~ERROR casting isize to i32 may truncate the value on targets with 64-bit wide pointers
|
||||
1isize as u32; //~ERROR casting isize to u32 may lose the sign of the value
|
||||
//~^ERROR casting isize to u32 may truncate the value on targets with 64-bit wide pointers
|
||||
1usize as u32; //~ERROR casting usize to u32 may truncate the value on targets with 64-bit wide pointers
|
||||
// Casting to *size
|
||||
1i64 as isize; //~ERROR casting i64 to isize may truncate the value on targets with 32-bit wide pointers
|
||||
1i64 as usize; //~ERROR casting i64 to usize may truncate the value on targets with 32-bit wide pointers
|
||||
//~^ERROR casting i64 to usize may lose the sign of the value
|
||||
1u64 as isize; //~ERROR casting u64 to isize may truncate the value on targets with 32-bit wide pointers
|
||||
//~^ERROR casting u64 to isize may wrap around the value on targets with 64-bit wide pointers
|
||||
1u64 as usize; //~ERROR casting u64 to usize may truncate the value on targets with 32-bit wide pointers
|
||||
}
|
Loading…
Reference in a new issue