1 #![feature(custom_inner_attributes)]
2 #![warn(clippy::manual_clamp)]
6 clippy::unnecessary_operation,
8 clippy::if_same_then_else
11 use std::cmp::{max as cmp_max, min as cmp_min};
13 const CONST_MAX: i32 = 10;
14 const CONST_MIN: i32 = 4;
16 const CONST_F64_MAX: f64 = 10.0;
17 const CONST_F64_MIN: f64 = 4.0;
20 let (input, min, max) = (0, -2, 3);
22 let x0 = if max < input {
24 } else if min > input {
30 let x1 = if input > max {
32 } else if input < min {
38 let x2 = if input < min {
40 } else if input > max {
46 let x3 = if min > input {
48 } else if max < input {
54 let x4 = input.max(min).min(max);
56 let x5 = input.min(max).max(min);
58 let x6 = match input {
64 let x7 = match input {
70 let x8 = match input {
84 let x10 = match input {
115 let x14 = if input > CONST_MAX {
117 } else if input < CONST_MIN {
123 let (input, min, max) = (0.0f64, -2.0, 3.0);
124 let x15 = if input > max {
126 } else if input < min {
133 let input: i32 = cmp_min_max(1);
134 // These can only be detected if exactly one of the arguments to the inner function is const.
135 let x16 = cmp_max(cmp_min(input, CONST_MAX), CONST_MIN);
136 let x17 = cmp_min(cmp_max(input, CONST_MIN), CONST_MAX);
137 let x18 = cmp_max(CONST_MIN, cmp_min(input, CONST_MAX));
138 let x19 = cmp_min(CONST_MAX, cmp_max(input, CONST_MIN));
139 let x20 = cmp_max(cmp_min(CONST_MAX, input), CONST_MIN);
140 let x21 = cmp_min(cmp_max(CONST_MIN, input), CONST_MAX);
141 let x22 = cmp_max(CONST_MIN, cmp_min(CONST_MAX, input));
142 let x23 = cmp_min(CONST_MAX, cmp_max(CONST_MIN, input));
143 let input: f64 = cmp_min_max(1) as f64;
144 let x24 = f64::max(f64::min(input, CONST_F64_MAX), CONST_F64_MIN);
145 let x25 = f64::min(f64::max(input, CONST_F64_MIN), CONST_F64_MAX);
146 let x26 = f64::max(CONST_F64_MIN, f64::min(input, CONST_F64_MAX));
147 let x27 = f64::min(CONST_F64_MAX, f64::max(input, CONST_F64_MIN));
148 let x28 = f64::max(f64::min(CONST_F64_MAX, input), CONST_F64_MIN);
149 let x29 = f64::min(f64::max(CONST_F64_MIN, input), CONST_F64_MAX);
150 let x30 = f64::max(CONST_F64_MIN, f64::min(CONST_F64_MAX, input));
151 let x31 = f64::min(CONST_F64_MAX, f64::max(CONST_F64_MIN, input));
156 } else if x32 > max {
160 // It's important this be the last set of statements
170 // This code intentionally nonsense.
172 let (input, min, max) = (0, -2, 3);
173 let x0 = if max < input {
175 } else if min > input {
181 let x1 = if input > max {
183 } else if input > min {
189 let x2 = if max < min {
191 } else if input > max {
197 let x3 = if min > input {
199 } else if max < input {
205 let x6 = match input {
211 let x7 = match input {
217 let x8 = match input {
231 let x10 = match input {
263 } else if x14 > max {
267 let input: i32 = cmp_min_max(1);
268 // These can only be detected if exactly one of the arguments to the inner function is const.
269 let x16 = cmp_max(cmp_max(input, CONST_MAX), CONST_MIN);
270 let x17 = cmp_min(cmp_min(input, CONST_MIN), CONST_MAX);
271 let x18 = cmp_max(CONST_MIN, cmp_max(input, CONST_MAX));
272 let x19 = cmp_min(CONST_MAX, cmp_min(input, CONST_MIN));
273 let x20 = cmp_max(cmp_max(CONST_MAX, input), CONST_MIN);
274 let x21 = cmp_min(cmp_min(CONST_MIN, input), CONST_MAX);
275 let x22 = cmp_max(CONST_MIN, cmp_max(CONST_MAX, input));
276 let x23 = cmp_min(CONST_MAX, cmp_min(CONST_MIN, input));
277 let input: f64 = cmp_min_max(1) as f64;
278 let x24 = f64::max(f64::max(input, CONST_F64_MAX), CONST_F64_MIN);
279 let x25 = f64::min(f64::min(input, CONST_F64_MIN), CONST_F64_MAX);
280 let x26 = f64::max(CONST_F64_MIN, f64::max(input, CONST_F64_MAX));
281 let x27 = f64::min(CONST_F64_MAX, f64::min(input, CONST_F64_MIN));
282 let x28 = f64::max(f64::max(CONST_F64_MAX, input), CONST_F64_MIN);
283 let x29 = f64::min(f64::min(CONST_F64_MIN, input), CONST_F64_MAX);
284 let x30 = f64::max(CONST_F64_MIN, f64::max(CONST_F64_MAX, input));
285 let x31 = f64::min(CONST_F64_MAX, f64::min(CONST_F64_MIN, input));
286 let x32 = f64::min(CONST_F64_MAX, f64::min(CONST_F64_MIN, CONST_F64_MAX));
290 fn dont_tell_me_what_to_do() {
291 let (input, min, max) = (0, -2, 3);
292 let mut x_never = input;
293 #[allow(clippy::manual_clamp)]
302 /// Just to ensure this isn't const evaled
303 fn cmp_min_max(input: i32) -> i32 {
308 #![clippy::msrv = "1.49"]
310 let (input, min, max) = (0, -1, 2);
311 let _ = if input < min {
313 } else if input > max {
321 #![clippy::msrv = "1.50"]
323 let (input, min, max) = (0, -1, 2);
324 let _ = if input < min {
326 } else if input > max {