]> git.lizzy.rs Git - rust.git/blob - tests/ui/checked_conversions.rs
Added lint for TryFrom for checked integer conversion rust-lang#3947.
[rust.git] / tests / ui / checked_conversions.rs
1 #![warn(clippy::checked_conversions)]
2 #![allow(clippy::cast_lossless)]
3
4 // Positive tests
5
6 // Signed to unsigned
7
8 fn i64_to_u32(value: i64) -> Option<u32> {
9     if value <= (u32::max_value() as i64) && value >= 0 {
10         Some(value as u32)
11     } else {
12         None
13     }
14 }
15
16 fn i64_to_u16(value: i64) -> Option<u16> {
17     if value <= i64::from(u16::max_value()) && value >= 0 {
18         Some(value as u16)
19     } else {
20         None
21     }
22 }
23
24 fn isize_to_u8(value: isize) -> Option<u8> {
25     if value <= (u8::max_value() as isize) && value >= 0 {
26         Some(value as u8)
27     } else {
28         None
29     }
30 }
31
32 // Signed to signed
33
34 fn i64_to_i32(value: i64) -> Option<i32> {
35     if value <= (i32::max_value() as i64) && value >= (i32::min_value() as i64) {
36         Some(value as i32)
37     } else {
38         None
39     }
40 }
41
42 fn i64_to_i16(value: i64) -> Option<i16> {
43     if value <= i64::from(i16::max_value()) && value >= i64::from(i16::min_value()) {
44         Some(value as i16)
45     } else {
46         None
47     }
48 }
49
50 // Unsigned to X
51
52 fn u32_to_i32(value: u32) -> Option<i32> {
53     if value <= i32::max_value() as u32 {
54         Some(value as i32)
55     } else {
56         None
57     }
58 }
59
60 fn usize_to_isize(value: usize) -> isize {
61     if value <= isize::max_value() as usize && value as i32 == 5 {
62         5
63     } else {
64         1
65     }
66 }
67
68 fn u32_to_u16(value: u32) -> isize {
69     if value <= u16::max_value() as u32 && value as i32 == 5 {
70         5
71     } else {
72         1
73     }
74 }
75
76 // Negative tests
77
78 fn no_i64_to_i32(value: i64) -> Option<i32> {
79     if value <= (i32::max_value() as i64) && value >= 0 {
80         Some(value as i32)
81     } else {
82         None
83     }
84 }
85
86 fn no_isize_to_u8(value: isize) -> Option<u8> {
87     if value <= (u8::max_value() as isize) && value >= (u8::min_value() as isize) {
88         Some(value as u8)
89     } else {
90         None
91     }
92 }
93
94 fn i8_to_u8(value: i8) -> Option<u8> {
95     if value >= 0 {
96         Some(value as u8)
97     } else {
98         None
99     }
100 }
101
102 fn main() {}