1extern crate test;
2use std::cmp::PartialEq;
3
4pub fn pull_at<T: PartialEq>(v: &mut Vec<T>, mut idxs: Vec<usize>) -> Vec<T> {
5 idxs.sort();
6 idxs.reverse();
7 idxs.iter().map(|x| v.remove(*x)).collect::<Vec<T>>()
8}
9
10#[cfg(test)]
11mod tests {
12 use super::*;
13 use test::Bencher;
14
15 #[test]
16 fn it_works() {
17 let mut v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
18 let pulled = pull_at(&mut v, vec![0, 9, 1]);
19
20 assert_eq!(v, vec![3, 4, 5, 6, 7, 8, 9]);
21 assert_eq!(pulled, vec![10, 2, 1]);
22 }
23
24 #[bench]
25 fn bench_pull_at(b: &mut Bencher) {
26 b.iter(|| {
28 let mut v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
29 pull_at(&mut v, vec![0, 9, 1])
30 });
31 }
32}