diff --git a/src/lib.rs b/src/lib.rs index 78b2c82..75c277f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1000,6 +1000,7 @@ impl SmallVec { // SAFETY: we have a mutable reference to each vector and each uniquely owns its memory. // so the ranges can't overlap unsafe { copy_nonoverlapping(other.as_ptr(), ptr, other_len) }; + unsafe { self.set_len(total_len) } } #[inline] diff --git a/src/tests.rs b/src/tests.rs index da04820..2f1522c 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -328,6 +328,25 @@ fn test_insert_many() { ); } +#[test] +fn test_append() { + let mut v: SmallVec = SmallVec::new(); + for x in 0..4 { + v.push(x); + } + assert_eq!(v.len(), 4); + + let mut n: SmallVec = SmallVec::from_buf([5, 6]); + v.append(&mut n); + assert_eq!(v.len(), 6); + assert_eq!(n.len(), 0); + + assert_eq!( + &v.iter().map(|v| *v).collect::>(), + &[0, 1, 2, 3, 5, 6] + ); +} + struct MockHintIter { x: T, hint: usize,