diff --git a/src/tinyvec.rs b/src/tinyvec.rs index 9edf4f7..0bb84e9 100644 --- a/src/tinyvec.rs +++ b/src/tinyvec.rs @@ -170,11 +170,15 @@ impl TinyVec { /// The capacity of the `TinyVec`. /// - /// This is fixed based on the array type. + /// When not heap allocated this is fixed based on the array type. + /// Otherwise its the result of the underlying Vec::capacity. #[inline(always)] #[must_use] pub fn capacity(&self) -> usize { - A::CAPACITY + match self { + TinyVec::Inline(_) => A::CAPACITY, + TinyVec::Heap(v) => v.capacity(), + } } /// Removes all elements from the vec. diff --git a/tests/tinyvec.rs b/tests/tinyvec.rs index f539cd2..7a642ee 100644 --- a/tests/tinyvec.rs +++ b/tests/tinyvec.rs @@ -21,6 +21,15 @@ fn TinyVec_swap_remove() { assert_eq!(&tv[..], &[][..]); } +#[test] +fn TinyVec_capacity() { + let mut tv: TinyVec<[i32; 1]> = Default::default(); + assert_eq!(tv.capacity(), 1); + tv.move_to_the_heap(); + tv.extend_from_slice(&[1, 2, 3, 4]); + assert_eq!(tv.capacity(), 4); +} + #[test] fn TinyVec_drain() { let mut tv: TinyVec<[i32; 10]> = Default::default();