summaryrefslogtreecommitdiffstats
path: root/vendor/icu_locid/benches/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/icu_locid/benches/helpers')
-rw-r--r--vendor/icu_locid/benches/helpers/macros.rs110
-rw-r--r--vendor/icu_locid/benches/helpers/mod.rs17
2 files changed, 127 insertions, 0 deletions
diff --git a/vendor/icu_locid/benches/helpers/macros.rs b/vendor/icu_locid/benches/helpers/macros.rs
new file mode 100644
index 000000000..848a360c4
--- /dev/null
+++ b/vendor/icu_locid/benches/helpers/macros.rs
@@ -0,0 +1,110 @@
+// 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 ).
+
+#[macro_export]
+macro_rules! overview {
+ ($c:expr, $struct:ident, $data_str:expr, $compare:expr) => {
+ $c.bench_function("overview", |b| {
+ b.iter(|| {
+ let mut values = vec![];
+ for s in $data_str {
+ let value: Result<$struct, _> = black_box(s).parse();
+ values.push(value.expect("Parsing failed"));
+ }
+ let _ = values
+ .iter()
+ .filter(|&v| v.normalizing_eq($compare))
+ .count();
+
+ values
+ .iter()
+ .map(|v| v.to_string())
+ .collect::<Vec<String>>()
+ })
+ });
+ };
+}
+
+#[macro_export]
+macro_rules! construct {
+ ($c:expr, $struct:ident, $struct_name:expr, $data_str:expr) => {
+ $c.bench_function($struct_name, |b| {
+ b.iter(|| {
+ for s in $data_str {
+ let _: Result<$struct, _> = black_box(s).parse();
+ }
+ })
+ });
+ };
+}
+
+#[macro_export]
+macro_rules! to_string {
+ ($c:expr, $struct:ident, $struct_name:expr, $data:expr) => {
+ $c.bench_function($struct_name, |b| {
+ b.iter(|| {
+ for s in $data {
+ let _ = black_box(s).to_string();
+ }
+ })
+ });
+ $c.bench_function(std::concat!($struct_name, "/writeable"), |b| {
+ use writeable::Writeable;
+ b.iter(|| {
+ for s in $data {
+ let _ = black_box(s).write_to_string();
+ }
+ })
+ });
+ };
+}
+
+#[macro_export]
+macro_rules! compare_struct {
+ ($c:expr, $struct:ident, $struct_name:expr, $data1:expr, $data2:expr) => {
+ $c.bench_function(BenchmarkId::new("struct", $struct_name), |b| {
+ b.iter(|| {
+ for (lid1, lid2) in $data1.iter().zip($data2.iter()) {
+ let _ = black_box(lid1) == black_box(lid2);
+ }
+ })
+ });
+ };
+}
+
+#[macro_export]
+macro_rules! compare_str {
+ ($c:expr, $struct:ident, $struct_name:expr, $data1:expr, $data2:expr) => {
+ $c.bench_function(BenchmarkId::new("str", $struct_name), |b| {
+ b.iter(|| {
+ for (lid, s) in $data1.iter().zip($data2.iter()) {
+ let _ = black_box(lid).normalizing_eq(&black_box(s));
+ }
+ })
+ });
+ $c.bench_function(BenchmarkId::new("strict_cmp", $struct_name), |b| {
+ b.iter(|| {
+ for (lid, s) in $data1.iter().zip($data2.iter()) {
+ let _ = black_box(lid).strict_cmp(&black_box(s).as_str().as_bytes());
+ }
+ })
+ });
+ };
+}
+
+#[macro_export]
+macro_rules! canonicalize {
+ ($c:expr, $struct:ident, $struct_name:expr, $data:expr) => {
+ $c.bench_function($struct_name, |b| {
+ b.iter(|| {
+ for s in $data {
+ let _ = black_box(s).to_string();
+ }
+ for s in $data {
+ let _ = $struct::canonicalize(black_box(s));
+ }
+ })
+ });
+ };
+}
diff --git a/vendor/icu_locid/benches/helpers/mod.rs b/vendor/icu_locid/benches/helpers/mod.rs
new file mode 100644
index 000000000..27e455f7b
--- /dev/null
+++ b/vendor/icu_locid/benches/helpers/mod.rs
@@ -0,0 +1,17 @@
+// 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 ).
+
+mod macros;
+
+use std::fs::File;
+use std::io::{BufReader, Error};
+
+pub fn read_fixture<T>(path: &str) -> Result<T, Error>
+where
+ T: serde::de::DeserializeOwned,
+{
+ let file = File::open(path)?;
+ let reader = BufReader::new(file);
+ Ok(serde_json::from_reader(reader)?)
+}