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}