#! [warn(rust_2018_idioms)]
#! [cfg(feature = "full" )]
use tokio::io::{AsyncRead, AsyncReadExt, ReadBuf};
use tokio_test::assert_ok;
use std::io;
use std::pin::Pin;
use std::task::{Context, Poll};
#[ tokio::test]
async fn read_buf() {
struct Rd {
cnt: usize,
}
impl AsyncRead for Rd {
fn poll_read(
mut self : Pin<&mut Self >,
_cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>,
) -> Poll<io::Result<()>> {
self .cnt += 1 ;
buf.put_slice(b"hello world" );
Poll::Ready(Ok(()))
}
}
let mut buf = vec![];
let mut rd = Rd { cnt: 0 };
let n = assert_ok!(rd.read_buf(&mut buf).await );
assert_eq!(1 , rd.cnt);
assert_eq!(n, 11 );
assert_eq!(buf[..], b"hello world" [..]);
}
#[ tokio::test]
#[ cfg(feature = "io-util" )]
async fn issue_5588() {
use bytes::BufMut;
// steps to zero
let mut buf = [0 ; 8 ];
let mut read_buf = ReadBuf::new(&mut buf);
assert_eq!(read_buf.remaining_mut(), 8 );
assert_eq!(read_buf.chunk_mut().len(), 8 );
unsafe {
read_buf.advance_mut(1 );
}
assert_eq!(read_buf.remaining_mut(), 7 );
assert_eq!(read_buf.chunk_mut().len(), 7 );
unsafe {
read_buf.advance_mut(5 );
}
assert_eq!(read_buf.remaining_mut(), 2 );
assert_eq!(read_buf.chunk_mut().len(), 2 );
unsafe {
read_buf.advance_mut(2 );
}
assert_eq!(read_buf.remaining_mut(), 0 );
assert_eq!(read_buf.chunk_mut().len(), 0 );
// directly to zero
let mut buf = [0 ; 8 ];
let mut read_buf = ReadBuf::new(&mut buf);
assert_eq!(read_buf.remaining_mut(), 8 );
assert_eq!(read_buf.chunk_mut().len(), 8 );
unsafe {
read_buf.advance_mut(8 );
}
assert_eq!(read_buf.remaining_mut(), 0 );
assert_eq!(read_buf.chunk_mut().len(), 0 );
// uninit
let mut buf = [std::mem::MaybeUninit::new(1 ); 8 ];
let mut uninit = ReadBuf::uninit(&mut buf);
assert_eq!(uninit.remaining_mut(), 8 );
assert_eq!(uninit.chunk_mut().len(), 8 );
let mut buf = [std::mem::MaybeUninit::uninit(); 8 ];
let mut uninit = ReadBuf::uninit(&mut buf);
unsafe {
uninit.advance_mut(4 );
}
assert_eq!(uninit.remaining_mut(), 4 );
assert_eq!(uninit.chunk_mut().len(), 4 );
uninit.put_u8(1 );
assert_eq!(uninit.remaining_mut(), 3 );
assert_eq!(uninit.chunk_mut().len(), 3 );
uninit.put_slice(&[1 , 2 , 3 ]);
assert_eq!(uninit.remaining_mut(), 0 );
assert_eq!(uninit.chunk_mut().len(), 0 );
}
Messung V0.5 in Prozent C=89 H=96 G=92
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland