Documentation
pub fn rand_data(n: usize, range: std::ops::Range<i32>) -> Vec<i32> {
    use rand::Rng;
    use std::collections::HashSet;
    let mut rng = rand::thread_rng();
    let mut doc = HashSet::new();
    let mut data = Vec::new();
    while data.len() < n {
        let key = rng.gen_range(range.clone());
        if !doc.contains(&key) {
            doc.insert(key);
            data.push(key);
        }
    }
    data
}
pub fn repeat<F>(f: F, n: usize)
where
    F: Fn(),
{
    for _ in 0..n {
        f();
    }
}

pub fn timing<F>(f: F) -> std::time::Duration
where
    F: FnOnce(),
{
    let start = std::time::Instant::now();
    f();
    start.elapsed()
}