Fix TinyVec::resize across inline/heap boundary

This commit is contained in:
Wim Looman
2020-01-13 19:53:01 +01:00
parent 2f5823df14
commit 2049895f28
2 changed files with 13 additions and 1 deletions
+6 -1
View File
@@ -405,7 +405,12 @@ impl<A: Arrayish> TinyVec<A> {
A::Item: Clone,
{
match self {
TinyVec::Inline(a) => a.resize(new_len, new_val),
TinyVec::Inline(a) => if new_len > A::CAPACITY {
self.move_to_the_heap();
self.resize(new_len, new_val);
} else {
a.resize(new_len, new_val);
},
TinyVec::Heap(v) => v.resize(new_len, new_val),
}
}
+7
View File
@@ -31,3 +31,10 @@ fn TinyVec_drain() {
assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);
}
#[test]
fn TinyVec_resize() {
let mut tv: TinyVec<[i32; 10]> = Default::default();
tv.resize(20, 5);
assert_eq!(&tv[..], &[5; 20]);
}