bitbelay_cli/commands/
performance.rs1use std::fmt::Debug;
4use std::hash::BuildHasher;
5use std::num::NonZeroUsize;
6
7use anyhow::anyhow;
8use bitbelay_providers::Provider;
9use bitbelay_report::Config;
10use bitbelay_suites::performance;
11use bitbelay_suites::r#trait::Suite as _;
12use byte_unit::Byte;
13
14#[derive(clap::Args, Debug)]
16pub struct Args {
17 #[clap(short, long, default_value = "10 MB")]
19 data_size: String,
20
21 #[arg(short, long, default_value_t = 1 << 8)]
23 iterations: usize,
24
25 #[arg(short, long, default_value_t = 1000.0)]
27 threshold: f64,
28}
29
30pub fn main<H: BuildHasher>(
32 args: Args,
33 build_hasher: H,
34 provider: Box<dyn Provider>,
35) -> anyhow::Result<()> {
36 tracing::info!("Starting speed test suite.");
37
38 let iterations = NonZeroUsize::try_from(args.iterations)
39 .map_err(|_| anyhow!("--iterations must be non-zero!"))?;
40
41 let desired_data_size = args
42 .data_size
43 .parse::<Byte>()
44 .map_err(|_| anyhow!("invalid data size: {}", args.data_size))?;
45
46 let mut suite = performance::suite::Builder::default()
47 .build_hasher(&build_hasher)
48 .unwrap()
49 .try_build()
50 .unwrap();
51
52 suite.run_speed_test(provider, iterations, desired_data_size, args.threshold)?;
53
54 suite
55 .report()
56 .write_to(&mut std::io::stderr(), &Config::default())?;
57
58 Ok(())
59}