1// run-rustfix
2#![allow(unused_assignments, unused_mut, clippy::assign_op_pattern)]
3#![warn(clippy::implicit_saturating_sub)]
4
5fn main() {
6    // Tests for unsigned integers
7
8    let end_8: u8 = 10;
9    let start_8: u8 = 5;
10    let mut u_8: u8 = end_8 - start_8;
11
12    // Lint
13    u_8 = u_8.saturating_sub(1);
14
15    match end_8 {
16        10 => {
17            // Lint
18            u_8 = u_8.saturating_sub(1);
19        },
20        11 => u_8 += 1,
21        _ => u_8 = 0,
22    }
23
24    let end_16: u16 = 40;
25    let start_16: u16 = 35;
26
27    let mut u_16: u16 = end_16 - start_16;
28
29    // Lint
30    u_16 = u_16.saturating_sub(1);
31
32    let mut end_32: u32 = 7010;
33    let mut start_32: u32 = 7000;
34
35    let mut u_32: u32 = end_32 - start_32;
36
37    // Lint
38    u_32 = u_32.saturating_sub(1);
39
40    // No Lint
41    if u_32 > 0 {
42        u_16 += 1;
43    }
44
45    // No Lint
46    if u_32 != 0 {
47        end_32 -= 1;
48        start_32 += 1;
49    }
50
51    let mut end_64: u64 = 75001;
52    let mut start_64: u64 = 75000;
53
54    let mut u_64: u64 = end_64 - start_64;
55
56    // Lint
57    u_64 = u_64.saturating_sub(1);
58
59    // Lint
60    u_64 = u_64.saturating_sub(1);
61
62    // Lint
63    u_64 = u_64.saturating_sub(1);
64
65    // No Lint
66    if u_64 >= 1 {
67        u_64 -= 1;
68    }
69
70    // No Lint
71    if u_64 > 0 {
72        end_64 -= 1;
73    }
74
75    // Tests for usize
76    let end_usize: usize = 8054;
77    let start_usize: usize = 8050;
78
79    let mut u_usize: usize = end_usize - start_usize;
80
81    // Lint
82    u_usize = u_usize.saturating_sub(1);
83
84    // Tests for signed integers
85
86    let endi_8: i8 = 10;
87    let starti_8: i8 = 50;
88
89    let mut i_8: i8 = endi_8 - starti_8;
90
91    // Lint
92    i_8 = i_8.saturating_sub(1);
93
94    // Lint
95    i_8 = i_8.saturating_sub(1);
96
97    // Lint
98    i_8 = i_8.saturating_sub(1);
99
100    // Lint
101    i_8 = i_8.saturating_sub(1);
102
103    let endi_16: i16 = 45;
104    let starti_16: i16 = 44;
105
106    let mut i_16: i16 = endi_16 - starti_16;
107
108    // Lint
109    i_16 = i_16.saturating_sub(1);
110
111    // Lint
112    i_16 = i_16.saturating_sub(1);
113
114    // Lint
115    i_16 = i_16.saturating_sub(1);
116
117    // Lint
118    i_16 = i_16.saturating_sub(1);
119
120    let endi_32: i32 = 45;
121    let starti_32: i32 = 44;
122
123    let mut i_32: i32 = endi_32 - starti_32;
124
125    // Lint
126    i_32 = i_32.saturating_sub(1);
127
128    // Lint
129    i_32 = i_32.saturating_sub(1);
130
131    // Lint
132    i_32 = i_32.saturating_sub(1);
133
134    // Lint
135    i_32 = i_32.saturating_sub(1);
136
137    let endi_64: i64 = 45;
138    let starti_64: i64 = 44;
139
140    let mut i_64: i64 = endi_64 - starti_64;
141
142    // Lint
143    i_64 = i_64.saturating_sub(1);
144
145    // Lint
146    i_64 = i_64.saturating_sub(1);
147
148    // Lint
149    i_64 = i_64.saturating_sub(1);
150
151    // No Lint
152    if i_64 > 0 {
153        i_64 -= 1;
154    }
155
156    // No Lint
157    if i_64 != 0 {
158        i_64 -= 1;
159    }
160
161    // issue #7831
162    // No Lint
163    if u_32 > 0 {
164        u_32 -= 1;
165    } else {
166        println!("side effect");
167    }
168}
169