• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 #[macro_export]
6 macro_rules! overview {
7     ($c:expr, $struct:ident, $data_str:expr, $compare:expr) => {
8         $c.bench_function("overview", |b| {
9             b.iter(|| {
10                 let mut values = vec![];
11                 for s in $data_str {
12                     let value: Result<$struct, _> = black_box(s).parse();
13                     values.push(value.expect("Parsing failed"));
14                 }
15                 let _ = values
16                     .iter()
17                     .filter(|&v| v.normalizing_eq($compare))
18                     .count();
19 
20                 values
21                     .iter()
22                     .map(|v| v.to_string())
23                     .collect::<Vec<String>>()
24             })
25         });
26     };
27 }
28 
29 #[macro_export]
30 macro_rules! construct {
31     ($c:expr, $struct:ident, $struct_name:expr, $data_str:expr) => {
32         $c.bench_function($struct_name, |b| {
33             b.iter(|| {
34                 for s in $data_str {
35                     let _: Result<$struct, _> = black_box(s).parse();
36                 }
37             })
38         });
39     };
40 }
41 
42 #[macro_export]
43 macro_rules! to_string {
44     ($c:expr, $struct:ident, $struct_name:expr, $data:expr) => {
45         $c.bench_function($struct_name, |b| {
46             b.iter(|| {
47                 for s in $data {
48                     let _ = black_box(s).to_string();
49                 }
50             })
51         });
52         $c.bench_function(std::concat!($struct_name, "/writeable"), |b| {
53             use writeable::Writeable;
54             b.iter(|| {
55                 for s in $data {
56                     let _ = black_box(s).write_to_string();
57                 }
58             })
59         });
60     };
61 }
62 
63 #[macro_export]
64 macro_rules! compare_struct {
65     ($c:expr, $struct:ident, $struct_name:expr, $data1:expr, $data2:expr) => {
66         $c.bench_function(BenchmarkId::new("struct", $struct_name), |b| {
67             b.iter(|| {
68                 for (lid1, lid2) in $data1.iter().zip($data2.iter()) {
69                     let _ = black_box(lid1) == black_box(lid2);
70                 }
71             })
72         });
73     };
74 }
75 
76 #[macro_export]
77 macro_rules! compare_str {
78     ($c:expr, $struct:ident, $struct_name:expr, $data1:expr, $data2:expr) => {
79         $c.bench_function(BenchmarkId::new("str", $struct_name), |b| {
80             b.iter(|| {
81                 for (lid, s) in $data1.iter().zip($data2.iter()) {
82                     let _ = black_box(lid).normalizing_eq(&black_box(s));
83                 }
84             })
85         });
86         $c.bench_function(BenchmarkId::new("strict_cmp", $struct_name), |b| {
87             b.iter(|| {
88                 for (lid, s) in $data1.iter().zip($data2.iter()) {
89                     let _ = black_box(lid).strict_cmp(&black_box(s).as_str().as_bytes());
90                 }
91             })
92         });
93     };
94 }
95 
96 #[macro_export]
97 macro_rules! canonicalize {
98     ($c:expr, $struct:ident, $struct_name:expr, $data:expr) => {
99         $c.bench_function($struct_name, |b| {
100             b.iter(|| {
101                 for s in $data {
102                     let _ = black_box(s).to_string();
103                 }
104                 for s in $data {
105                     let _ = $struct::normalize(black_box(s));
106                 }
107             })
108         });
109     };
110 }
111