more_itertools/selecting/
take.rs1
2pub fn take<T>(iter: &mut Box<dyn Iterator<Item = T>>, n: usize) -> Vec<T>
3where
4T: 'static
5{
6 let mut ret = Vec::new();
7
8 for _ in 0..n {
9 let item = iter.next();
10 match item {
11 None => { break; }
12 Some(v) => {
13 ret.push(v);
14 }
15 }
16 }
17
18 return ret;
19}
20
21#[cfg(test)]
22mod tests {
23
24 use crate::itertools::iter::iter_from_vec;
25
26 use super::*;
27
28 #[test]
29 fn test1() {
30 let v1 = vec![1,2,3,4,5];
31
32 let mut iter1 = iter_from_vec(v1);
33
34 assert_eq!(vec![1,2,3], take(&mut iter1, 3));
35
36 assert_eq!(vec![4,5], iter1.collect::<Vec<_>>());
37
38 let v2 = vec![1,2,3,4,5];
39
40 assert_eq!(vec![1,2,3,4,5], take(&mut iter_from_vec(v2), 10));
41 }
42}