#![feature(test)] extern crate test; use test::Bencher; use tlid::{Checked, Pool, UnChecked, Wrapping}; #[bench] fn checked_inc(b: &mut Bencher) { let mut pool = Pool::>::new_full(); b.iter(|| pool.next().unwrap()); } #[bench] fn unchecked_inc(b: &mut Bencher) { let mut pool = Pool::>::new_full(); b.iter(|| pool.next()); } #[bench] fn wraparound_inc(b: &mut Bencher) { let mut pool = Pool::>::new_full(); b.iter(|| pool.next()); } #[bench] fn subpool(b: &mut Bencher) { let mut pool = Pool::>::new_full(); b.iter(|| pool.subpool(1000000).unwrap()); } // cargo bench -- --nocapture #[bench] fn time_for_1_000_000_000_runs_checked(_b: &mut Bencher) { use std::time::Instant; let before = Instant::now(); // 1,000,000,000 runs { let mut pool = Pool::>::new_full(); for _ in 0..1000000000 { test::black_box(pool.next().unwrap()); } } // should take ca. 1.2 seconds let after = Instant::now(); let diff = after.duration_since(before); println!("diff: {}s", diff.as_millis() as f64 / 1000.0); } #[bench] fn time_for_1_000_000_000_runs_unchecked(_b: &mut Bencher) { use std::time::Instant; let before = Instant::now(); // 1,000,000,000 runs { let mut pool = Pool::>::new_full(); for _ in 0..1000000000 { test::black_box(pool.next()); } } // should take ca. 0.6 seconds let after = Instant::now(); let diff = after.duration_since(before); println!("diff: {}s", diff.as_millis() as f64 / 1000.0); }