Tweak growth algorithm in BytesMut::reserve

This commit is contained in:
Carl Lerche
2017-02-20 21:07:25 -08:00
parent 8c11456185
commit b46d3fd32e
2 changed files with 14 additions and 4 deletions
+2 -2
View File
@@ -1695,12 +1695,12 @@ impl Inner {
// asking for more than the initial buffer capacity. Allocate more
// than requested if `new_cap` is not much bigger than the current
// capacity.
new_cap = cmp::max(len << 1, new_cap);
new_cap = cmp::max(v.capacity() << 1, new_cap);
}
}
// Create a new vector to store the data
let mut v = Vec::with_capacity(new_cap);
let mut v = Vec::with_capacity(new_cap.next_power_of_two());
// Copy the bytes
v.extend_from_slice(self.as_ref());
+12 -2
View File
@@ -207,7 +207,7 @@ fn fns_defined_for_bytes_mut() {
}
#[test]
fn reserve() {
fn reserve_convert() {
// Inline -> Vec
let mut bytes = BytesMut::with_capacity(8);
bytes.put("hello");
@@ -236,11 +236,21 @@ fn reserve() {
let a = bytes.drain_to(30);
bytes.reserve(128);
assert_eq!(bytes.capacity(), bytes.len() + 128);
assert_eq!(bytes.capacity(), (bytes.len() + 128).next_power_of_two());
drop(a);
}
#[test]
fn reserve_growth() {
let mut bytes = BytesMut::with_capacity(64);
bytes.put("hello world");
let _ = bytes.drain();
bytes.reserve(65);
assert_eq!(bytes.capacity(), 128);
}
#[test]
fn inline_storage() {
let mut bytes = BytesMut::with_capacity(inline_cap());