about summary refs log tree commit diff
path: root/src/libcoretest
diff options
context:
space:
mode:
authorSteven Allen <steven@stebalien.com>2015-04-22 16:03:56 -0400
committerSteven Allen <steven@stebalien.com>2015-04-22 17:17:24 -0400
commitde8c79a53532c4a6de61b0dcde6ed9b133afa752 (patch)
tree6ea30cf8b817605b49734a11deaf4a62524d306a /src/libcoretest
parente9e9279d87d5786fcb8e12482f2920979602267b (diff)
downloadrust-de8c79a53532c4a6de61b0dcde6ed9b133afa752.tar.gz
rust-de8c79a53532c4a6de61b0dcde6ed9b133afa752.zip
Implement O(1) slice::Iter methods.
Instead of using the O(n) defaults, define O(1) shortcuts.
Diffstat (limited to 'src/libcoretest')
-rw-r--r--src/libcoretest/slice.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/libcoretest/slice.rs b/src/libcoretest/slice.rs
index fe73b3b4407..7c884a73ce0 100644
--- a/src/libcoretest/slice.rs
+++ b/src/libcoretest/slice.rs
@@ -82,3 +82,34 @@ fn iterator_to_slice() {
     test!([1u8,2,3]);
     test!([(),(),()]);
 }
+
+#[test]
+fn test_iterator_nth() {
+    let v: &[_] = &[0, 1, 2, 3, 4];
+    for i in 0..v.len() {
+        assert_eq!(v.iter().nth(i).unwrap(), &v[i]);
+    }
+    assert_eq!(v.iter().nth(v.len()), None);
+
+    let mut iter = v.iter();
+    assert_eq!(iter.nth(2).unwrap(), &v[2]);
+    assert_eq!(iter.nth(1).unwrap(), &v[4]);
+}
+
+#[test]
+fn test_iterator_last() {
+    let v: &[_] = &[0, 1, 2, 3, 4];
+    assert_eq!(v.iter().last().unwrap(), &4);
+    assert_eq!(v[..1].iter().last().unwrap(), &0);
+}
+
+#[test]
+fn test_iterator_count() {
+    let v: &[_] = &[0, 1, 2, 3, 4];
+    assert_eq!(v.iter().count(), 5);
+
+    let mut iter2 = v.iter();
+    iter2.next();
+    iter2.next();
+    assert_eq!(iter2.count(), 3);
+}