use super::Rb;
use crate::{storage::Array, traits::*};
use alloc::rc::Rc;
#[test]
fn skip() {
let mut rb = Rb::<Array<i8, 10>>::default();
let (mut prod, mut cons) = rb.split_ref();
let mut i = 0;
for _ in 0..10 {
prod.try_push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(5), 5);
assert_eq!(cons.try_pop().unwrap(), 5);
for _ in 0..5 {
prod.try_push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(6), 6);
assert_eq!(cons.try_pop().unwrap(), 12);
for _ in 0..7 {
prod.try_push(i).unwrap();
i += 1;
}
assert_eq!(cons.skip(10), 9);
assert_eq!(cons.skip(1), 0);
assert_eq!(cons.try_pop(), None);
assert_eq!(prod.try_push(0), Ok(()));
assert_eq!(cons.try_pop(), Some(0));
}
#[test]
fn skip_drop() {
let rc = Rc::<()>::new(());
const CAP: usize = 10;
let mut rb = Rb::<Array<Rc<()>, CAP>>::default();
let (mut prod, mut cons) = rb.split_ref();
for _ in 0..CAP {
prod.try_push(rc.clone()).unwrap();
}
assert_eq!(cons.occupied_len(), CAP);
assert_eq!(Rc::strong_count(&rc), CAP + 1);
assert_eq!(cons.skip(CAP), CAP);
assert_eq!(cons.occupied_len(), 0);
assert_eq!(Rc::strong_count(&rc), 1);
}