use std::pin::Pin; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncReadExt, ReadBuf}; use tokio_test::assert_ok; use tokio_test::io::Builder;
#[tokio::test] asyncfn read_to_end_doesnt_grow_with_capacity() { let arr: Vec<u8> = (0..100).collect();
// We only test from 32 since we allocate at least 32 bytes each time for len in32..100 { let bytes = &arr[..len]; for split in0..len { for cap in0..101 { letmut mock = if split == 0 {
Builder::new().read(bytes).build()
} else {
Builder::new()
.read(&bytes[..split])
.read(&bytes[split..])
.build()
}; letmut buf = Vec::with_capacity(cap);
AsyncReadExt::read_to_end(&mut mock, &mut buf)
.await
.unwrap(); // It has the right data.
assert_eq!(buf.as_slice(), bytes); // Unless cap was smaller than length, then we did not reallocate. if cap >= len {
assert_eq!(buf.capacity(), cap);
}
}
}
}
}
#[tokio::test] asyncfn read_to_end_grows_capacity_if_unfit() { let bytes = b"the_vector_startingcap_will_be_smaller"; letmut mock = Builder::new().read(bytes).build(); let initial_capacity = bytes.len() - 4; letmut buf = Vec::with_capacity(initial_capacity);
AsyncReadExt::read_to_end(&mut mock, &mut buf)
.await
.unwrap(); // *4 since it doubles when it doesn't fit and again when reaching EOF
assert_eq!(buf.capacity(), initial_capacity * 4);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-19)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.