use std::{time::{Instant, Duration}};
use chrono::prelude::*;
pub fn benchmark(function: fn(), iterations: u128 , verbose:bool){
let mut min:u128=0;
let mut max:u128=0;
let mut aco:u128=0;
println!("\nStarting benchmark {:?}",Utc::now());
for i in 1..iterations+1{
let start = Instant::now();
function();
let duration = start.elapsed().as_nanos();
if i == 1{
max = duration;
min = duration;
aco = duration;
}
else{
if max < duration{
max = duration;
}
if min > duration{
min = duration;
}
aco += duration;
}
if verbose{
println!("Iteration {:0?} time elapsed Min:{:1?} Avg:{:2?} - Max:{:3?} duration:{:4?}", i,min,aco/i,max,duration);
}
}
println!("Time result Min:{:0?} Avg:{:1?} Max:{:2?} Iterations:{}", min,aco/iterations,max,iterations);
println!("End benchmark {:?}\n",Utc::now());
}