use crate::HeapRb;
use alloc::rc::Rc;
#[test]
fn skip() {
let rb = HeapRb::<i8>::new(10);
let (mut prod, mut cons) = rb.split();
let mut i = 0;
for _ in 0..10 {
prod.push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(5), 5);
assert_eq!(cons.pop().unwrap(), 5);
for _ in 0..5 {
prod.push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(6), 6);
assert_eq!(cons.pop().unwrap(), 12);
for _ in 0..7 {
prod.push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(10), 9);
assert_eq!(cons.skip(1), 0);
assert_eq!(cons.pop(), None);
assert_eq!(prod.push(0), Ok(()));
assert_eq!(cons.pop(), Some(0));
}
#[test]
fn skip_drop() {
let rc = Rc::<()>::new(());
static N: usize = 10;
let rb = HeapRb::<Rc<()>>::new(N);
let (mut prod, mut cons) = rb.split();
for _ in 0..N {
prod.push(rc.clone()).unwrap();
}
assert_eq!(cons.len(), N);
assert_eq!(Rc::strong_count(&rc), N + 1);
assert_eq!(cons.skip(N), N);
assert_eq!(cons.len(), 0);
assert_eq!(Rc::strong_count(&rc), 1);
}