use std::sync::OnceLock;
pub fn num_cpu() -> u16 {
static CPU_CORES: OnceLock<u16> = OnceLock::new();
*CPU_CORES.get_or_init(|| {
std::thread::available_parallelism()
.map(|p| p.get() as u16)
.unwrap_or(1)
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_num_cpu() {
let cores = num_cpu();
assert!(cores >= 1, "Should return at least 1 core");
}
#[test]
fn test_num_cpu_is_cached() {
let cores1 = num_cpu();
let cores2 = num_cpu();
assert_eq!(cores1, cores2, "Subsequent calls should return the same value");
}
}