use super::BorrowedBuf; use crate::mem::MaybeUninit; /// Test that BorrowedBuf has the correct numbers when created with new #[test] fn new() { let buf: &mut [_] = &mut [0; 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); assert_eq!(rbuf.filled().len(), 0); assert_eq!(rbuf.init_len(), 16); assert_eq!(rbuf.capacity(), 16); assert_eq!(rbuf.unfilled().capacity(), 16); } /// Test that BorrowedBuf has the correct numbers when created with uninit #[test] fn uninit() { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); assert_eq!(rbuf.filled().len(), 0); assert_eq!(rbuf.init_len(), 0); assert_eq!(rbuf.capacity(), 16); assert_eq!(rbuf.unfilled().capacity(), 16); } #[test] fn initialize_unfilled() { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); rbuf.unfilled().ensure_init(); assert_eq!(rbuf.init_len(), 16); } #[test] fn addvance_filled() { let buf: &mut [_] = &mut [0; 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); unsafe { rbuf.unfilled().advance(1); } assert_eq!(rbuf.filled().len(), 1); assert_eq!(rbuf.unfilled().capacity(), 15); } #[test] fn clear() { let buf: &mut [_] = &mut [255; 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); unsafe { rbuf.unfilled().advance(16); } assert_eq!(rbuf.filled().len(), 16); assert_eq!(rbuf.unfilled().capacity(), 0); rbuf.clear(); assert_eq!(rbuf.filled().len(), 0); assert_eq!(rbuf.unfilled().capacity(), 16); assert_eq!(rbuf.unfilled().init_ref(), [255; 16]); } #[test] fn set_init() { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); unsafe { rbuf.set_init(8); } assert_eq!(rbuf.init_len(), 8); unsafe { rbuf.unfilled().advance(4); } unsafe { rbuf.set_init(2); } assert_eq!(rbuf.init_len(), 8); unsafe { rbuf.set_init(8); } assert_eq!(rbuf.init_len(), 8); } #[test] fn append() { let buf: &mut [_] = &mut [MaybeUninit::new(255); 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); rbuf.unfilled().append(&[0; 8]); assert_eq!(rbuf.init_len(), 8); assert_eq!(rbuf.filled().len(), 8); assert_eq!(rbuf.filled(), [0; 8]); rbuf.clear(); rbuf.unfilled().append(&[1; 16]); assert_eq!(rbuf.init_len(), 16); assert_eq!(rbuf.filled().len(), 16); assert_eq!(rbuf.filled(), [1; 16]); } #[test] fn reborrow_written() { let buf: &mut [_] = &mut [MaybeUninit::new(0); 32]; let mut buf: BorrowedBuf<'_> = buf.into(); let mut cursor = buf.unfilled(); cursor.append(&[1; 16]); let mut cursor2 = cursor.reborrow(); cursor2.append(&[2; 16]); assert_eq!(cursor2.written(), 32); assert_eq!(cursor.written(), 32); assert_eq!(buf.unfilled().written(), 0); assert_eq!(buf.init_len(), 32); assert_eq!(buf.filled().len(), 32); let filled = buf.filled(); assert_eq!(&filled[..16], [1; 16]); assert_eq!(&filled[16..], [2; 16]); } #[test] fn cursor_set_init() { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; let mut rbuf: BorrowedBuf<'_> = buf.into(); unsafe { rbuf.unfilled().set_init(8); } assert_eq!(rbuf.init_len(), 8); assert_eq!(rbuf.unfilled().init_ref().len(), 8); assert_eq!(rbuf.unfilled().init_mut().len(), 8); assert_eq!(rbuf.unfilled().uninit_mut().len(), 8); assert_eq!(unsafe { rbuf.unfilled().as_mut() }.len(), 16); unsafe { rbuf.unfilled().advance(4); } unsafe { rbuf.unfilled().set_init(2); } assert_eq!(rbuf.init_len(), 8); unsafe { rbuf.unfilled().set_init(8); } assert_eq!(rbuf.init_len(), 12); assert_eq!(rbuf.unfilled().init_ref().len(), 8); assert_eq!(rbuf.unfilled().init_mut().len(), 8); assert_eq!(rbuf.unfilled().uninit_mut().len(), 4); assert_eq!(unsafe { rbuf.unfilled().as_mut() }.len(), 12); }