#![allow(missing_docs)]
use core::time::Duration;
use std::time::Instant;
use taktora_executor::{ControlFlow, Executor, item_with_triggers};
#[test]
fn stop_from_other_thread_wakes_idle_executor() {
let mut exec = Executor::builder().worker_threads(0).build().unwrap();
exec.add(item_with_triggers(
|d| {
d.interval(Duration::from_secs(60));
Ok(())
},
|_| Ok(ControlFlow::Continue),
))
.unwrap();
let stop = exec.stoppable();
let t = std::thread::spawn(move || {
std::thread::sleep(Duration::from_millis(50));
stop.stop();
});
let start = Instant::now();
exec.run().unwrap();
t.join().unwrap();
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_secs(2),
"stoppable did not wake the loop promptly (elapsed = {elapsed:?})"
);
}