use faer::Par;
use std::num::NonZeroUsize;
pub fn solver_par_from_threads(threads: usize) -> Par {
let n = threads.max(1);
if n == 1 {
Par::Seq
} else {
Par::Rayon(NonZeroUsize::new(n).expect("n >= 1 guaranteed by max(1)"))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn threads_zero_yields_seq() {
assert_eq!(solver_par_from_threads(0), Par::Seq);
}
#[test]
fn threads_one_yields_seq() {
assert_eq!(solver_par_from_threads(1), Par::Seq);
}
#[test]
fn threads_n_yields_rayon_n() {
for n in [2usize, 4, 8, 16, 64] {
let par = solver_par_from_threads(n);
match par {
Par::Rayon(k) => assert_eq!(k.get(), n, "threads={n}"),
Par::Seq => panic!("threads={n} should yield Rayon, got Seq"),
}
}
}
}