--- /dev/null
+// 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);
+}
--- /dev/null
+// 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);
+}
\ No newline at end of file
--- /dev/null
+// 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);
+}
\ No newline at end of file
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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);
+}
\ No newline at end of file