Fix ArrayishVec::swap_remove for last element

This commit is contained in:
Wim Looman
2020-01-13 19:42:49 +01:00
parent 2f5823df14
commit cc6b7d4b46
3 changed files with 40 additions and 2 deletions
+6 -2
View File
@@ -538,8 +538,12 @@ impl<A: Arrayish> ArrayishVec<A> {
index,
self.len
);
let i = self.pop().unwrap();
replace(&mut self[index], i)
if index == self.len - 1 {
self.pop().unwrap()
} else {
let i = self.pop().unwrap();
replace(&mut self[index], i)
}
}
/// Reduces the vec's length to the given value.
+17
View File
@@ -123,6 +123,23 @@ fn ArrayishVec_remove() {
assert_eq!(&av[..], &[1, 3][..]);
}
#[test]
fn ArrayishVec_swap_remove() {
let mut av: ArrayishVec<[i32; 10]> = Default::default();
av.push(1);
av.push(2);
av.push(3);
av.push(4);
assert_eq!(av.swap_remove(3), 4);
assert_eq!(&av[..], &[1, 2, 3][..]);
assert_eq!(av.swap_remove(0), 1);
assert_eq!(&av[..], &[3, 2][..]);
assert_eq!(av.swap_remove(0), 3);
assert_eq!(&av[..], &[2][..]);
assert_eq!(av.swap_remove(0), 2);
assert_eq!(&av[..], &[][..]);
}
#[test]
fn ArrayishVec_drain() {
let mut av: ArrayishVec<[i32; 10]> = Default::default();
+17
View File
@@ -3,6 +3,23 @@
use tinyvec::*;
use std::iter::FromIterator;
#[test]
fn TinyVec_swap_remove() {
let mut tv: TinyVec<[i32; 10]> = Default::default();
tv.push(1);
tv.push(2);
tv.push(3);
tv.push(4);
assert_eq!(tv.swap_remove(3), 4);
assert_eq!(&tv[..], &[1, 2, 3][..]);
assert_eq!(tv.swap_remove(0), 1);
assert_eq!(&tv[..], &[3, 2][..]);
assert_eq!(tv.swap_remove(0), 3);
assert_eq!(&tv[..], &[2][..]);
assert_eq!(tv.swap_remove(0), 2);
assert_eq!(&tv[..], &[][..]);
}
#[test]
fn TinyVec_drain() {
let mut tv: TinyVec<[i32; 10]> = Default::default();