1use serde::{Serialize, Deserialize};
2
3pub use bencher::Bencher;
4pub use bencher_macro::*;
5pub use track_allocator::TrackAllocator;
6
7mod timing_future;
8mod bencher;
9mod track_allocator;
10
11#[macro_export]
12macro_rules! new_allocator {
13 ($allocator:expr) => {
14 TrackAllocator {
15 allocator: $allocator,
16 counter: std::sync::atomic::AtomicUsize::new(0),
17 peak: std::sync::atomic::AtomicUsize::new(0)
18 };
19 };
20}
21
22#[derive(Debug, Serialize, Deserialize)]
23pub struct Stats {
24 pub times_average: usize,
25 pub times_min: usize,
26 pub times_max: usize,
27
28 pub mem_average: usize,
29 pub mem_min: usize,
30 pub mem_max: usize,
31}
32
33#[derive(Debug, Serialize, Deserialize)]
34pub struct Step {
35 time: u128,
36 mem: usize
37}
38
39impl From<&Vec<Step>> for Stats {
40 fn from(steps: &Vec<Step>) -> Self {
41 let count = steps.len();
42
43 let times = steps.iter().map(|step| step.time).collect::<Vec<u128>>();
44 let times_iter = times.iter();
45
46 let mem = steps.iter().map(|step| step.mem).collect::<Vec<usize>>();
47 let mem_iter = mem.iter();
48
49 Stats {
50 times_average: (times_iter.clone().sum::<u128>() / count as u128) as usize,
51 times_min: times_iter.clone().cloned().min().unwrap_or_default() as usize,
52 times_max: times_iter.clone().cloned().max().unwrap_or_default() as usize,
53 mem_average: mem_iter.clone().sum::<usize>() / count,
54 mem_min: mem_iter.clone().cloned().min().unwrap_or_default(),
55 mem_max: mem_iter.clone().cloned().max().unwrap_or_default()
56 }
57 }
58}
59fn fmt_thousands_sep(mut n: usize, sep: char) -> String {
61 use std::fmt::Write;
62 let mut output = String::new();
63 let mut trailing = false;
64 for &pow in &[9, 6, 3, 0] {
65 let base = 10_usize.pow(pow);
66 if pow == 0 || trailing || n / base != 0 {
67 if !trailing {
68 output.write_fmt(format_args!("{}", n / base)).unwrap();
69 } else {
70 output.write_fmt(format_args!("{:03}", n / base)).unwrap();
71 }
72 if pow != 0 {
73 output.push(sep);
74 }
75 trailing = true;
76 }
77 n %= base;
78 }
79
80 output
81}