aboutsummaryrefslogtreecommitdiff
path: root/embassy-hal-common/src/ring_buffer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-hal-common/src/ring_buffer.rs')
-rw-r--r--embassy-hal-common/src/ring_buffer.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/embassy-hal-common/src/ring_buffer.rs b/embassy-hal-common/src/ring_buffer.rs
index 18795787f..6829f62f5 100644
--- a/embassy-hal-common/src/ring_buffer.rs
+++ b/embassy-hal-common/src/ring_buffer.rs
@@ -67,6 +67,14 @@ impl<'a> RingBuffer<'a> {
67 self.empty = self.start == self.end; 67 self.empty = self.start == self.end;
68 } 68 }
69 69
70 pub fn is_full(&self) -> bool {
71 self.start == self.end && !self.empty
72 }
73
74 pub fn is_empty(&self) -> bool {
75 self.empty
76 }
77
70 pub fn clear(&mut self) { 78 pub fn clear(&mut self) {
71 self.start = 0; 79 self.start = 0;
72 self.end = 0; 80 self.end = 0;
@@ -82,3 +90,40 @@ impl<'a> RingBuffer<'a> {
82 } 90 }
83 } 91 }
84} 92}
93
94#[cfg(test)]
95mod tests {
96 use super::*;
97
98 #[test]
99 fn push_pop() {
100 let mut b = [0; 4];
101 let mut rb = RingBuffer::new(&mut b);
102 let buf = rb.push_buf();
103 assert_eq!(4, buf.len());
104 buf[0] = 1;
105 buf[1] = 2;
106 buf[2] = 3;
107 buf[3] = 4;
108 rb.push(4);
109
110 let buf = rb.pop_buf();
111 assert_eq!(4, buf.len());
112 assert_eq!(1, buf[0]);
113 rb.pop(1);
114
115 let buf = rb.pop_buf();
116 assert_eq!(3, buf.len());
117 assert_eq!(2, buf[0]);
118 rb.pop(1);
119
120 let buf = rb.pop_buf();
121 assert_eq!(2, buf.len());
122 assert_eq!(3, buf[0]);
123 rb.pop(1);
124
125 let buf = rb.pop_buf();
126 assert_eq!(1, buf.len());
127 assert_eq!(4, buf[0]);
128 }
129}