1 use super::BorrowedBuf; 2 use crate::std::mem::MaybeUninit; 3 4 /// Test that BorrowedBuf has the correct numbers when created with new 5 #[test] 6 fn new() { 7 let buf: &mut [_] = &mut [0; 16]; 8 let mut rbuf: BorrowedBuf<'_> = buf.into(); 9 10 assert_eq!(rbuf.filled().len(), 0); 11 assert_eq!(rbuf.init_len(), 16); 12 assert_eq!(rbuf.capacity(), 16); 13 assert_eq!(rbuf.unfilled().capacity(), 16); 14 } 15 16 /// Test that BorrowedBuf has the correct numbers when created with uninit 17 #[test] 18 fn uninit() { 19 let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; 20 let mut rbuf: BorrowedBuf<'_> = buf.into(); 21 22 assert_eq!(rbuf.filled().len(), 0); 23 assert_eq!(rbuf.init_len(), 0); 24 assert_eq!(rbuf.capacity(), 16); 25 assert_eq!(rbuf.unfilled().capacity(), 16); 26 } 27 28 #[test] 29 fn initialize_unfilled() { 30 let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; 31 let mut rbuf: BorrowedBuf<'_> = buf.into(); 32 33 rbuf.unfilled().ensure_init(); 34 35 assert_eq!(rbuf.init_len(), 16); 36 } 37 38 #[test] 39 fn advance_filled() { 40 let buf: &mut [_] = &mut [0; 16]; 41 let mut rbuf: BorrowedBuf<'_> = buf.into(); 42 43 unsafe { 44 rbuf.unfilled().advance(1); 45 } 46 47 assert_eq!(rbuf.filled().len(), 1); 48 assert_eq!(rbuf.unfilled().capacity(), 15); 49 } 50 51 #[test] 52 fn clear() { 53 let buf: &mut [_] = &mut [255; 16]; 54 let mut rbuf: BorrowedBuf<'_> = buf.into(); 55 56 unsafe { 57 rbuf.unfilled().advance(16); 58 } 59 60 assert_eq!(rbuf.filled().len(), 16); 61 assert_eq!(rbuf.unfilled().capacity(), 0); 62 63 rbuf.clear(); 64 65 assert_eq!(rbuf.filled().len(), 0); 66 assert_eq!(rbuf.unfilled().capacity(), 16); 67 68 assert_eq!(rbuf.unfilled().init_ref(), [255; 16]); 69 } 70 71 #[test] 72 fn set_init() { 73 let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; 74 let mut rbuf: BorrowedBuf<'_> = buf.into(); 75 76 unsafe { 77 rbuf.set_init(8); 78 } 79 80 assert_eq!(rbuf.init_len(), 8); 81 82 unsafe { 83 rbuf.unfilled().advance(4); 84 } 85 86 unsafe { 87 rbuf.set_init(2); 88 } 89 90 assert_eq!(rbuf.init_len(), 8); 91 92 unsafe { 93 rbuf.set_init(8); 94 } 95 96 assert_eq!(rbuf.init_len(), 8); 97 } 98 99 #[test] 100 fn append() { 101 let buf: &mut [_] = &mut [MaybeUninit::new(255); 16]; 102 let mut rbuf: BorrowedBuf<'_> = buf.into(); 103 104 rbuf.unfilled().append(&[0; 8]); 105 106 assert_eq!(rbuf.init_len(), 8); 107 assert_eq!(rbuf.filled().len(), 8); 108 assert_eq!(rbuf.filled(), [0; 8]); 109 110 rbuf.clear(); 111 112 rbuf.unfilled().append(&[1; 16]); 113 114 assert_eq!(rbuf.init_len(), 16); 115 assert_eq!(rbuf.filled().len(), 16); 116 assert_eq!(rbuf.filled(), [1; 16]); 117 } 118 119 #[test] 120 fn reborrow_written() { 121 let buf: &mut [_] = &mut [MaybeUninit::new(0); 32]; 122 let mut buf: BorrowedBuf<'_> = buf.into(); 123 124 let mut cursor = buf.unfilled(); 125 cursor.append(&[1; 16]); 126 127 let mut cursor2 = cursor.reborrow(); 128 cursor2.append(&[2; 16]); 129 130 assert_eq!(cursor2.written(), 32); 131 assert_eq!(cursor.written(), 32); 132 133 assert_eq!(buf.unfilled().written(), 0); 134 assert_eq!(buf.init_len(), 32); 135 assert_eq!(buf.filled().len(), 32); 136 let filled = buf.filled(); 137 assert_eq!(&filled[..16], [1; 16]); 138 assert_eq!(&filled[16..], [2; 16]); 139 } 140 141 #[test] 142 fn cursor_set_init() { 143 let buf: &mut [_] = &mut [MaybeUninit::uninit(); 16]; 144 let mut rbuf: BorrowedBuf<'_> = buf.into(); 145 146 unsafe { 147 rbuf.unfilled().set_init(8); 148 } 149 150 assert_eq!(rbuf.init_len(), 8); 151 assert_eq!(rbuf.unfilled().init_ref().len(), 8); 152 assert_eq!(rbuf.unfilled().init_mut().len(), 8); 153 assert_eq!(rbuf.unfilled().uninit_mut().len(), 8); 154 assert_eq!(unsafe { rbuf.unfilled().as_mut() }.len(), 16); 155 156 unsafe { 157 rbuf.unfilled().advance(4); 158 } 159 160 unsafe { 161 rbuf.unfilled().set_init(2); 162 } 163 164 assert_eq!(rbuf.init_len(), 8); 165 166 unsafe { 167 rbuf.unfilled().set_init(8); 168 } 169 170 assert_eq!(rbuf.init_len(), 12); 171 assert_eq!(rbuf.unfilled().init_ref().len(), 8); 172 assert_eq!(rbuf.unfilled().init_mut().len(), 8); 173 assert_eq!(rbuf.unfilled().uninit_mut().len(), 4); 174 assert_eq!(unsafe { rbuf.unfilled().as_mut() }.len(), 12); 175 } 176