mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
test: add testcases for external iterators using foreach.
This commit is contained in:
parent
62b6fa0943
commit
a696f0fecb
21
src/test/run-pass/foreach-external-iterators-break.rs
Normal file
21
src/test/run-pass/foreach-external-iterators-break.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2012 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 x = [1,..100];
|
||||
let mut y = 0;
|
||||
foreach i in x.iter() {
|
||||
if y > 10 {
|
||||
break;
|
||||
}
|
||||
y += *i;
|
||||
}
|
||||
assert!(y == 11);
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
// Copyright 2012 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.
|
||||
|
||||
use std::hashmap::HashMap;
|
||||
|
||||
// This is a fancy one: it uses an external iterator established
|
||||
// outside the loop, breaks, then _picks back up_ and continues
|
||||
// iterating with it.
|
||||
|
||||
fn main() {
|
||||
let mut h = HashMap::new();
|
||||
let kvs = [(1, 10), (2, 20), (3, 30)];
|
||||
foreach &(k,v) in kvs.iter() {
|
||||
h.insert(k,v);
|
||||
}
|
||||
let mut x = 0;
|
||||
let mut y = 0;
|
||||
|
||||
let mut i = h.iter();
|
||||
|
||||
foreach (&k,&v) in i {
|
||||
x += k;
|
||||
y += v;
|
||||
break;
|
||||
}
|
||||
|
||||
foreach (&k,&v) in i {
|
||||
x += k;
|
||||
y += v;
|
||||
}
|
||||
|
||||
assert_eq!(x, 6);
|
||||
assert_eq!(y, 60);
|
||||
}
|
27
src/test/run-pass/foreach-external-iterators-hashmap.rs
Normal file
27
src/test/run-pass/foreach-external-iterators-hashmap.rs
Normal file
@ -0,0 +1,27 @@
|
||||
// Copyright 2012 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.
|
||||
|
||||
use std::hashmap::HashMap;
|
||||
|
||||
fn main() {
|
||||
let mut h = HashMap::new();
|
||||
let kvs = [(1, 10), (2, 20), (3, 30)];
|
||||
foreach &(k,v) in kvs.iter() {
|
||||
h.insert(k,v);
|
||||
}
|
||||
let mut x = 0;
|
||||
let mut y = 0;
|
||||
foreach (&k,&v) in h.iter() {
|
||||
x += k;
|
||||
y += v;
|
||||
}
|
||||
assert_eq!(x, 6);
|
||||
assert_eq!(y, 60);
|
||||
}
|
21
src/test/run-pass/foreach-external-iterators-loop.rs
Normal file
21
src/test/run-pass/foreach-external-iterators-loop.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2012 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 x = [1,..100];
|
||||
let mut y = 0;
|
||||
foreach (n,i) in x.iter().enumerate() {
|
||||
if n < 10 {
|
||||
loop;
|
||||
}
|
||||
y += *i;
|
||||
}
|
||||
assert_eq!(y, 90);
|
||||
}
|
23
src/test/run-pass/foreach-external-iterators-nested.rs
Normal file
23
src/test/run-pass/foreach-external-iterators-nested.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright 2012 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 x = [1,..100];
|
||||
let y = [2,..100];
|
||||
let mut p = 0;
|
||||
let mut q = 0;
|
||||
foreach i in x.iter() {
|
||||
foreach j in y.iter() {
|
||||
p += *j;
|
||||
}
|
||||
q += *i + p;
|
||||
}
|
||||
assert!(q == 1010100);
|
||||
}
|
18
src/test/run-pass/foreach-external-iterators.rs
Normal file
18
src/test/run-pass/foreach-external-iterators.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright 2012 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 x = [1,..100];
|
||||
let mut y = 0;
|
||||
foreach i in x.iter() {
|
||||
y += *i
|
||||
}
|
||||
assert!(y == 100);
|
||||
}
|
Loading…
Reference in New Issue
Block a user