| // This file is part of ICU4X. For terms of use, please see the file |
| // called LICENSE at the top level of the ICU4X source tree |
| // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). |
| |
| // This file was adapted from https://github.com/zbraniecki/tinystr |
| |
| mod common; |
| use common::*; |
| |
| use criterion::black_box; |
| use criterion::criterion_group; |
| use criterion::criterion_main; |
| use criterion::Bencher; |
| use criterion::Criterion; |
| |
| use tinystr::TinyAsciiStr; |
| |
| fn construct_from_str(c: &mut Criterion) { |
| macro_rules! cfs { |
| ($r:ty, $inputs:expr) => { |
| |b: &mut Bencher| { |
| b.iter(|| { |
| for s in $inputs { |
| let _: $r = black_box(s.parse().unwrap()); |
| } |
| }) |
| } |
| }; |
| } |
| |
| bench_block!(c, "construct_from_str", cfs); |
| } |
| |
| fn construct_from_bytes(c: &mut Criterion) { |
| macro_rules! cfu { |
| ($r:ty, $inputs:expr) => { |
| |b| { |
| let raw: Vec<&[u8]> = $inputs.iter().map(|s| s.as_bytes()).collect(); |
| b.iter(move || { |
| for u in &raw { |
| let _ = black_box(<$r>::from_bytes(*u).unwrap()); |
| } |
| }) |
| } |
| }; |
| } |
| |
| let mut group4 = c.benchmark_group("construct_from_bytes/4"); |
| group4.bench_function("TinyAsciiStr<4>", cfu!(TinyAsciiStr<4>, STRINGS_4)); |
| group4.bench_function("TinyAsciiStr<8>", cfu!(TinyAsciiStr<8>, STRINGS_4)); |
| group4.bench_function("TinyAsciiStr<16>", cfu!(TinyAsciiStr<16>, STRINGS_4)); |
| group4.finish(); |
| |
| let mut group8 = c.benchmark_group("construct_from_bytes/8"); |
| group8.bench_function("TinyAsciiStr<8>", cfu!(TinyAsciiStr<8>, STRINGS_8)); |
| group8.bench_function("TinyAsciiStr<16>", cfu!(TinyAsciiStr<16>, STRINGS_8)); |
| group8.finish(); |
| |
| let mut group16 = c.benchmark_group("construct_from_bytes/16"); |
| group16.bench_function("TinyAsciiStr<16>", cfu!(TinyAsciiStr<16>, STRINGS_16)); |
| group16.finish(); |
| } |
| |
| criterion_group!(benches, construct_from_str, construct_from_bytes,); |
| criterion_main!(benches); |