//! Benchmarks written by bluss //! //! cf #[macro_use] extern crate criterion; use criterion::{Benchmark, Criterion, Throughput}; macro_rules! bench { ($name:ident, $path:expr) => { fn $name(c: &mut Criterion) { let bytes = include_bytes!($path); c.bench( stringify!($name), Benchmark::new("libcore", move |b| { b.iter(|| ::is_utf8::libcore::is_utf8(bytes)) }) .with_function("lemire_sse", move |b| { b.iter(|| ::is_utf8::lemire::sse::is_utf8(bytes)) }) .with_function("lemire_avx", move |b| { b.iter(|| ::is_utf8::lemire::avx::is_utf8(bytes)) }) .with_function("lemire_avx_ascii_path", move |b| { b.iter(|| ::is_utf8::lemire::avx::is_utf8_ascii_path(bytes)) }) .with_function("range_sse", move |b| { b.iter(|| ::is_utf8::range::sse::is_utf8(bytes)) }) .with_function("range_avx", move |b| { b.iter(|| ::is_utf8::range::avx::is_utf8(bytes)) }) .throughput(Throughput::Bytes(bytes.len() as u64)), ); } }; } bench!(random_bytes, "../props/random_bytes.bin"); bench!(mostly_ascii, "../props/mostly_ascii_sample_ok.txt"); bench!(ascii, "../props/ascii_sample_ok.txt"); bench!(utf8, "../props/utf8_sample_ok.txt"); bench!(all_utf8, "../props/utf8-characters-0-0x10ffff.txt"); bench!( all_utf8_with_garbage, "../props/utf8-characters-0-0x10ffff-with-garbage.bin" ); criterion_group!( benches, random_bytes, mostly_ascii, ascii, utf8, all_utf8, all_utf8_with_garbage ); criterion_main!(benches);