use scirs2_core::ndarray::Array2;
use scirs2_core::Complex64;
use scirs2_fft::{fft2, get_global_pool, get_workers, with_workers};
use std::time::Instant;
#[allow(dead_code)]
fn main() {
println!("FFT Worker Pool Management Example");
println!("==================================");
println!();
let size = 512;
let signal = Array2::from_shape_fn((size, size), |(i, j)| Complex64::new((i + j) as f64, 0.0));
let original_workers = get_workers();
println!("Original number of workers: {original_workers}");
let pool = get_global_pool();
let info = pool.get_info();
println!("Worker pool info: {info}");
println!();
let worker_counts = vec![1, 2, 4, 8];
for &num_workers in &worker_counts {
println!("Testing with {num_workers} workers:");
let start = Instant::now();
let _result = with_workers(num_workers, || {
fft2(&signal.to_owned(), None, None, None).expect("Operation failed")
});
let duration = start.elapsed();
println!(" Time: {duration:?}");
}
println!();
println!("Testing with parallelization disabled:");
pool.set_enabled(false);
let start = Instant::now();
let _result = fft2(&signal.to_owned(), None, None, None).expect("Operation failed");
let duration = start.elapsed();
println!(" Time: {duration:?}");
pool.set_enabled(true);
println!();
println!("Environment variable support:");
println!("Set SCIRS2_FFT_WORKERS to control default worker count");
println!();
println!("Using temporary worker context:");
let _result = with_workers(2, || {
println!(" Inside context: {} workers", 2);
fft2(&signal.to_owned(), None, None, None).expect("Operation failed")
});
println!(" After context: {} workers", get_workers());
}