ringobuf 0.1.0

Stack based ring buffer (no_std)
Documentation
#![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);
        }
    }
}