Revision control
Copy as Markdown
Other Tools
use crate::sync::mpsc::list;
use loom::thread;
use std::sync::Arc;
#[test]
fn smoke() {
use crate::sync::mpsc::block::Read;
const NUM_TX: usize = 2;
const NUM_MSG: usize = 2;
loom::model(|| {
let (tx, mut rx) = list::channel();
let tx = Arc::new(tx);
for th in 0..NUM_TX {
let tx = tx.clone();
thread::spawn(move || {
for i in 0..NUM_MSG {
tx.push((th, i));
}
});
}
let mut next = vec![0; NUM_TX];
loop {
match rx.pop(&tx) {
Some(Read::Value((th, v))) => {
assert_eq!(v, next[th]);
next[th] += 1;
if next.iter().all(|&i| i == NUM_MSG) {
break;
}
}
Some(Read::Closed) => {
panic!();
}
None => {
thread::yield_now();
}
}
}
});
}