use std::fs; use bencher::{benchmark_group, benchmark_main, Bencher}; #[cfg(unix)] const TEXT_PATH: &str = "benches/data/vgilante.txt"; #[cfg(windows)] const TEXT_PATH: &str = r"benches\data\vgilante.txt"; macro_rules! benchmark_impl { ($g:ident, $f:ident, $f_to_string:ident, $f_to_writer:ident) => { fn $f(bencher: &mut Bencher) { let text = fs::read_to_string(TEXT_PATH).unwrap(); let length = text.len(); bencher.iter(|| html_escape::$f(text.as_str())); bencher.bytes = length as u64; } fn $f_to_string(bencher: &mut Bencher) { let text = fs::read_to_string(TEXT_PATH).unwrap(); let length = text.len(); bencher.iter(|| { let mut s = String::new(); html_escape::$f_to_string(text.as_str(), &mut s); s }); bencher.bytes = length as u64; } fn $f_to_writer(bencher: &mut Bencher) { let text = fs::read_to_string(TEXT_PATH).unwrap(); let length = text.len(); bencher.iter(|| { let mut v = Vec::new(); html_escape::$f_to_writer(text.as_str(), &mut v).unwrap(); v }); bencher.bytes = length as u64; } benchmark_group!($g, $f, $f_to_string, $f_to_writer); }; } benchmark_impl!( text_minimal, encode_text_minimal, encode_text_minimal_to_string, encode_text_minimal_to_writer ); benchmark_impl!(text, encode_text, encode_text_to_string, encode_text_to_writer); benchmark_impl!( double_quoted_attribute, encode_double_quoted_attribute, encode_double_quoted_attribute_to_string, encode_double_quoted_attribute_to_writer ); benchmark_impl!( single_quoted_attribute, encode_single_quoted_attribute, encode_single_quoted_attribute_to_string, encode_single_quoted_attribute_to_writer ); benchmark_impl!( quoted_attribute, encode_quoted_attribute, encode_quoted_attribute_to_string, encode_quoted_attribute_to_writer ); benchmark_impl!( unquoted_attribute, encode_unquoted_attribute, encode_unquoted_attribute_to_string, encode_unquoted_attribute_to_writer ); benchmark_impl!(safe, encode_safe, encode_safe_to_string, encode_safe_to_writer); benchmark_impl!(script, encode_script, encode_script_to_string, encode_script_to_writer); benchmark_impl!( script_single_quoted_text, encode_script_single_quoted_text, encode_script_single_quoted_text_to_string, encode_script_single_quoted_text_to_writer ); benchmark_impl!( script_double_quoted_text, encode_script_double_quoted_text, encode_script_double_quoted_text_to_string, encode_script_double_quoted_text_to_writer ); benchmark_impl!( script_quoted_text, encode_script_quoted_text, encode_script_quoted_text_to_string, encode_script_quoted_text_to_writer ); benchmark_impl!(style, encode_style, encode_style_to_string, encode_style_to_writer); benchmark_impl!( style_single_quoted_text, encode_style_single_quoted_text, encode_style_single_quoted_text_to_string, encode_style_single_quoted_text_to_writer ); benchmark_impl!( style_double_quoted_text, encode_style_double_quoted_text, encode_style_double_quoted_text_to_string, encode_style_double_quoted_text_to_writer ); benchmark_impl!( style_quoted_text, encode_style_quoted_text, encode_style_quoted_text_to_string, encode_style_quoted_text_to_writer ); benchmark_main!( text_minimal, text, double_quoted_attribute, single_quoted_attribute, quoted_attribute, unquoted_attribute, safe, script, script_single_quoted_text, script_double_quoted_text, script_quoted_text, style, style_single_quoted_text, style_double_quoted_text, style_quoted_text, );