mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-04 02:54:00 +00:00
Add tests for while let
This commit is contained in:
parent
45fd623762
commit
b5db97b354
@ -9,7 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
#![deny(unnecessary_parens)]
|
||||
#![feature(if_let)]
|
||||
#![feature(if_let,while_let)]
|
||||
|
||||
#[deriving(Eq, PartialEq)]
|
||||
struct X { y: bool }
|
||||
@ -34,6 +34,7 @@ fn main() {
|
||||
_ => {}
|
||||
}
|
||||
if let 1i = (1i) {} //~ ERROR unnecessary parentheses around `if let` head expression
|
||||
while let 1i = (2i) {} //~ ERROR unnecessary parentheses around `while let` head expression
|
||||
let v = X { y: false };
|
||||
// struct lits needs parens, so these shouldn't warn.
|
||||
if (v == X { y: true }) {}
|
||||
|
37
src/test/compile-fail/while-let.rs
Normal file
37
src/test/compile-fail/while-let.rs
Normal file
@ -0,0 +1,37 @@
|
||||
// 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(macro_rules,while_let)]
|
||||
|
||||
fn macros() {
|
||||
macro_rules! foo{
|
||||
($p:pat, $e:expr, $b:block) => {{
|
||||
while let $p = $e $b
|
||||
}}
|
||||
}
|
||||
macro_rules! bar{
|
||||
($p:pat, $e:expr, $b:block) => {{
|
||||
foo!($p, $e, $b)
|
||||
}}
|
||||
}
|
||||
|
||||
foo!(a, 1i, { //~ ERROR irrefutable while-let
|
||||
println!("irrefutable pattern");
|
||||
});
|
||||
bar!(a, 1i, { //~ ERROR irrefutable while-let
|
||||
println!("irrefutable pattern");
|
||||
});
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
while let a = 1i { //~ ERROR irrefutable while-let
|
||||
println!("irrefutable pattern");
|
||||
}
|
||||
}
|
56
src/test/run-pass/while-let.rs
Normal file
56
src/test/run-pass/while-let.rs
Normal file
@ -0,0 +1,56 @@
|
||||
// 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(while_let)]
|
||||
|
||||
use std::collections::PriorityQueue;
|
||||
|
||||
fn make_pq() -> PriorityQueue<int> {
|
||||
PriorityQueue::from_vec(vec![1i,2,3])
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
let mut pq = make_pq();
|
||||
let mut sum = 0i;
|
||||
while let Some(x) = pq.pop() {
|
||||
sum += x;
|
||||
}
|
||||
assert_eq!(sum, 6i);
|
||||
|
||||
pq = make_pq();
|
||||
sum = 0;
|
||||
'a: while let Some(x) = pq.pop() {
|
||||
sum += x;
|
||||
if x == 2 {
|
||||
break 'a;
|
||||
}
|
||||
}
|
||||
assert_eq!(sum, 5i);
|
||||
|
||||
pq = make_pq();
|
||||
sum = 0;
|
||||
'a: while let Some(x) = pq.pop() {
|
||||
if x == 3 {
|
||||
continue 'a;
|
||||
}
|
||||
sum += x;
|
||||
}
|
||||
assert_eq!(sum, 3i);
|
||||
|
||||
let mut pq1 = make_pq();
|
||||
sum = 0;
|
||||
while let Some(x) = pq1.pop() {
|
||||
let mut pq2 = make_pq();
|
||||
while let Some(y) = pq2.pop() {
|
||||
sum += x * y;
|
||||
}
|
||||
}
|
||||
assert_eq!(sum, 6i + 12 + 18);
|
||||
}
|
Loading…
Reference in New Issue
Block a user