Skip to content

Commit 11ef606

Browse files
committed
Use reserve_exact() to ensure Vec len stays the same as capacity
1 parent 0badab2 commit 11ef606

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/poolable.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ impl<T: Default + Clone> Realloc for Vec<T> {
4242

4343
assert!(new_size > 0);
4444
match new_size.cmp(&self.len()) {
45-
Greater => self.resize(new_size, T::default()),
45+
Greater => {
46+
self.reserve_exact(new_size - self.len());
47+
debug_assert_eq!(self.capacity(), new_size);
48+
self.resize(new_size, T::default());
49+
debug_assert_eq!(self.len(), new_size);
50+
51+
// Check that resize() did not reserve additional space.
52+
debug_assert_eq!(self.capacity(), new_size);
53+
}
4654
Less => {
4755
self.truncate(new_size);
4856
debug_assert_eq!(self.len(), new_size);
@@ -95,6 +103,12 @@ mod tests {
95103
let new_size = Poolable::capacity(&v) + i;
96104
v.realloc(new_size);
97105
assert_eq!(Poolable::capacity(&v), new_size);
106+
107+
// Length of the vectory and underlying buffer
108+
// for poolable vectors should
109+
// be exactly of the requested size.
110+
assert_eq!(v.len(), new_size);
111+
assert_eq!(v.capacity(), new_size);
98112
}
99113
}
100114
}

0 commit comments

Comments
 (0)