main.rs

1.5 kB · rust · 47 lines

1mod check;23use coprime_terms::design::Design;4use coprime_terms::engine::{terms_each, Mode};56fn terms(args: &[String]) {7    let name = args.get(1).map(|s| s.as_str()).unwrap_or("menger");8    let top: u32 = args.get(2).map(|s| s.parse().unwrap()).unwrap_or(8);9    let threads: usize = args.get(3).map(|s| s.parse().unwrap()).unwrap_or_else(|| {10        std::thread::available_parallelism()11            .map(|n| n.get())12            .unwrap_or(1)13    });14    let design = Design::named(name).expect("unknown design");15    println!(16        "{} q 3 D {} k {} threads {}",17        design.name,18        design.dimension,19        design.fill(),20        threads21    );22    println!("n value seconds");23    println!("0 0 0.000");24    terms_each(&design, top, threads, Mode::Auto, &mut |level| {25        println!("{} {} {:.3}", level.level, level.value, level.seconds);26        use std::io::Write;27        std::io::stdout().flush().ok();28    });29}3031fn profile(args: &[String]) {32    let name = args.get(1).map(|s| s.as_str()).unwrap_or("menger");33    let level: u32 = args.get(2).map(|s| s.parse().unwrap()).unwrap_or(14);34    let threads: usize = args.get(3).map(|s| s.parse().unwrap()).unwrap_or(8);35    let design = Design::named(name).expect("unknown design");36    coprime_terms::engine::profile(&design, level, threads);37}3839fn main() {40    let all: Vec<String> = std::env::args().collect();41    let rest = &all[1..];42    match rest.first().map(|s| s.as_str()) {43        Some("check") => check::run(rest),44        Some("profile") => profile(rest),45        _ => terms(rest),46    }47}