Address review comments
This commit is contained in:
parent
76f7eeef52
commit
abce42afa3
10 changed files with 153 additions and 66 deletions
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
fn foo(a: Option<uint>, b: Option<uint>) {
|
||||
match (a,b) {
|
||||
//~^ ERROR: non-exhaustive patterns: (core::option::None, core::option::None) not covered
|
||||
//~^ ERROR: non-exhaustive patterns: `(None, None)` not covered
|
||||
(Some(a), Some(b)) if a == b => { }
|
||||
(Some(_), None) |
|
||||
(None, Some(_)) => { }
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
fn main() {
|
||||
let tup = (true, true);
|
||||
println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: (true, false) not covered
|
||||
println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: `(true, false)` not covered
|
||||
(false, false) => "foo",
|
||||
(false, true) => "bar",
|
||||
(true, true) => "baz"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ enum u { c, d }
|
|||
|
||||
fn main() {
|
||||
let x = a(c);
|
||||
match x { //~ ERROR non-exhaustive patterns: a(c) not covered
|
||||
match x { //~ ERROR non-exhaustive patterns: `a(c)` not covered
|
||||
a(d) => { fail!("hello"); }
|
||||
b => { fail!("goodbye"); }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,21 +12,21 @@ enum t { a, b, }
|
|||
|
||||
fn main() {
|
||||
let x = a;
|
||||
match x { b => { } } //~ ERROR non-exhaustive patterns: a not covered
|
||||
match true { //~ ERROR non-exhaustive patterns: false not covered
|
||||
match x { b => { } } //~ ERROR non-exhaustive patterns: `a` not covered
|
||||
match true { //~ ERROR non-exhaustive patterns: `false` not covered
|
||||
true => {}
|
||||
}
|
||||
match Some(10) { //~ ERROR non-exhaustive patterns: core::option::Some(_) not covered
|
||||
match Some(10) { //~ ERROR non-exhaustive patterns: `Some(_)` not covered
|
||||
None => {}
|
||||
}
|
||||
match (2, 3, 4) { //~ ERROR non-exhaustive patterns: (_, _, _) not covered
|
||||
match (2, 3, 4) { //~ ERROR non-exhaustive patterns: `(_, _, _)` not covered
|
||||
(_, _, 4) => {}
|
||||
}
|
||||
match (a, a) { //~ ERROR non-exhaustive patterns: (a, a) not covered
|
||||
match (a, a) { //~ ERROR non-exhaustive patterns: `(a, a)` not covered
|
||||
(a, b) => {}
|
||||
(b, a) => {}
|
||||
}
|
||||
match a { //~ ERROR non-exhaustive patterns: b not covered
|
||||
match a { //~ ERROR non-exhaustive patterns: `b` not covered
|
||||
a => {}
|
||||
}
|
||||
// This is exhaustive, though the algorithm got it wrong at one point
|
||||
|
|
@ -37,7 +37,7 @@ fn main() {
|
|||
}
|
||||
let vec = vec!(Some(42), None, Some(21));
|
||||
let vec: &[Option<int>] = vec.as_slice();
|
||||
match vec { //~ ERROR non-exhaustive patterns: [] not covered
|
||||
match vec { //~ ERROR non-exhaustive patterns: `[]` not covered
|
||||
[Some(..), None, ..tail] => {}
|
||||
[Some(..), Some(..), ..tail] => {}
|
||||
[None] => {}
|
||||
|
|
@ -50,7 +50,7 @@ fn main() {
|
|||
}
|
||||
let vec = vec!(0.5);
|
||||
let vec: &[f32] = vec.as_slice();
|
||||
match vec { //~ ERROR non-exhaustive patterns: [_, _, _, _] not covered
|
||||
match vec { //~ ERROR non-exhaustive patterns: `[_, _, _, _]` not covered
|
||||
[0.1, 0.2, 0.3] => (),
|
||||
[0.1, 0.2] => (),
|
||||
[0.1] => (),
|
||||
|
|
|
|||
74
src/test/compile-fail/non-exhaustive-pattern-witness.rs
Normal file
74
src/test/compile-fail/non-exhaustive-pattern-witness.rs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(struct_variant)]
|
||||
|
||||
struct Foo {
|
||||
first: bool,
|
||||
second: Option<[uint, ..4]>
|
||||
}
|
||||
|
||||
enum Color {
|
||||
Red,
|
||||
Green,
|
||||
CustomRGBA { a: bool, r: u8, g: u8, b: u8 }
|
||||
}
|
||||
|
||||
fn struct_with_a_nested_enum_and_vector() {
|
||||
match Foo { first: true, second: None } {
|
||||
//~^ ERROR non-exhaustive patterns: `Foo{first: false, second: Some([_, _, _, _])}` not covered
|
||||
Foo { first: true, second: None } => (),
|
||||
Foo { first: true, second: Some(_) } => (),
|
||||
Foo { first: false, second: None } => (),
|
||||
Foo { first: false, second: Some([1u, 2u, 3u, 4u]) } => ()
|
||||
}
|
||||
}
|
||||
|
||||
fn enum_with_multiple_missing_variants() {
|
||||
match Red {
|
||||
//~^ ERROR non-exhaustive patterns: `Red` not covered
|
||||
CustomRGBA { .. } => ()
|
||||
}
|
||||
}
|
||||
|
||||
fn enum_struct_variant() {
|
||||
match Red {
|
||||
//~^ ERROR non-exhaustive patterns: `CustomRGBA{a: true, r: _, g: _, b: _}` not covered
|
||||
Red => (),
|
||||
Green => (),
|
||||
CustomRGBA { a: false, r: _, g: _, b: 0 } => (),
|
||||
CustomRGBA { a: false, r: _, g: _, b: _ } => ()
|
||||
}
|
||||
}
|
||||
|
||||
enum Enum {
|
||||
First,
|
||||
Second(bool)
|
||||
}
|
||||
|
||||
fn vectors_with_nested_enums() {
|
||||
let x: &'static [Enum] = [First, Second(false)];
|
||||
match x {
|
||||
//~^ ERROR non-exhaustive patterns: `[Second(true), Second(false)]` not covered
|
||||
[] => (),
|
||||
[_] => (),
|
||||
[First, _] => (),
|
||||
[Second(true), First] => (),
|
||||
[Second(true), Second(true)] => (),
|
||||
[Second(false), _] => (),
|
||||
[_, _, ..tail, _] => ()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
struct_with_a_nested_enum_and_vector();
|
||||
enum_with_multiple_missing_variants();
|
||||
enum_struct_variant();
|
||||
}
|
||||
|
|
@ -10,9 +10,9 @@
|
|||
|
||||
|
||||
fn func((1, (Some(1), 2..3)): (int, (Option<int>, int))) { }
|
||||
//~^ ERROR refutable pattern in function argument: (_, _) not covered
|
||||
//~^ ERROR refutable pattern in function argument: `(_, _)` not covered
|
||||
|
||||
fn main() {
|
||||
let (1, (Some(1), 2..3)) = (1, (None, 2));
|
||||
//~^ ERROR refutable pattern in local binding: (_, _) not covered
|
||||
//~^ ERROR refutable pattern in local binding: `(_, _)` not covered
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@
|
|||
|
||||
fn main() {
|
||||
let f = |3: int| println!("hello");
|
||||
//~^ ERROR refutable pattern in function argument: _ not covered
|
||||
//~^ ERROR refutable pattern in function argument: `_` not covered
|
||||
f(4);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,4 +27,10 @@ fn main() {
|
|||
let [a, _, _, d] = bar("baz", "foo");
|
||||
assert_eq!(a, "baz");
|
||||
assert_eq!(d, "baz");
|
||||
|
||||
let out = bar("baz", "foo");
|
||||
let [a, ..xs, d] = out;
|
||||
assert_eq!(a, "baz");
|
||||
assert!(xs == ["foo", "foo"]);
|
||||
assert_eq!(d, "baz");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue