#![feature(test)]
extern crate test;
use lf_queue::Queue;
#[cfg(test)]
mod tests {
use super::*;
use test::Bencher;
#[bench]
fn mpmc(b: &mut Bencher) {
const COUNT: usize = 1_000;
const CONCURRENCY: usize = 4;
let queue: Queue<usize> = Queue::new();
b.iter(|| {
let ths: Vec<_> = (0..CONCURRENCY)
.map(|_| {
let q = queue.clone();
std::thread::spawn(move || {
for _ in 0..COUNT {
loop {
if q.pop().is_some() {
break;
}
}
}
})
})
.map(|_| {
let q = queue.clone();
std::thread::spawn(move || {
for i in 0..COUNT {
q.push(i);
}
})
})
.collect();
for th in ths {
th.join().unwrap();
}
});
}
}