about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2013-07-30 18:46:40 -0700
committerGraydon Hoare <graydon@mozilla.com>2013-07-30 18:50:28 -0700
commita696f0fecb9d11204f64d310eb66e095f64bd04a (patch)
treeee1cdc5abe3129f9bcf75071a9ec496e38f0da0a
parent62b6fa094378340574bf40543cdcd477f4dd1169 (diff)
downloadrust-a696f0fecb9d11204f64d310eb66e095f64bd04a.tar.gz
rust-a696f0fecb9d11204f64d310eb66e095f64bd04a.zip
test: add testcases for external iterators using foreach.
-rw-r--r--src/test/run-pass/foreach-external-iterators-break.rs21
-rw-r--r--src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs41
-rw-r--r--src/test/run-pass/foreach-external-iterators-hashmap.rs27
-rw-r--r--src/test/run-pass/foreach-external-iterators-loop.rs21
-rw-r--r--src/test/run-pass/foreach-external-iterators-nested.rs23
-rw-r--r--src/test/run-pass/foreach-external-iterators.rs18
6 files changed, 151 insertions, 0 deletions
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 00000000000..74ff344b735
--- /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 <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);
+}
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 00000000000..4b6421cb0d3
--- /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 <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
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 00000000000..bc6508c4a5f
--- /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 <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
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 00000000000..8db6b50f8cd
--- /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 <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);
+}
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 00000000000..ffc01ebff19
--- /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 <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);
+}
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 00000000000..55884cee4ec
--- /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 <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