use std::collections::HashMap;
use std::time::{Duration, Instant};
fn timer(f: impl FnOnce()) -> Duration {
let start = Instant::now();
f();
start.elapsed()
}
type HeavyObject = HashMap<usize, Vec<usize>>;
const NUM_ELEMENTS: usize = 1000000;
fn make_heavy_object() -> HeavyObject {
(1..=NUM_ELEMENTS).map(|v| (v, vec![v])).collect()
}
fn main() {
println!("Allocating a heavy object");
let first_heavy_object = make_heavy_object();
println!("Duplicating that heavy object");
let second_heavy_object = first_heavy_object.clone();
let dropper = dropout::new_dropper();
let dropper_clone = dropper.clone();
let dropout_timer = timer(move || dropper_clone.dropout(first_heavy_object));
let std_timer = timer(move || drop(second_heavy_object));
println!("Duration of dropout: {:?}", dropout_timer);
println!("Duration of std drop: {:?}", std_timer);
}