summaryrefslogtreecommitdiffstats
path: root/vendor/tinystr/benches/construct.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/tinystr/benches/construct.rs')
-rw-r--r--vendor/tinystr/benches/construct.rs154
1 files changed, 154 insertions, 0 deletions
diff --git a/vendor/tinystr/benches/construct.rs b/vendor/tinystr/benches/construct.rs
new file mode 100644
index 000000000..a93fce8f6
--- /dev/null
+++ b/vendor/tinystr/benches/construct.rs
@@ -0,0 +1,154 @@
+use criterion::black_box;
+use criterion::criterion_group;
+use criterion::criterion_main;
+use criterion::Bencher;
+use criterion::Criterion;
+use criterion::Fun;
+
+use tinystr::{TinyStr16, TinyStr4, TinyStr8, TinyStrAuto};
+
+static STRINGS_4: &[&str] = &[
+ "US", "GB", "AR", "Hans", "CN", "AT", "PL", "FR", "AT", "Cyrl", "SR", "NO", "FR", "MK", "UK",
+];
+
+static STRINGS_8: &[&str] = &[
+ "Latn", "windows", "AR", "Hans", "macos", "AT", "pl", "FR", "en", "Cyrl", "SR", "NO", "419",
+ "und", "UK",
+];
+
+static STRINGS_16: &[&str] = &[
+ "Latn",
+ "windows",
+ "AR",
+ "Hans",
+ "macos",
+ "AT",
+ "infiniband",
+ "FR",
+ "en",
+ "Cyrl",
+ "FromIntegral",
+ "NO",
+ "419",
+ "MacintoshOSX2019",
+ "UK",
+];
+
+macro_rules! bench_block {
+ ($c:expr, $name:expr, $action:ident) => {
+ let funcs = vec![
+ Fun::new("String", $action!(String)),
+ Fun::new("TinyStr4", $action!(TinyStr4)),
+ Fun::new("TinyStr8", $action!(TinyStr8)),
+ Fun::new("TinyStr16", $action!(TinyStr16)),
+ Fun::new("TinyStrAuto", $action!(TinyStrAuto)),
+ ];
+
+ $c.bench_functions(&format!("{}/4", $name), funcs, STRINGS_4);
+
+ let funcs = vec![
+ Fun::new("String", $action!(String)),
+ Fun::new("TinyStr8", $action!(TinyStr8)),
+ Fun::new("TinyStr16", $action!(TinyStr16)),
+ Fun::new("TinyStrAuto", $action!(TinyStrAuto)),
+ ];
+
+ $c.bench_functions(&format!("{}/8", $name), funcs, STRINGS_8);
+
+ let funcs = vec![
+ Fun::new("String", $action!(String)),
+ Fun::new("TinyStr16", $action!(TinyStr16)),
+ Fun::new("TinyStrAuto", $action!(TinyStrAuto)),
+ ];
+
+ $c.bench_functions(&format!("{}/16", $name), funcs, STRINGS_16);
+ };
+}
+
+fn construct_from_str(c: &mut Criterion) {
+ macro_rules! cfs {
+ ($r:ty) => {
+ |b: &mut Bencher, strings: &&[&str]| {
+ b.iter(|| {
+ for s in *strings {
+ 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) => {
+ |b, inputs: &&[&str]| {
+ 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 funcs = vec![
+ Fun::new("TinyStr4", cfu!(TinyStr4)),
+ Fun::new("TinyStr8", cfu!(TinyStr8)),
+ Fun::new("TinyStr16", cfu!(TinyStr16)),
+ ];
+
+ c.bench_functions("construct_from_bytes/4", funcs, STRINGS_4);
+
+ let funcs = vec![
+ Fun::new("TinyStr8", cfu!(TinyStr8)),
+ Fun::new("TinyStr16", cfu!(TinyStr16)),
+ ];
+
+ c.bench_functions("construct_from_bytes/8", funcs, STRINGS_8);
+
+ let funcs = vec![Fun::new("TinyStr16", cfu!(TinyStr16))];
+
+ c.bench_functions("construct_from_bytes/16", funcs, STRINGS_16);
+}
+
+fn construct_unchecked(c: &mut Criterion) {
+ macro_rules! cu {
+ ($tty:ty, $rty:ty) => {
+ |b, inputs: &&[&str]| {
+ let raw: Vec<$rty> = inputs
+ .iter()
+ .map(|s| s.parse::<$tty>().unwrap().into())
+ .collect();
+ b.iter(move || {
+ for num in &raw {
+ let _ = unsafe { <$tty>::new_unchecked(black_box(*num)) };
+ }
+ })
+ }
+ };
+ };
+
+ let funcs = vec![Fun::new("TinyStr4", cu!(TinyStr4, u32))];
+
+ c.bench_functions("construct_unchecked/4", funcs, STRINGS_4);
+
+ let funcs = vec![Fun::new("TinyStr8", cu!(TinyStr8, u64))];
+
+ c.bench_functions("construct_unchecked/8", funcs, STRINGS_8);
+
+ let funcs = vec![Fun::new("TinyStr16", cu!(TinyStr16, u128))];
+
+ c.bench_functions("construct_unchecked/16", funcs, STRINGS_16);
+}
+
+criterion_group!(
+ benches,
+ construct_from_str,
+ construct_from_bytes,
+ construct_unchecked,
+);
+criterion_main!(benches);