corsa 0.3.1

Production-oriented Rust bindings, orchestration layers, and Node integration for typescript-go
Documentation
use std::time::{Duration, Instant};

use corsa::{Result, fast::SmallVec};

use crate::stats::Stats;

pub async fn measure_with_warmup<F, Fut>(
    warmups: usize,
    iterations: usize,
    mut f: F,
) -> Result<Stats>
where
    F: FnMut() -> Fut,
    Fut: std::future::Future<Output = Result<()>>,
{
    let mut index = 0_usize;
    while index < warmups {
        f().await?;
        index += 1;
    }
    let mut samples = SmallVec::<[Duration; 32]>::new();
    let mut iteration = 0_usize;
    while iteration < iterations {
        let started = Instant::now();
        f().await?;
        samples.push(started.elapsed());
        iteration += 1;
    }
    Ok(Stats::from_samples(samples))
}