mirror of
https://github.com/openharmony/third_party_rust_tinyvec.git
synced 2026-07-18 12:25:35 -04:00
Fix ArrayishVec::swap_remove for last element
This commit is contained in:
+6
-2
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user