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..6295458 100644 --- a/tests/tinyvec.rs +++ b/tests/tinyvec.rs @@ -21,6 +21,12 @@ fn TinyVec_swap_remove() { assert_eq!(&tv[..], &[][..]); } +#[test] +fn TinyVec_capacity() { + let tv: TinyVec<[i32; 10]> = Default::default(); + assert_eq!(tv.capacity(), 10); +} + #[test] fn TinyVec_drain() { let mut tv: TinyVec<[i32; 10]> = Default::default();