use std::{ thread::sleep, time::{Duration, Instant}, }; use indicatif::{ProgressBar, ProgressIterator, ProgressStyle}; fn main() { let iterations = 1000; // Set the array with all the blocksizes to test let blocksizes: [usize; 7] = [16, 64, 256, 1024, 4096, 16384, 65536]; // Set the array with all the durations to save let mut elapsed: [Duration; 7] = [Duration::ZERO; 7]; for (pos, blocksize) in blocksizes.iter().enumerate() { // Set up the style for the progressbar let sty = ProgressStyle::default_spinner() .tick_strings(&[ "▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸", "▪▪▪▪▪", ]) .template("{prefix} {pos:>4}/{len:4} Iterations per second: {per_sec} {spinner} {msg}") .unwrap(); // Set up the progress bar and apply the style let pb = ProgressBar::new(iterations); pb.set_style(sty); pb.enable_steady_tick(Duration::from_millis(120)); pb.set_prefix(format!("Doing test with Blocksize {:5?}:", blocksize)); // Iterate for the given number of iterations // for _ in (0..iterations) { for _ in (0..iterations).progress_with(pb) { // pb.inc(1); // Take a timestamp for timemeasurement later on let now = Instant::now(); sleep(Duration::from_millis(1)); // Save the elapsed time for later evaluation elapsed[pos] += now.elapsed(); } // pb.finish_using_style(); } }