diff options
| author | Jakub Wieczorek <jakub@jakub.cc> | 2014-06-07 14:17:01 +0200 |
|---|---|---|
| committer | Jakub Wieczorek <jakub@jakub.cc> | 2014-06-20 17:08:57 +0200 |
| commit | 34407dcdbb489a38b15fac0167a88cb94c3d12ac (patch) | |
| tree | 28b710dc420e2f8e4d56d14fc780c7f493876a7f /src/test | |
| parent | f5e513b2b2dd173f16b84f0531fc3628d62beb4d (diff) | |
| download | rust-34407dcdbb489a38b15fac0167a88cb94c3d12ac.tar.gz rust-34407dcdbb489a38b15fac0167a88cb94c3d12ac.zip | |
Provide a witness pattern for non-exhaustive patterns
Fixed #4321
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/compile-fail/issue-2111.rs | 3 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-4321.rs | 18 | ||||
| -rw-r--r-- | src/test/compile-fail/non-exhaustive-match-nested.rs | 3 | ||||
| -rw-r--r-- | src/test/compile-fail/non-exhaustive-match.rs | 17 | ||||
| -rw-r--r-- | src/test/compile-fail/refutable-pattern-errors.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/refutable-pattern-in-fn-arg.rs | 3 |
6 files changed, 33 insertions, 15 deletions
diff --git a/src/test/compile-fail/issue-2111.rs b/src/test/compile-fail/issue-2111.rs index 40010b203aa..98eb62fe392 100644 --- a/src/test/compile-fail/issue-2111.rs +++ b/src/test/compile-fail/issue-2111.rs @@ -9,7 +9,8 @@ // except according to those terms. fn foo(a: Option<uint>, b: Option<uint>) { - match (a,b) { //~ ERROR: non-exhaustive patterns: None not covered + match (a,b) { + //~^ ERROR: non-exhaustive patterns: (core::option::None, core::option::None) not covered (Some(a), Some(b)) if a == b => { } (Some(_), None) | (None, Some(_)) => { } diff --git a/src/test/compile-fail/issue-4321.rs b/src/test/compile-fail/issue-4321.rs new file mode 100644 index 00000000000..660183366e8 --- /dev/null +++ b/src/test/compile-fail/issue-4321.rs @@ -0,0 +1,18 @@ +// 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. + +fn main() { + let tup = (true, true); + println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: (true, false) not covered + (false, false) => "foo", + (false, true) => "bar", + (true, true) => "baz" + }); +} diff --git a/src/test/compile-fail/non-exhaustive-match-nested.rs b/src/test/compile-fail/non-exhaustive-match-nested.rs index 102772f79d5..bb5b2e750d5 100644 --- a/src/test/compile-fail/non-exhaustive-match-nested.rs +++ b/src/test/compile-fail/non-exhaustive-match-nested.rs @@ -8,13 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: non-exhaustive patterns enum t { a(u), b } enum u { c, d } fn main() { let x = a(c); - match x { + match x { //~ ERROR non-exhaustive patterns: a(c) not covered a(d) => { fail!("hello"); } b => { fail!("goodbye"); } } diff --git a/src/test/compile-fail/non-exhaustive-match.rs b/src/test/compile-fail/non-exhaustive-match.rs index a07fec853fc..97b65a305e0 100644 --- a/src/test/compile-fail/non-exhaustive-match.rs +++ b/src/test/compile-fail/non-exhaustive-match.rs @@ -12,21 +12,21 @@ enum t { a, b, } fn main() { let x = a; - match x { b => { } } //~ ERROR non-exhaustive patterns - match true { //~ ERROR non-exhaustive patterns + 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 + match Some(10) { //~ ERROR non-exhaustive patterns: core::option::Some(_) not covered None => {} } - match (2, 3, 4) { //~ ERROR non-exhaustive patterns + match (2, 3, 4) { //~ ERROR non-exhaustive patterns: (_, _, _) not covered (_, _, 4) => {} } - match (a, a) { //~ ERROR non-exhaustive patterns + match (a, a) { //~ ERROR non-exhaustive patterns: (a, a) not covered (a, b) => {} (b, a) => {} } - match a { //~ ERROR 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,8 +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: vectors of length 0 not covered + match vec { //~ ERROR non-exhaustive patterns: [] not covered [Some(..), None, ..tail] => {} [Some(..), Some(..), ..tail] => {} [None] => {} @@ -51,7 +50,7 @@ fn main() { } let vec = vec!(0.5); let vec: &[f32] = vec.as_slice(); - match vec { //~ ERROR non-exhaustive patterns: vectors of length 4 not covered + match vec { //~ ERROR non-exhaustive patterns: [_, _, _, _] not covered [0.1, 0.2, 0.3] => (), [0.1, 0.2] => (), [0.1] => (), diff --git a/src/test/compile-fail/refutable-pattern-errors.rs b/src/test/compile-fail/refutable-pattern-errors.rs index 38b9b888e06..d664ea10b98 100644 --- a/src/test/compile-fail/refutable-pattern-errors.rs +++ b/src/test/compile-fail/refutable-pattern-errors.rs @@ -10,9 +10,9 @@ fn func((1, (Some(1), 2..3)): (int, (Option<int>, int))) { } -//~^ ERROR refutable pattern in function argument +//~^ 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 + //~^ ERROR refutable pattern in local binding: (_, _) not covered } diff --git a/src/test/compile-fail/refutable-pattern-in-fn-arg.rs b/src/test/compile-fail/refutable-pattern-in-fn-arg.rs index d5489b6a852..064957979f7 100644 --- a/src/test/compile-fail/refutable-pattern-in-fn-arg.rs +++ b/src/test/compile-fail/refutable-pattern-in-fn-arg.rs @@ -9,6 +9,7 @@ // except according to those terms. fn main() { - let f = |3: int| println!("hello"); //~ ERROR refutable pattern + let f = |3: int| println!("hello"); + //~^ ERROR refutable pattern in function argument: _ not covered f(4); } |
