use std::sync::{mpsc::channel, Arc, Barrier};
use pkthread::pool::worker::{Worker, WorkerOptions};
#[test]
fn worker_is_busy() {
let worker = spawn_worker();
let (sender, receiver) = channel::<bool>();
let barrier = Arc::new(Barrier::new(2));
let barrier_thread = barrier.clone();
worker.queue(move || {
sender
.send(true)
.unwrap();
barrier_thread.wait();
});
let received = receiver
.recv()
.unwrap();
if received {
let is_busy = worker.is_busy();
assert!(is_busy);
}
barrier.wait();
}
#[test]
fn work_is_executed() {
let worker = spawn_worker();
let (sender, receiver) = channel::<bool>();
worker.queue(move || {
sender
.send(true)
.unwrap();
});
let value = receiver
.recv()
.expect("Failed to receive value.");
assert!(value);
}
fn spawn_worker() -> Worker {
let options = WorkerOptions::default();
Worker::spawn(options)
.expect("Failed to initialize the worker thread.")
}