Merge pull request #29 from HeroicKatora/remove

Test and fix removal at past-the-end index
This commit is contained in:
Lokathor
2020-01-18 09:16:46 -07:00
committed by GitHub
2 changed files with 11 additions and 5 deletions
+3 -5
View File
@@ -384,12 +384,10 @@ impl<A: Array> ArrayVec<A> {
#[inline]
pub fn remove(&mut self, index: usize) -> A::Item {
let targets: &mut [A::Item] = &mut self.deref_mut()[index..];
let mut spare = A::Item::default();
for target in targets.iter_mut().rev() {
spare = replace(target, spare);
}
let item = replace(&mut targets[0], A::Item::default());
targets.rotate_left(1);
self.len -= 1;
spare
item
}
// NIGHTLY: remove_item, https://github.com/rust-lang/rust/issues/40062
+8
View File
@@ -123,6 +123,14 @@ fn ArrayVec_remove() {
assert_eq!(&av[..], &[1, 3][..]);
}
#[test]
#[should_panic]
fn ArrayVec_remove_invalid() {
let mut av: ArrayVec<[i32; 1]> = Default::default();
av.push(1);
av.remove(1);
}
#[test]
fn ArrayVec_swap_remove() {
let mut av: ArrayVec<[i32; 10]> = Default::default();