use std::thread;
use recstrm::*;
#[derive(PartialEq, Eq, Hash, Clone)]
enum Checkpoint {
PreDrop,
PostDrop,
NoneCheck
}
#[test]
fn tryrecv() {
let sync = testtools::sync::Checkpoint::new();
let (tx, rx) = Builder::new().queue_size(8).build::<_, ()>();
let tsync = sync.clone();
thread::spawn(move || {
tx.send("hello").unwrap();
tsync
.reached(Checkpoint::PreDrop)
.waitfor([Checkpoint::NoneCheck]);
drop(tx);
tsync.reached(Checkpoint::PostDrop);
});
sync.waitfor([Checkpoint::PreDrop]);
let TryRecv::Some(node) = rx.try_recv().unwrap() else {
panic!("Unexpectedly not TryRecv::Some()");
};
assert_eq!(node, "hello");
sync.waitfor([Checkpoint::PreDrop]);
let TryRecv::None = rx.try_recv().unwrap() else {
panic!("Unexpectedly did not get TryRecv::None");
};
sync
.reached(Checkpoint::NoneCheck)
.waitfor([Checkpoint::PostDrop]);
let TryRecv::EOF = rx.try_recv().unwrap() else {
panic!("Unexpectedly did not get TryRecv::EOF");
};
}