breezy_timer/
lib.rs

1pub use breezy_timer_lib::{TimerState, BreezyTimer, Timer};
2
3pub use cpu_time::ProcessTime;
4pub use std::collections::HashMap;
5
6
7#[cfg(all(test, feature="breezy_timer"))]
8mod tests {
9    use cpu_time::ProcessTime;
10    use criterion::black_box;
11    use std::collections::HashMap;
12    use breezy_timer_lib::{BreezyTimer, TimerState, Timer};
13
14    #[test]
15    fn check() {
16        let mut btimer = BreezyTimer::new();
17
18        let start = ProcessTime::now();
19        btimer.start("loop");
20
21        assert!(btimer.contains_key("loop"));
22        let mut total = 0;
23        for _ in 0..100 {
24            total += black_box(1);
25        }
26        black_box(total);
27        btimer.stop("loop");
28
29        let elapsed_ns = start.elapsed().as_nanos();
30
31        let elapsed_breezy = btimer.elapsed("loop");
32        assert!(elapsed_breezy.is_some());
33        let elapsed_breezy = elapsed_breezy.unwrap().as_nanos();
34
35        assert!(elapsed_breezy > 0);
36        assert!(elapsed_breezy < elapsed_ns);
37    }
38
39    #[test]
40    fn sanity_check(){
41        let mut btimer = BreezyTimer::new();
42
43        let mut vectors = Vec::new();
44
45        btimer.start("total");
46        for _ in 0..10 {
47            btimer.start("allocations");
48            let vec: Vec<u8> = (0..102400).map(|_| { rand::random::<u8>() }).collect();
49            vectors.push(vec);
50            btimer.stop("allocations");
51
52            btimer.start("sum");
53            let mut total = 0;
54            for v in vectors.iter() {
55                total += v.iter().map(|x| *x as u32).sum::<u32>();
56            }
57            // used so that compiler doesn't simply remove the loop because nothing is done with total
58            black_box(total);
59            btimer.stop("sum");
60        }
61        btimer.stop("total");
62        assert!(btimer.elapsed("allocations").unwrap() < btimer.elapsed("total").unwrap());
63        assert!(btimer.elapsed("sum").unwrap() < btimer.elapsed("total").unwrap())
64    }
65}
66
67#[cfg(all(test, not(feature="breezy_timer")))]
68mod tests {
69    use criterion::black_box;
70    use breezy_timer_lib::{BreezyTimer, Timer};
71
72    #[test]
73    fn check_no_feature() {
74        let mut btimer = BreezyTimer::new();
75        btimer.start("loop");
76        let mut total = 0;
77        for _ in 0..100 {
78            total += 1;
79        }
80        black_box(total);
81        btimer.stop("loop");
82        assert!(btimer.elapsed("loop").is_none());
83    }
84}