Skip to content

Commit 264e11f

Browse files
author
blake2-ppc
committed
---
yaml --- r: 64841 b: refs/heads/snap-stage3 c: 66fccdb h: refs/heads/master i: 64839: d2f8d19 v: v3
1 parent 67dfc05 commit 264e11f

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 2d28d645422c1617be58c8ca7ad9a457264ca850
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 630627c3d43c17a6a657e7b91b754c45929a5bf6
4+
refs/heads/snap-stage3: 66fccdb2958fef88e00236497aec5e0f99fe7d02
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libstd/iterator.rs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,6 +1532,7 @@ mod tests {
15321532
use super::*;
15331533
use prelude::*;
15341534

1535+
use cmp;
15351536
use uint;
15361537

15371538
#[test]
@@ -1924,6 +1925,26 @@ mod tests {
19241925
assert_eq!(it.next_back(), None)
19251926
}
19261927

1928+
#[cfg(test)]
1929+
fn check_randacc_iter<A: Eq, T: Clone + RandomAccessIterator<A>>(a: T, len: uint)
1930+
{
1931+
let mut b = a.clone();
1932+
assert_eq!(len, b.indexable());
1933+
let mut n = 0;
1934+
for a.enumerate().advance |(i, elt)| {
1935+
assert_eq!(Some(elt), b.idx(i));
1936+
n += 1;
1937+
}
1938+
assert_eq!(n, len);
1939+
assert_eq!(None, b.idx(n));
1940+
// call recursively to check after picking off an element
1941+
if len > 0 {
1942+
b.next();
1943+
check_randacc_iter(b, len-1);
1944+
}
1945+
}
1946+
1947+
19271948
#[test]
19281949
fn test_double_ended_flat_map() {
19291950
let u = [0u,1];
@@ -1958,5 +1979,71 @@ mod tests {
19581979
assert_eq!(it.idx(0).unwrap(), &3);
19591980
assert_eq!(it.idx(4).unwrap(), &9);
19601981
assert!(it.idx(6).is_none());
1982+
1983+
check_randacc_iter(it, xs.len() + ys.len() - 3);
1984+
}
1985+
1986+
#[test]
1987+
fn test_random_access_enumerate() {
1988+
let xs = [1, 2, 3, 4, 5];
1989+
check_randacc_iter(xs.iter().enumerate(), xs.len());
1990+
}
1991+
1992+
#[test]
1993+
fn test_random_access_zip() {
1994+
let xs = [1, 2, 3, 4, 5];
1995+
let ys = [7, 9, 11];
1996+
check_randacc_iter(xs.iter().zip(ys.iter()), cmp::min(xs.len(), ys.len()));
1997+
}
1998+
1999+
#[test]
2000+
fn test_random_access_take() {
2001+
let xs = [1, 2, 3, 4, 5];
2002+
let empty: &[int] = [];
2003+
check_randacc_iter(xs.iter().take_(3), 3);
2004+
check_randacc_iter(xs.iter().take_(20), xs.len());
2005+
check_randacc_iter(xs.iter().take_(0), 0);
2006+
check_randacc_iter(empty.iter().take_(2), 0);
2007+
}
2008+
2009+
#[test]
2010+
fn test_random_access_skip() {
2011+
let xs = [1, 2, 3, 4, 5];
2012+
let empty: &[int] = [];
2013+
check_randacc_iter(xs.iter().skip(2), xs.len() - 2);
2014+
check_randacc_iter(empty.iter().skip(2), 0);
2015+
}
2016+
2017+
#[test]
2018+
fn test_random_access_peek() {
2019+
let xs = [1, 2, 3, 4, 5];
2020+
2021+
// test .transform and .peek_ that don't implement Clone
2022+
let it = xs.iter().peek_(|_| {});
2023+
assert_eq!(xs.len(), it.indexable());
2024+
for xs.iter().enumerate().advance |(i, elt)| {
2025+
assert_eq!(Some(elt), it.idx(i));
2026+
}
2027+
2028+
}
2029+
2030+
#[test]
2031+
fn test_random_access_transform() {
2032+
let xs = [1, 2, 3, 4, 5];
2033+
2034+
// test .transform and .peek_ that don't implement Clone
2035+
let it = xs.iter().transform(|x| *x);
2036+
assert_eq!(xs.len(), it.indexable());
2037+
for xs.iter().enumerate().advance |(i, elt)| {
2038+
assert_eq!(Some(*elt), it.idx(i));
2039+
}
2040+
}
2041+
2042+
#[test]
2043+
fn test_random_access_cycle() {
2044+
let xs = [1, 2, 3, 4, 5];
2045+
let empty: &[int] = [];
2046+
check_randacc_iter(xs.iter().cycle().take_(27), 27);
2047+
check_randacc_iter(empty.iter().cycle(), 0);
19612048
}
19622049
}

0 commit comments

Comments
 (0)