From a3bb9fb8c50b69acf2c8326519a6642e195066a5 Mon Sep 17 00:00:00 2001 From: Jubilee Young Date: Sun, 4 Apr 2021 19:40:40 -0700 Subject: [PATCH] Add & bless tests --- .../feature-gate-half-open-range-patterns.rs | 8 +-- ...ature-gate-half-open-range-patterns.stderr | 33 +---------- .../range_pat_interactions0.rs | 32 +++++++++++ .../range_pat_interactions1.rs | 29 ++++++++++ .../range_pat_interactions1.stderr | 36 ++++++++++++ .../range_pat_interactions2.rs | 21 +++++++ .../range_pat_interactions2.stderr | 17 ++++++ .../range_pat_interactions3.rs | 24 ++++++++ .../range_pat_interactions3.stderr | 57 +++++++++++++++++++ 9 files changed, 221 insertions(+), 36 deletions(-) create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions0.rs create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions1.rs create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions1.stderr create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions2.rs create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions2.stderr create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions3.rs create mode 100644 src/test/ui/half-open-range-patterns/range_pat_interactions3.stderr diff --git a/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.rs b/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.rs index 1733012b9c5..9281dda678d 100644 --- a/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.rs +++ b/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.rs @@ -11,12 +11,8 @@ fn foo() { //~| ERROR range-to patterns with `...` are not allowed if let ..5 = 0 {} //~^ ERROR half-open range patterns are unstable - if let 5.. = 0 {} - //~^ ERROR half-open range patterns are unstable if let 5..= = 0 {} - //~^ ERROR half-open range patterns are unstable - //~| ERROR inclusive range with no end + //~^ ERROR inclusive range with no end if let 5... = 0 {} - //~^ ERROR half-open range patterns are unstable - //~| ERROR inclusive range with no end + //~^ ERROR inclusive range with no end } diff --git a/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.stderr b/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.stderr index 62d54463a43..a04883ae147 100644 --- a/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.stderr +++ b/src/test/ui/half-open-range-patterns/feature-gate-half-open-range-patterns.stderr @@ -5,7 +5,7 @@ LL | if let ...5 = 0 {} | ^^^ help: use `..=` instead error[E0586]: inclusive range with no end - --> $DIR/feature-gate-half-open-range-patterns.rs:16:13 + --> $DIR/feature-gate-half-open-range-patterns.rs:14:13 | LL | if let 5..= = 0 {} | ^^^ help: use `..` instead @@ -13,7 +13,7 @@ LL | if let 5..= = 0 {} = note: inclusive ranges must be bounded at the end (`..=b` or `a..=b`) error[E0586]: inclusive range with no end - --> $DIR/feature-gate-half-open-range-patterns.rs:19:13 + --> $DIR/feature-gate-half-open-range-patterns.rs:16:13 | LL | if let 5... = 0 {} | ^^^ help: use `..` instead @@ -47,34 +47,7 @@ LL | if let ..5 = 0 {} = note: see issue #67264 for more information = help: add `#![feature(half_open_range_patterns)]` to the crate attributes to enable -error[E0658]: half-open range patterns are unstable - --> $DIR/feature-gate-half-open-range-patterns.rs:14:12 - | -LL | if let 5.. = 0 {} - | ^^^ - | - = note: see issue #67264 for more information - = help: add `#![feature(half_open_range_patterns)]` to the crate attributes to enable - -error[E0658]: half-open range patterns are unstable - --> $DIR/feature-gate-half-open-range-patterns.rs:16:12 - | -LL | if let 5..= = 0 {} - | ^^^^ - | - = note: see issue #67264 for more information - = help: add `#![feature(half_open_range_patterns)]` to the crate attributes to enable - -error[E0658]: half-open range patterns are unstable - --> $DIR/feature-gate-half-open-range-patterns.rs:19:12 - | -LL | if let 5... = 0 {} - | ^^^^ - | - = note: see issue #67264 for more information - = help: add `#![feature(half_open_range_patterns)]` to the crate attributes to enable - -error: aborting due to 9 previous errors +error: aborting due to 6 previous errors Some errors have detailed explanations: E0586, E0658. For more information about an error, try `rustc --explain E0586`. diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions0.rs b/src/test/ui/half-open-range-patterns/range_pat_interactions0.rs new file mode 100644 index 00000000000..4f478a69881 --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions0.rs @@ -0,0 +1,32 @@ +// run-pass +#![allow(incomplete_features)] +#![feature(exclusive_range_pattern)] +#![feature(half_open_range_patterns)] +#![feature(inline_const)] + +fn main() { + let mut if_lettable = vec![]; + let mut first_or = vec![]; + let mut or_two = vec![]; + let mut range_from = vec![]; + let mut bottom = vec![]; + + for x in -9 + 1..=(9 - 2) { + if let -1..=0 | 2..3 | 4 = x { + if_lettable.push(x) + } + match x { + 1 | -3..0 => first_or.push(x), + y @ (0..5 | 6) => or_two.push(y), + y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + y @ -5.. => range_from.push(y), + y @ ..-7 => assert_eq!(y, -8), + y => bottom.push(y), + } + } + assert_eq!(if_lettable, [-1, 0, 2, 4]); + assert_eq!(first_or, [-3, -2, -1, 1]); + assert_eq!(or_two, [0, 2, 3, 4, 6]); + assert_eq!(range_from, [-5, -4, 7]); + assert_eq!(bottom, [-7, -6]); +} diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions1.rs b/src/test/ui/half-open-range-patterns/range_pat_interactions1.rs new file mode 100644 index 00000000000..55353999b67 --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions1.rs @@ -0,0 +1,29 @@ +fn main() { + let mut if_lettable = Vec::::new(); + let mut first_or = Vec::::new(); + let mut or_two = Vec::::new(); + let mut range_from = Vec::::new(); + let mut bottom = Vec::::new(); + let mut errors_only = Vec::::new(); + + for x in -9 + 1..=(9 - 2) { + if let n @ 2..3|4 = x { + //~^ error: variable `n` is not bound in all patterns + //~| exclusive range pattern syntax is experimental + errors_only.push(x); + } else if let 2..3 | 4 = x { + //~^ exclusive range pattern syntax is experimental + if_lettable.push(x); + } + match x as i32 { + 0..5+1 => errors_only.push(x), + //~^ error: expected one of `=>`, `if`, or `|`, found `+` + 1 | -3..0 => first_or.push(x), + y @ (0..5 | 6) => or_two.push(y), + y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + y @ -5.. => range_from.push(y), + y @ ..-7 => assert_eq!(y, -8), + y => bottom.push(y), + } + } +} diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions1.stderr b/src/test/ui/half-open-range-patterns/range_pat_interactions1.stderr new file mode 100644 index 00000000000..19ebcaf0f36 --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions1.stderr @@ -0,0 +1,36 @@ +error: expected one of `=>`, `if`, or `|`, found `+` + --> $DIR/range_pat_interactions1.rs:19:17 + | +LL | 0..5+1 => errors_only.push(x), + | ^ expected one of `=>`, `if`, or `|` + +error[E0408]: variable `n` is not bound in all patterns + --> $DIR/range_pat_interactions1.rs:10:25 + | +LL | if let n @ 2..3|4 = x { + | - ^ pattern doesn't bind `n` + | | + | variable not in all patterns + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions1.rs:10:20 + | +LL | if let n @ 2..3|4 = x { + | ^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions1.rs:14:23 + | +LL | } else if let 2..3 | 4 = x { + | ^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error: aborting due to 4 previous errors + +Some errors have detailed explanations: E0408, E0658. +For more information about an error, try `rustc --explain E0408`. diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions2.rs b/src/test/ui/half-open-range-patterns/range_pat_interactions2.rs new file mode 100644 index 00000000000..4615ebd688a --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions2.rs @@ -0,0 +1,21 @@ +fn main() { + let mut first_or = Vec::::new(); + let mut or_two = Vec::::new(); + let mut range_from = Vec::::new(); + let mut bottom = Vec::::new(); + let mut errors_only = Vec::::new(); + + for x in -9 + 1..=(9 - 2) { + match x as i32 { + 0..=(5+1) => errors_only.push(x), + //~^ error: inclusive range with no end + //~| error: expected one of `=>`, `if`, or `|`, found `(` + 1 | -3..0 => first_or.push(x), + y @ (0..5 | 6) => or_two.push(y), + y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + y @ -5.. => range_from.push(y), + y @ ..-7 => assert_eq!(y, -8), + y => bottom.push(y), + } + } +} diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions2.stderr b/src/test/ui/half-open-range-patterns/range_pat_interactions2.stderr new file mode 100644 index 00000000000..13a5542a474 --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions2.stderr @@ -0,0 +1,17 @@ +error[E0586]: inclusive range with no end + --> $DIR/range_pat_interactions2.rs:10:14 + | +LL | 0..=(5+1) => errors_only.push(x), + | ^^^ help: use `..` instead + | + = note: inclusive ranges must be bounded at the end (`..=b` or `a..=b`) + +error: expected one of `=>`, `if`, or `|`, found `(` + --> $DIR/range_pat_interactions2.rs:10:17 + | +LL | 0..=(5+1) => errors_only.push(x), + | ^ expected one of `=>`, `if`, or `|` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0586`. diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions3.rs b/src/test/ui/half-open-range-patterns/range_pat_interactions3.rs new file mode 100644 index 00000000000..0afb5126059 --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions3.rs @@ -0,0 +1,24 @@ +fn main() { + let mut first_or = Vec::::new(); + let mut or_two = Vec::::new(); + let mut range_from = Vec::::new(); + let mut bottom = Vec::::new(); + + for x in -9 + 1..=(9 - 2) { + match x as i32 { + 8.. => bottom.push(x), + 1 | -3..0 => first_or.push(x), + //~^ exclusive range pattern syntax is experimental + y @ (0..5 | 6) => or_two.push(y), + //~^ exclusive range pattern syntax is experimental + y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + //~^ inline-const is experimental + //~| exclusive range pattern syntax is experimental + y @ -5.. => range_from.push(y), + y @ ..-7 => assert_eq!(y, -8), + //~^ half-open range patterns are unstable + //~| exclusive range pattern syntax is experimental + y => bottom.push(y), + } + } +} diff --git a/src/test/ui/half-open-range-patterns/range_pat_interactions3.stderr b/src/test/ui/half-open-range-patterns/range_pat_interactions3.stderr new file mode 100644 index 00000000000..8278e7cc6cf --- /dev/null +++ b/src/test/ui/half-open-range-patterns/range_pat_interactions3.stderr @@ -0,0 +1,57 @@ +error[E0658]: half-open range patterns are unstable + --> $DIR/range_pat_interactions3.rs:18:17 + | +LL | y @ ..-7 => assert_eq!(y, -8), + | ^^^^ + | + = note: see issue #67264 for more information + = help: add `#![feature(half_open_range_patterns)]` to the crate attributes to enable + +error[E0658]: inline-const is experimental + --> $DIR/range_pat_interactions3.rs:14:20 + | +LL | y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + | ^^^^^ + | + = note: see issue #76001 for more information + = help: add `#![feature(inline_const)]` to the crate attributes to enable + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions3.rs:10:17 + | +LL | 1 | -3..0 => first_or.push(x), + | ^^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions3.rs:12:18 + | +LL | y @ (0..5 | 6) => or_two.push(y), + | ^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions3.rs:14:17 + | +LL | y @ 0..const { 5 + 1 } => assert_eq!(y, 5), + | ^^^^^^^^^^^^^^^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error[E0658]: exclusive range pattern syntax is experimental + --> $DIR/range_pat_interactions3.rs:18:17 + | +LL | y @ ..-7 => assert_eq!(y, -8), + | ^^^^ + | + = note: see issue #37854 for more information + = help: add `#![feature(exclusive_range_pattern)]` to the crate attributes to enable + +error: aborting due to 6 previous errors + +For more information about this error, try `rustc --explain E0658`.