use traceforge::{sync::mpsc::*, *};
#[test]
fn single_producer() {
let f = || {
let (tx, rx) = channel(100);
let _t = thread::spawn(move || {
traceforge::future::block_on(async {
let _ = tx.send(10).await;
let _ = tx.send(20).await;
let _ = tx.send(30).await;
})
});
assert(rx.try_recv().unwrap() == 10);
assert(rx.try_recv().unwrap() == 20);
assert(rx.try_recv().unwrap() == 30);
};
let stats = verify(
Config::builder().with_keep_going_after_error(false).build(),
f,
);
println!("Stats = {}, {}", stats.execs, stats.block);
}
#[test]
fn multiple_producer() {
let f = || {
let n = 5;
let (tx, rx) = channel(100);
for i in 0..n {
let tx = tx.clone();
thread::spawn(move || {
traceforge::future::block_on(async {
let _ = tx.send(i).await;
})
});
}
for _ in 0..n {
let j = rx.try_recv().unwrap();
assert(0 <= j && j < 10);
}
};
let stats = verify(
Config::builder().with_keep_going_after_error(false).build(),
f,
);
println!("Stats = {}, {}", stats.execs, stats.block);
}