use std::io::Write;
use std::time::Instant;
use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};

const ITERATIONS: u32 = 1000;

pub fn time<T>(name: &'static str, function: impl Fn() -> T) {
    let begin = Instant::now();
    for _ in 0..ITERATIONS {
        let _ = function();
    }
    let micros = (begin.elapsed() / ITERATIONS).as_micros();
    let mode = ["release", "debug"][cfg!(debug_assertions) as usize];
    let mut writer = StandardStream::stderr(ColorChoice::Auto);
    let _ = writer.set_color(ColorSpec::new().set_fg(Some(Color::Magenta)));
    let _ = writeln!(&mut writer, "{} in {} mode: {} micros", name, mode, micros);
}