fn main() { use revenq::Queue; use std::thread; loop { let spt = |mut q: Queue, publiv: Vec| { thread::spawn(move || { let mut c = Vec::new(); let plvl = publiv.len(); for i in publiv { q.enqueue(i); } while c.len() < plvl { q.print_debug( std::io::stdout(), &format!("{:?} |+", std::thread::current().id()), ) .unwrap(); match futures_lite::future::block_on(q.next_async()) { Some(x) => c.push(*x), None => { println!("{:?} | ouch; c = {:?}", std::thread::current().id(), c); q.print_debug( std::io::stdout(), &format!("{:?} |+", std::thread::current().id()), ) .unwrap(); panic!(); } } } c.extend((&mut q).map(|i| *i)); println!("{:?} | done; c = {:?}", std::thread::current().id(), c); q.print_debug( std::io::stdout(), &format!("{:?} |+", std::thread::current().id()), ) .unwrap(); }) }; let q1 = Queue::new(); let q2 = q1.clone(); let th1 = spt(q1, vec![1, 3]); let th2 = spt(q2, vec![2, 4]); th1.join().unwrap(); th2.join().unwrap(); println!(); } }