#[derive(Debug)]
pub(crate) struct CircularVec<T> {
inner: std::collections::VecDeque<T>,
}
impl<T> CircularVec<T> {
pub(crate) fn new(capacity: usize) -> Self {
Self {
inner: std::collections::VecDeque::with_capacity(capacity),
}
}
pub(crate) fn push(&mut self, item: T) {
if self.inner.len() == self.inner.capacity() {
let _ = self.inner.pop_front();
}
self.inner.push_back(item);
}
pub(crate) fn contains(&self, item: &T) -> bool
where
T: PartialEq,
{
self.inner.contains(item)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_push_and_contains() {
let mut cv = CircularVec::new(2);
cv.push(1);
cv.push(2);
assert!(cv.contains(&1));
assert!(cv.contains(&2));
cv.push(3);
assert!(!cv.contains(&1));
assert!(cv.contains(&2));
assert!(cv.contains(&3));
assert!(cv.inner.len() == 2);
}
}