Skip to content

Commit 001b33e

Browse files
committed
Fix TinyVec::resize across inline/heap boundary
1 parent d0bdff5 commit 001b33e

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/tiny_vec.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,12 @@ impl<A: Arrayish> TinyVec<A> {
405405
A::Item: Clone,
406406
{
407407
match self {
408-
TinyVec::Inline(a) => a.resize(new_len, new_val),
408+
TinyVec::Inline(a) => if new_len > A::CAPACITY {
409+
self.move_to_the_heap();
410+
self.resize(new_len, new_val);
411+
} else {
412+
a.resize(new_len, new_val);
413+
},
409414
TinyVec::Heap(v) => v.resize(new_len, new_val),
410415
}
411416
}

tests/tinyvec.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
use tinyvec::*;
44
use std::iter::FromIterator;
55

6-
#[test]
76
fn TinyVec_drain() {
87
let mut tv: TinyVec<[i32; 10]> = Default::default();
98
tv.push(1);
@@ -31,3 +30,10 @@ fn TinyVec_drain() {
3130
assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);
3231
assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);
3332
}
33+
34+
#[test]
35+
fn TinyVec_resize() {
36+
let mut tv: TinyVec<[i32; 10]> = Default::default();
37+
tv.resize(20, 5);
38+
assert_eq!(&tv[..], &[5; 20]);
39+
}

0 commit comments

Comments
 (0)