#![cfg(test)]
use crate::RingBuf;
const BITS: usize = 2;
const MAX: u8 = 1 << BITS;
fn newbuf() -> RingBuf<BITS, u8> {
RingBuf::<BITS, u8>::new()
}
#[test]
fn test_empty() {
let r = newbuf();
assert!(r.is_empty());
}
#[test]
fn test_not_empty() {
let mut r = newbuf();
assert!(r.push(1).is_ok());
assert!(!r.is_empty());
}
#[test]
fn test_pop_empty() {
let mut r = newbuf();
assert!(r.pop().is_err());
}
#[test]
fn test_push_full() {
let mut r = newbuf();
for _ in 0..MAX {
assert!(r.push(1).is_ok());
}
assert!(r.is_full());
let Err(x) = r.push(1) else {
panic!("expected error: full");
};
assert_eq!(x, 1);
}
#[test]
fn test_push_pop() {
let mut r = newbuf();
assert!(r.push(1).is_ok());
assert_eq!(r.pop().unwrap(), 1);
assert!(r.is_empty());
}
#[test]
fn test_push_pop_ring() {
let mut r = newbuf();
for _ in 0..10 {
for i in 0..MAX {
assert!(r.push(i).is_ok());
}
for i in 0..MAX {
assert_eq!(r.pop().unwrap(), i);
}
}
}