Fix 100% write not un-setting full

This commit is contained in:
Aode (lion) 2022-02-16 15:41:07 -05:00
parent 4578fb0045
commit c3a7fc23ed

View file

@ -31,6 +31,10 @@ impl<const N: usize> ReadWriteBuf<N> {
self.read_cursor == self.write_cursor && !self.full
}
pub fn is_full(&self) -> bool {
self.full
}
pub fn for_reading(&mut self) -> Option<&mut [u8]> {
let (start, stop) = if self.read_cursor < self.write_cursor {
(self.read_cursor, self.write_cursor)
@ -64,7 +68,7 @@ impl<const N: usize> ReadWriteBuf<N> {
pub fn advance_write(&mut self, count: usize) {
self.write_cursor = (self.write_cursor + count) % N;
if self.write_cursor != self.read_cursor {
if count > 0 {
self.full = false;
}
}
@ -74,6 +78,32 @@ impl<const N: usize> ReadWriteBuf<N> {
mod tests {
use super::ReadWriteBuf;
#[test]
fn read_exact_length_works() {
let mut buf = ReadWriteBuf::<10>::new();
assert!(buf.is_empty());
assert!(buf.for_writing().is_none());
let read_into = buf.for_reading().unwrap();
assert_eq!(read_into.len(), 10);
buf.advance_read(10);
assert!(buf.is_full());
assert_eq!(buf.read_cursor, buf.write_cursor);
let write_from = buf.for_writing().unwrap();
assert_eq!(write_from.len(), 10);
buf.advance_write(10);
assert!(!buf.full);
assert_eq!(buf.read_cursor, buf.write_cursor);
let read_from = buf.for_reading().unwrap();
assert_eq!(read_from.len(), 10);
assert!(buf.for_writing().is_none());
}
#[test]
fn from_0_0_reads_whole_len() {
let mut buf = ReadWriteBuf::<16>::new();