diff --git a/src/test/run-pass/foreach-external-iterators-break.rs b/src/test/run-pass/foreach-external-iterators-break.rs new file mode 100644 index 0000000000000..74ff344b73510 --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators-break.rs @@ -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 or the MIT license +// , 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); +} diff --git a/src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs b/src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs new file mode 100644 index 0000000000000..4b6421cb0d3ce --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs @@ -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 or the MIT license +// , 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); +} \ No newline at end of file diff --git a/src/test/run-pass/foreach-external-iterators-hashmap.rs b/src/test/run-pass/foreach-external-iterators-hashmap.rs new file mode 100644 index 0000000000000..bc6508c4a5ff3 --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators-hashmap.rs @@ -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 or the MIT license +// , 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); +} \ No newline at end of file diff --git a/src/test/run-pass/foreach-external-iterators-loop.rs b/src/test/run-pass/foreach-external-iterators-loop.rs new file mode 100644 index 0000000000000..8db6b50f8cd9e --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators-loop.rs @@ -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 or the MIT license +// , 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); +} diff --git a/src/test/run-pass/foreach-external-iterators-nested.rs b/src/test/run-pass/foreach-external-iterators-nested.rs new file mode 100644 index 0000000000000..ffc01ebff19ea --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators-nested.rs @@ -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 or the MIT license +// , 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); +} diff --git a/src/test/run-pass/foreach-external-iterators.rs b/src/test/run-pass/foreach-external-iterators.rs new file mode 100644 index 0000000000000..55884cee4ecb6 --- /dev/null +++ b/src/test/run-pass/foreach-external-iterators.rs @@ -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 or the MIT license +// , 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); +} \ No newline at end of file