]> git.lizzy.rs Git - rust.git/commitdiff
test: add testcases for external iterators using foreach.
authorGraydon Hoare <graydon@mozilla.com>
Wed, 31 Jul 2013 01:46:40 +0000 (18:46 -0700)
committerGraydon Hoare <graydon@mozilla.com>
Wed, 31 Jul 2013 01:50:28 +0000 (18:50 -0700)
src/test/run-pass/foreach-external-iterators-break.rs [new file with mode: 0644]
src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs [new file with mode: 0644]
src/test/run-pass/foreach-external-iterators-hashmap.rs [new file with mode: 0644]
src/test/run-pass/foreach-external-iterators-loop.rs [new file with mode: 0644]
src/test/run-pass/foreach-external-iterators-nested.rs [new file with mode: 0644]
src/test/run-pass/foreach-external-iterators.rs [new file with mode: 0644]

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 (file)
index 0000000..74ff344
--- /dev/null
@@ -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 (file)
index 0000000..4b6421c
--- /dev/null
@@ -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 (file)
index 0000000..bc6508c
--- /dev/null
@@ -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 (file)
index 0000000..8db6b50
--- /dev/null
@@ -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 (file)
index 0000000..ffc01eb
--- /dev/null
@@ -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 (file)
index 0000000..55884ce
--- /dev/null
@@ -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