1 // cargo bench
2 
3 #![feature(test)]
4 #![allow(
5     clippy::approx_constant,
6     clippy::excessive_precision,
7     clippy::unreadable_literal
8 )]
9 
10 extern crate test;
11 
12 use std::io::Write;
13 use std::{f32, f64};
14 use test::{black_box, Bencher};
15 
16 macro_rules! benches {
17     ($($name:ident($value:expr),)*) => {
18         mod bench_ryu {
19             use super::*;
20             $(
21                 #[bench]
22                 fn $name(b: &mut Bencher) {
23                     let mut buf = ryu::Buffer::new();
24 
25                     b.iter(move || {
26                         let value = black_box($value);
27                         let formatted = buf.format_finite(value);
28                         black_box(formatted);
29                     });
30                 }
31             )*
32         }
33 
34         mod bench_std_fmt {
35             use super::*;
36             $(
37                 #[bench]
38                 fn $name(b: &mut Bencher) {
39                     let mut buf = Vec::with_capacity(20);
40 
41                     b.iter(|| {
42                         buf.clear();
43                         let value = black_box($value);
44                         write!(&mut buf, "{}", value).unwrap();
45                         black_box(buf.as_slice());
46                     });
47                 }
48             )*
49         }
50     };
51 }
52 
53 benches! {
54     bench_0_f64(0f64),
55     bench_short_f64(0.1234f64),
56     bench_e_f64(2.718281828459045f64),
57     bench_max_f64(f64::MAX),
58     bench_0_f32(0f32),
59     bench_short_f32(0.1234f32),
60     bench_e_f32(2.718281828459045f32),
61     bench_max_f32(f32::MAX),
62 }
63