diff options
-rw-r--r-- | src/bytes_mut.rs | 2 | ||||
-rw-r--r-- | tests/test_bytes.rs | 22 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs index 734f4df..1b4a4d9 100644 --- a/src/bytes_mut.rs +++ b/src/bytes_mut.rs @@ -1283,9 +1283,7 @@ impl Extend<u8> for BytesMut { // TODO: optimize // 1. If self.kind() == KIND_VEC, use Vec::extend - // 2. Make `reserve` inline-able for b in iter { - self.reserve(1); self.put_u8(b); } } diff --git a/tests/test_bytes.rs b/tests/test_bytes.rs index 76adfdb..e3820d7 100644 --- a/tests/test_bytes.rs +++ b/tests/test_bytes.rs @@ -599,6 +599,28 @@ fn extend_mut_from_bytes() { } #[test] +fn extend_past_lower_limit_of_size_hint() { + // See https://github.com/tokio-rs/bytes/pull/674#pullrequestreview-1913035700 + struct Iter<I>(I); + + impl<I: Iterator<Item = u8>> Iterator for Iter<I> { + type Item = u8; + + fn next(&mut self) -> Option<Self::Item> { + self.0.next() + } + + fn size_hint(&self) -> (usize, Option<usize>) { + (5, None) + } + } + + let mut bytes = BytesMut::with_capacity(5); + bytes.extend(Iter(std::iter::repeat(0).take(10))); + assert_eq!(bytes.len(), 10); +} + +#[test] fn extend_mut_without_size_hint() { let mut bytes = BytesMut::with_capacity(0); let mut long_iter = LONG.iter(); |