about summary refs log tree commit diff
path: root/tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs')
-rw-r--r--tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs b/tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs
new file mode 100644
index 00000000000..d54cbfbf4bb
--- /dev/null
+++ b/tests/ui/half-open-range-patterns/slice_pattern_syntax_problem0.rs
@@ -0,0 +1,16 @@
+#![feature(half_open_range_patterns_in_slices)]
+#![feature(exclusive_range_pattern)]
+
+fn main() {
+    let xs = [13, 1, 5, 2, 3, 1, 21, 8];
+    let [a, b, c, rest @ ..] = xs;
+    // Consider the following example:
+    assert!(a == 13 && b == 1 && c == 5 && rest.len() == 5);
+
+    // What if we wanted to pull this apart without individually binding a, b, and c?
+    let [first_three @ ..3, rest @ 2..] = xs;
+    //~^ pattern requires 2 elements but array has 8
+    // This is somewhat unintuitive and makes slice patterns exceedingly verbose.
+    // We want to stabilize half-open RangeFrom (`X..`) patterns
+    // but without banning us from using them for a more efficient slice pattern syntax.
+}