pub fn default_worker_threads() -> usize {
if let Some(n) = std::env::var("ATD_WORKER_THREADS")
.ok()
.and_then(|s| s.parse::<usize>().ok())
.filter(|n| *n > 0)
{
return n;
}
std::thread::available_parallelism()
.map(|n| n.get().min(4))
.unwrap_or(2)
}
#[cfg(test)]
mod tests {
use super::*;
fn env_lock() -> std::sync::MutexGuard<'static, ()> {
static LOCK: std::sync::OnceLock<std::sync::Mutex<()>> = std::sync::OnceLock::new();
LOCK.get_or_init(|| std::sync::Mutex::new(()))
.lock()
.unwrap_or_else(|p| p.into_inner())
}
#[test]
fn defaults_to_at_most_four() {
let _g = env_lock();
unsafe { std::env::remove_var("ATD_WORKER_THREADS") };
let n = default_worker_threads();
assert!((1..=4).contains(&n), "default {n} outside [1,4]");
}
#[test]
fn env_override_respected() {
let _g = env_lock();
unsafe { std::env::set_var("ATD_WORKER_THREADS", "8") };
let n = default_worker_threads();
unsafe { std::env::remove_var("ATD_WORKER_THREADS") };
assert_eq!(n, 8);
}
#[test]
fn env_zero_falls_back_to_default() {
let _g = env_lock();
unsafe { std::env::set_var("ATD_WORKER_THREADS", "0") };
let n = default_worker_threads();
unsafe { std::env::remove_var("ATD_WORKER_THREADS") };
assert!((1..=4).contains(&n), "fallback {n} outside [1,4]");
}
#[test]
fn env_garbage_falls_back_to_default() {
let _g = env_lock();
unsafe { std::env::set_var("ATD_WORKER_THREADS", "not-a-number") };
let n = default_worker_threads();
unsafe { std::env::remove_var("ATD_WORKER_THREADS") };
assert!((1..=4).contains(&n), "garbage fallback {n} outside [1,4]");
}
}