| #![deny(non_contiguous_range_endpoints)] |
| |
| macro_rules! m { |
| ($s:expr, $t1:pat, $t2:pat) => { |
| match $s { |
| $t1 => {} |
| $t2 => {} |
| _ => {} |
| } |
| }; |
| } |
| |
| fn main() { |
| match 0u8 { |
| 20..30 => {} //~ ERROR multiple ranges are one apart |
| 31..=40 => {} |
| _ => {} |
| } |
| match 0u8 { |
| 20..30 => {} //~ ERROR multiple ranges are one apart |
| 31 => {} |
| _ => {} |
| } |
| |
| m!(0u8, 20..30, 31..=40); //~ ERROR multiple ranges are one apart |
| m!(0u8, 31..=40, 20..30); //~ ERROR multiple ranges are one apart |
| m!(0u8, 20..30, 29..=40); //~ WARN multiple patterns overlap on their endpoints |
| m!(0u8, 20..30, 30..=40); |
| m!(0u8, 20..30, 31..=40); //~ ERROR multiple ranges are one apart |
| m!(0u8, 20..30, 32..=40); |
| m!(0u8, 20..30, 31..=32); //~ ERROR multiple ranges are one apart |
| // Don't lint two singletons. |
| m!(0u8, 30, 32); |
| // Don't lint on the equivalent inclusive range |
| m!(0u8, 20..=29, 31..=40); |
| // Don't lint if the lower one is a singleton. |
| m!(0u8, 30, 32..=40); |
| |
| // Catch the `lo..MAX` case. |
| match 0u8 { |
| 0..255 => {} //~ ERROR exclusive range missing `u8::MAX` |
| _ => {} |
| } |
| // Except for `usize`, since `0..=usize::MAX` isn't exhaustive either. |
| match 0usize { |
| 0..usize::MAX => {} |
| _ => {} |
| } |
| |
| // Don't lint if the gap is caught by another range. |
| match 0u8 { |
| 0..10 => {} |
| 11..20 => {} |
| 10 => {} |
| _ => {} |
| } |
| match 0u8 { |
| 0..10 => {} |
| 11..20 => {} |
| 5..15 => {} |
| _ => {} |
| } |
| match 0u8 { |
| 0..255 => {} |
| 255 => {} |
| } |
| |
| // Test multiple at once |
| match 0u8 { |
| 0..10 => {} //~ ERROR multiple ranges are one apart |
| 11..20 => {} |
| 11..30 => {} |
| _ => {} |
| } |
| match 0u8 { |
| 0..10 => {} //~ ERROR multiple ranges are one apart |
| 11..20 => {} //~ ERROR multiple ranges are one apart |
| 21..30 => {} |
| _ => {} |
| } |
| match 0u8 { |
| 00..20 => {} //~ ERROR multiple ranges are one apart |
| 10..20 => {} //~ ERROR multiple ranges are one apart |
| 21..30 => {} |
| 21..40 => {} |
| _ => {} |
| } |
| |
| // Test nested |
| match (0u8, true) { |
| (0..10, true) => {} //~ ERROR multiple ranges are one apart |
| (11..20, true) => {} |
| _ => {} |
| } |
| match (true, 0u8) { |
| (true, 0..10) => {} //~ ERROR multiple ranges are one apart |
| (true, 11..20) => {} |
| _ => {} |
| } |
| // Asymmetry due to how exhaustiveness is computed. |
| match (0u8, true) { |
| (0..10, true) => {} //~ ERROR multiple ranges are one apart |
| (11..20, false) => {} |
| _ => {} |
| } |
| match (true, 0u8) { |
| (true, 0..10) => {} |
| (false, 11..20) => {} |
| _ => {} |
| } |
| match Some(0u8) { |
| Some(0..10) => {} //~ ERROR multiple ranges are one apart |
| Some(11..20) => {} |
| _ => {} |
| } |
| } |