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