use core::iter; use itertools as it; usecrate::it::Itertools; usecrate::it::interleave; usecrate::it::intersperse; usecrate::it::intersperse_with; usecrate::it::multizip; usecrate::it::free::put_back; usecrate::it::iproduct; usecrate::it::izip; usecrate::it::chain;
letmut zip = izip!(0..3, 0..2, 0..2i8); for i in0..2 {
assert!((i as usize, i, i as i8) == zip.next().unwrap());
}
assert!(zip.next().is_none());
let xs: [isize; 0] = []; letmut zip = izip!(0..3, 0..2, 0..2i8, &xs);
assert!(zip.next().is_none());
}
#[test] fn izip2() { let _zip1: iter::Zip<_, _> = izip!(1.., 2..); let _zip2: iter::Zip<_, _> = izip!(1.., 2.., );
}
#[test] fn izip3() { letmut zip: iter::Map<iter::Zip<_, _>, _> = izip!(0..3, 0..2, 0..2i8); for i in0..2 {
assert!((i as usize, i, i as i8) == zip.next().unwrap());
}
assert!(zip.next().is_none());
}
#[test] fn multizip3() { letmut zip = multizip((0..3, 0..2, 0..2i8)); for i in0..2 {
assert!((i as usize, i, i as i8) == zip.next().unwrap());
}
assert!(zip.next().is_none());
let xs: [isize; 0] = []; letmut zip = multizip((0..3, 0..2, 0..2i8, xs.iter()));
assert!(zip.next().is_none());
for (_, _, _, _, _) in multizip((0..3, 0..2, xs.iter(), &xs, xs.to_vec())) { /* test compiles */
}
}
#[test] fn test_interleave() { let xs: [u8; 0] = []; let ys = [7u8, 9, 8, 10]; let zs = [2u8, 77]; let it = interleave(xs.iter(), ys.iter());
it::assert_equal(it, ys.iter());
let rs = [7u8, 2, 9, 77, 8, 10]; let it = interleave(ys.iter(), zs.iter());
it::assert_equal(it, rs.iter());
}
#[test] fn test_intersperse() { let xs = [1u8, 2, 3]; let ys = [1u8, 0, 2, 0, 3]; let it = intersperse(&xs, &0);
it::assert_equal(it, ys.iter());
}
#[test] fn test_intersperse_with() { let xs = [1u8, 2, 3]; let ys = [1u8, 10, 2, 10, 3]; let i = 10; let it = intersperse_with(&xs, || &i);
it::assert_equal(it, ys.iter());
}
#[allow(deprecated)] #[test] fn foreach() { let xs = [1i32, 2, 3]; letmut sum = 0;
xs.iter().foreach(|elt| sum += *elt);
assert!(sum == 6);
}
#[test] fn dropping() { let xs = [1, 2, 3]; letmut it = xs.iter().dropping(2);
assert_eq!(it.next(), Some(&3));
assert!(it.next().is_none()); letmut it = xs.iter().dropping(5);
assert!(it.next().is_none());
}
#[test] fn batching() { let xs = [0, 1, 2, 1, 3]; let ys = [(0, 1), (2, 1)];
// An iterator that gathers elements up in pairs let pit = xs
.iter()
.cloned()
.batching(|it| it.next().and_then(|x| it.next().map(|y| (x, y))));
it::assert_equal(pit, ys.iter().cloned());
}
#[test] fn repeatn() { let s = "α"; letmut it = it::repeat_n(s, 3);
assert_eq!(it.len(), 3);
assert_eq!(it.next(), Some(s));
assert_eq!(it.next(), Some(s));
assert_eq!(it.next(), Some(s));
assert_eq!(it.next(), None);
assert_eq!(it.next(), None);
}
#[test] fn count_clones() { // Check that RepeatN only clones N - 1 times.
use core::cell::Cell; #[derive(PartialEq, Debug)] struct Foo {
n: Cell<usize>
}
impl Clone for Foo
{ fn clone(&self) -> Self
{ let n = self.n.get(); self.n.set(n + 1);
Foo { n: Cell::new(n + 1) }
}
}
for n in0..10 { let f = Foo{n: Cell::new(0)}; let it = it::repeat_n(f, n); // drain it let last = it.last(); if n == 0 {
assert_eq!(last, None);
} else {
assert_eq!(last, Some(Foo{n: Cell::new(n - 1)}));
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.