xref: /drstd/src/std/io/readbuf/tests.rs (revision 86982c5e9b2eaa583327251616ee822c36288824)
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