]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/tests/ui/implicit_saturating_sub.fixed
93df81b1a7ff0355fa99bb2cf9bdef5d6a11c83d
[rustc.git] / src / tools / clippy / tests / ui / implicit_saturating_sub.fixed
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 u_8 = u_8.saturating_sub(1);
29
30 match end_8 {
31 10 => {
32 // Lint
33 u_8 = u_8.saturating_sub(1);
34 },
35 11 => u_8 += 1,
36 _ => u_8 = 0,
37 }
38
39 let end_16: u16 = 40;
40 let start_16: u16 = 35;
41
42 let mut u_16: u16 = end_16 - start_16;
43
44 // Lint
45 u_16 = u_16.saturating_sub(1);
46
47 let mut end_32: u32 = 7010;
48 let mut start_32: u32 = 7000;
49
50 let mut u_32: u32 = end_32 - start_32;
51
52 // Lint
53 u_32 = u_32.saturating_sub(1);
54
55 // No Lint
56 if u_32 > 0 {
57 u_16 += 1;
58 }
59
60 // No Lint
61 if u_32 != 0 {
62 end_32 -= 1;
63 start_32 += 1;
64 }
65
66 let mut end_64: u64 = 75001;
67 let mut start_64: u64 = 75000;
68
69 let mut u_64: u64 = end_64 - start_64;
70
71 // Lint
72 u_64 = u_64.saturating_sub(1);
73
74 // Lint
75 u_64 = u_64.saturating_sub(1);
76
77 // Lint
78 u_64 = u_64.saturating_sub(1);
79
80 // No Lint
81 if u_64 >= 1 {
82 u_64 -= 1;
83 }
84
85 // No Lint
86 if u_64 > 0 {
87 end_64 -= 1;
88 }
89
90 // Tests for usize
91 let end_usize: usize = 8054;
92 let start_usize: usize = 8050;
93
94 let mut u_usize: usize = end_usize - start_usize;
95
96 // Lint
97 u_usize = u_usize.saturating_sub(1);
98
99 // Tests for signed integers
100
101 let endi_8: i8 = 10;
102 let starti_8: i8 = 50;
103
104 let mut i_8: i8 = endi_8 - starti_8;
105
106 // Lint
107 i_8 = i_8.saturating_sub(1);
108
109 // Lint
110 i_8 = i_8.saturating_sub(1);
111
112 // Lint
113 i_8 = i_8.saturating_sub(1);
114
115 // Lint
116 i_8 = i_8.saturating_sub(1);
117
118 let endi_16: i16 = 45;
119 let starti_16: i16 = 44;
120
121 let mut i_16: i16 = endi_16 - starti_16;
122
123 // Lint
124 i_16 = i_16.saturating_sub(1);
125
126 // Lint
127 i_16 = i_16.saturating_sub(1);
128
129 // Lint
130 i_16 = i_16.saturating_sub(1);
131
132 // Lint
133 i_16 = i_16.saturating_sub(1);
134
135 let endi_32: i32 = 45;
136 let starti_32: i32 = 44;
137
138 let mut i_32: i32 = endi_32 - starti_32;
139
140 // Lint
141 i_32 = i_32.saturating_sub(1);
142
143 // Lint
144 i_32 = i_32.saturating_sub(1);
145
146 // Lint
147 i_32 = i_32.saturating_sub(1);
148
149 // Lint
150 i_32 = i_32.saturating_sub(1);
151
152 let endi_64: i64 = 45;
153 let starti_64: i64 = 44;
154
155 let mut i_64: i64 = endi_64 - starti_64;
156
157 // Lint
158 i_64 = i_64.saturating_sub(1);
159
160 // Lint
161 i_64 = i_64.saturating_sub(1);
162
163 // Lint
164 i_64 = i_64.saturating_sub(1);
165
166 // No Lint
167 if i_64 > 0 {
168 i_64 -= 1;
169 }
170
171 // No Lint
172 if i_64 != 0 {
173 i_64 -= 1;
174 }
175
176 // issue #7831
177 // No Lint
178 if u_32 > 0 {
179 u_32 -= 1;
180 } else {
181 println!("side effect");
182 }
183
184 // Extended tests
185 let mut m = Mock;
186 let mut u_32 = 3000;
187 let a = 200;
188 let mut _b = 8;
189
190 if m != 0 {
191 m -= 1;
192 }
193
194 if a > 0 {
195 _b -= 1;
196 }
197
198 if 0 > a {
199 _b -= 1;
200 }
201
202 if u_32 > 0 {
203 u_32 -= 1;
204 } else {
205 println!("don't lint this");
206 }
207
208 if u_32 > 0 {
209 println!("don't lint this");
210 u_32 -= 1;
211 }
212
213 if u_32 > 42 {
214 println!("brace yourself!");
215 } else if u_32 > 0 {
216 u_32 -= 1;
217 }
218 }