]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/cast.rs
Auto merge of #3603 - xfix:random-state-lint, r=phansch
[rust.git] / tests / ui / cast.rs
index d0ea5f40789d934167a6131c8eddd7445910e1ec..51e41b701724089606f97fef06e0831ee0c5f9fc 100644 (file)
@@ -1,64 +1,59 @@
-#![feature(plugin)]
-#![plugin(clippy)]
+// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
 
-#[deny(cast_precision_loss, cast_possible_truncation, cast_sign_loss, cast_possible_wrap)]
-#[allow(no_effect, unnecessary_operation)]
+#[warn(
+    clippy::cast_precision_loss,
+    clippy::cast_possible_truncation,
+    clippy::cast_sign_loss,
+    clippy::cast_possible_wrap,
+    clippy::cast_lossless
+)]
+#[allow(clippy::no_effect, clippy::unnecessary_operation)]
 fn main() {
-    // Test cast_precision_loss
-    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
-    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
-    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
-
+    // Test clippy::cast_precision_loss
+    1i32 as f32;
+    1i64 as f32;
+    1i64 as f64;
+    1u32 as f32;
+    1u64 as f32;
+    1u64 as f64;
+    // Test clippy::cast_possible_truncation
+    1f32 as i32;
+    1f32 as u32;
+    1f64 as f32;
+    1i32 as i8;
+    1i32 as u8;
+    1f64 as isize;
+    1f64 as usize;
+    // Test clippy::cast_possible_wrap
+    1u8 as i8;
+    1u16 as i16;
+    1u32 as i32;
+    1u64 as i64;
+    1usize as isize;
+    // Test clippy::cast_lossless with casts from floating-point types
+    1.0f32 as f64;
+    // Test clippy::cast_lossless with an expression wrapped in parens
+    (1u8 + 1u8) as u16;
+    // Test clippy::cast_sign_loss
+    1i32 as u32;
+    1isize as usize;
     // 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
-    1usize as i32; //~ERROR casting usize to i32 may truncate the value on targets with 64-bit wide pointers
-                  //~^ERROR casting usize to i32 may wrap around the value on targets with 32-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
-    1u32 as isize; //~ERROR casting u32 to isize may wrap around the value on targets with 32-bit wide pointers
-    1u32 as usize; // Should not trigger any lint
-    1i32 as isize; // Neither should this
-    1i32 as usize; //~ERROR casting i32 to usize may lose the sign of the value
+    // Test cast_unnecessary
+    1i32 as i32;
+    1f32 as f32;
+    false as bool;
+    &1i32 as &i32;
+    // Should not trigger
+    #[rustfmt::skip]
+    let v = vec!(1);
+    &v as &[i32];
+    1.0 as f64;
+    1 as u64;
 }