#[cfg(feature = "alloc")]
fn main() {
use std::rc::Rc;
use oneringbuf::{ORBIterator, SharedHeapRB};
const RB_SIZE: usize = 4095;
let buf = unsafe { SharedHeapRB::new_zeroed(RB_SIZE + 1) };
let (mut prod, mut cons) = buf.split();
let slice = (0..RB_SIZE).map(Rc::new).collect::<Vec<Rc<usize>>>();
for x in &slice {
prod.push_init(x.clone()).unwrap();
}
unsafe {
cons.advance(RB_SIZE);
}
for x in &slice {
prod.push_init(x.clone()).unwrap();
}
for _ in &slice {
unsafe {
cons.pop_move().unwrap();
}
}
for x in &slice {
prod.push_init(x.clone()).unwrap();
}
unsafe {
cons.advance(RB_SIZE);
}
prod.push_slice_clone_init(&slice).unwrap();
unsafe {
cons.advance(RB_SIZE);
}
prod.push_slice_clone(&slice).unwrap();
for _ in &slice {
unsafe {
cons.pop_move().unwrap();
}
}
drop(prod);
drop(cons);
}
#[cfg(not(feature = "alloc"))]
fn main() {}