diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs index 2af58e300..8e42079e6 100644 --- a/src/bytes_mut.rs +++ b/src/bytes_mut.rs @@ -819,7 +819,7 @@ impl BytesMut { } fn try_unsplit(&mut self, other: BytesMut) -> Result<(), BytesMut> { - if other.is_empty() { + if other.capacity() == 0 { return Ok(()); } diff --git a/tests/test_bytes.rs b/tests/test_bytes.rs index b9e6ce4d3..2d22fdddb 100644 --- a/tests/test_bytes.rs +++ b/tests/test_bytes.rs @@ -784,6 +784,31 @@ fn bytes_mut_unsplit_empty_self() { assert_eq!(b"aaabbbcccddd", &buf[..]); } +#[test] +fn bytes_mut_unsplit_other_keeps_capacity() { + let mut buf = BytesMut::with_capacity(64); + buf.extend_from_slice(b"aabb"); + + // non empty other created "from" buf + let mut other = buf.split_off(buf.len()); + other.extend_from_slice(b"ccddee"); + buf.unsplit(other); + + assert_eq!(buf.capacity(), 64); +} + +#[test] +fn bytes_mut_unsplit_empty_other_keeps_capacity() { + let mut buf = BytesMut::with_capacity(64); + buf.extend_from_slice(b"aabbccddee"); + + // empty other created "from" buf + let other = buf.split_off(buf.len()); + buf.unsplit(other); + + assert_eq!(buf.capacity(), 64); +} + #[test] fn bytes_mut_unsplit_arc_different() { let mut buf = BytesMut::with_capacity(64);