]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/implicit_saturating_sub.rs
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[rust.git] / src / tools / clippy / tests / ui / implicit_saturating_sub.rs
1 // run-rustfix
2 #![allow(unused_assignments, unused_mut, clippy::assign_op_pattern)]
3 #![warn(clippy::implicit_saturating_sub)]
4
5 use std::cmp::PartialEq;
6 use std::ops::SubAssign;
7 // Mock type
8 struct Mock;
9
10 impl PartialEq<u32> for Mock {
11     fn eq(&self, _: &u32) -> bool {
12         true
13     }
14 }
15
16 impl SubAssign<u32> for Mock {
17     fn sub_assign(&mut self, _: u32) {}
18 }
19
20 fn main() {
21     // Tests for unsigned integers
22
23     let end_8: u8 = 10;
24     let start_8: u8 = 5;
25     let mut u_8: u8 = end_8 - start_8;
26
27     // Lint
28     if u_8 > 0 {
29         u_8 = u_8 - 1;
30     }
31
32     match end_8 {
33         10 => {
34             // Lint
35             if u_8 > 0 {
36                 u_8 -= 1;
37             }
38         },
39         11 => u_8 += 1,
40         _ => u_8 = 0,
41     }
42
43     let end_16: u16 = 40;
44     let start_16: u16 = 35;
45
46     let mut u_16: u16 = end_16 - start_16;
47
48     // Lint
49     if u_16 > 0 {
50         u_16 -= 1;
51     }
52
53     let mut end_32: u32 = 7010;
54     let mut start_32: u32 = 7000;
55
56     let mut u_32: u32 = end_32 - start_32;
57
58     // Lint
59     if u_32 != 0 {
60         u_32 -= 1;
61     }
62
63     // No Lint
64     if u_32 > 0 {
65         u_16 += 1;
66     }
67
68     // No Lint
69     if u_32 != 0 {
70         end_32 -= 1;
71         start_32 += 1;
72     }
73
74     let mut end_64: u64 = 75001;
75     let mut start_64: u64 = 75000;
76
77     let mut u_64: u64 = end_64 - start_64;
78
79     // Lint
80     if u_64 > 0 {
81         u_64 -= 1;
82     }
83
84     // Lint
85     if 0 < u_64 {
86         u_64 -= 1;
87     }
88
89     // Lint
90     if 0 != u_64 {
91         u_64 -= 1;
92     }
93
94     // No Lint
95     if u_64 >= 1 {
96         u_64 -= 1;
97     }
98
99     // No Lint
100     if u_64 > 0 {
101         end_64 -= 1;
102     }
103
104     // Tests for usize
105     let end_usize: usize = 8054;
106     let start_usize: usize = 8050;
107
108     let mut u_usize: usize = end_usize - start_usize;
109
110     // Lint
111     if u_usize > 0 {
112         u_usize -= 1;
113     }
114
115     // Tests for signed integers
116
117     let endi_8: i8 = 10;
118     let starti_8: i8 = 50;
119
120     let mut i_8: i8 = endi_8 - starti_8;
121
122     // Lint
123     if i_8 > i8::MIN {
124         i_8 -= 1;
125     }
126
127     // Lint
128     if i_8 > i8::MIN {
129         i_8 -= 1;
130     }
131
132     // Lint
133     if i_8 != i8::MIN {
134         i_8 -= 1;
135     }
136
137     // Lint
138     if i_8 != i8::MIN {
139         i_8 -= 1;
140     }
141
142     let endi_16: i16 = 45;
143     let starti_16: i16 = 44;
144
145     let mut i_16: i16 = endi_16 - starti_16;
146
147     // Lint
148     if i_16 > i16::MIN {
149         i_16 -= 1;
150     }
151
152     // Lint
153     if i_16 > i16::MIN {
154         i_16 -= 1;
155     }
156
157     // Lint
158     if i_16 != i16::MIN {
159         i_16 -= 1;
160     }
161
162     // Lint
163     if i_16 != i16::MIN {
164         i_16 -= 1;
165     }
166
167     let endi_32: i32 = 45;
168     let starti_32: i32 = 44;
169
170     let mut i_32: i32 = endi_32 - starti_32;
171
172     // Lint
173     if i_32 > i32::MIN {
174         i_32 -= 1;
175     }
176
177     // Lint
178     if i_32 > i32::MIN {
179         i_32 -= 1;
180     }
181
182     // Lint
183     if i_32 != i32::MIN {
184         i_32 -= 1;
185     }
186
187     // Lint
188     if i_32 != i32::MIN {
189         i_32 -= 1;
190     }
191
192     let endi_64: i64 = 45;
193     let starti_64: i64 = 44;
194
195     let mut i_64: i64 = endi_64 - starti_64;
196
197     // Lint
198     if i64::MIN < i_64 {
199         i_64 -= 1;
200     }
201
202     // Lint
203     if i64::MIN != i_64 {
204         i_64 -= 1;
205     }
206
207     // Lint
208     if i64::MIN < i_64 {
209         i_64 -= 1;
210     }
211
212     // No Lint
213     if i_64 > 0 {
214         i_64 -= 1;
215     }
216
217     // No Lint
218     if i_64 != 0 {
219         i_64 -= 1;
220     }
221
222     // issue #7831
223     // No Lint
224     if u_32 > 0 {
225         u_32 -= 1;
226     } else {
227         println!("side effect");
228     }
229
230     // Extended tests
231     let mut m = Mock;
232     let mut u_32 = 3000;
233     let a = 200;
234     let mut _b = 8;
235
236     if m != 0 {
237         m -= 1;
238     }
239
240     if a > 0 {
241         _b -= 1;
242     }
243
244     if 0 > a {
245         _b -= 1;
246     }
247
248     if u_32 > 0 {
249         u_32 -= 1;
250     } else {
251         println!("don't lint this");
252     }
253
254     if u_32 > 0 {
255         println!("don't lint this");
256         u_32 -= 1;
257     }
258
259     if u_32 > 42 {
260         println!("brace yourself!");
261     } else if u_32 > 0 {
262         u_32 -= 1;
263     }
264 }