1 #include <benchmark/benchmark.h>
2 #include <rapidfuzz/fuzz.hpp>
3 #include <string>
4 #include <vector>
5 
6 using rapidfuzz::fuzz::ratio;
7 using rapidfuzz::fuzz::partial_ratio;
8 using rapidfuzz::fuzz::token_sort_ratio;
9 using rapidfuzz::fuzz::partial_token_sort_ratio;
10 using rapidfuzz::fuzz::token_set_ratio;
11 using rapidfuzz::fuzz::partial_token_set_ratio;
12 using rapidfuzz::fuzz::token_ratio;
13 using rapidfuzz::fuzz::partial_token_ratio;
14 using rapidfuzz::fuzz::WRatio;
15 
BM_FuzzRatio1(benchmark::State & state)16 static void BM_FuzzRatio1(benchmark::State &state) {
17   std::wstring a = L"aaaaa aaaaa";
18   for (auto _ : state) {
19     benchmark::DoNotOptimize(ratio(a, a));
20   }
21   state.SetLabel("Similar Strings");
22 }
23 
BM_FuzzRatio2(benchmark::State & state)24 static void BM_FuzzRatio2(benchmark::State &state) {
25   std::wstring a = L"aaaaa aaaaa";
26   std::wstring b = L"bbbbb bbbbb";
27   for (auto _ : state) {
28     benchmark::DoNotOptimize(ratio(a, b));
29   }
30   state.SetLabel("Different Strings");
31 }
32 
33 BENCHMARK(BM_FuzzRatio1);
34 BENCHMARK(BM_FuzzRatio2);
35 
36 
BM_FuzzPartialRatio1(benchmark::State & state)37 static void BM_FuzzPartialRatio1(benchmark::State &state) {
38   std::wstring a = L"aaaaa aaaaa";
39   for (auto _ : state) {
40     benchmark::DoNotOptimize(partial_ratio(a, a));
41   }
42   state.SetLabel("Similar Strings");
43 }
44 
BM_FuzzPartialRatio2(benchmark::State & state)45 static void BM_FuzzPartialRatio2(benchmark::State &state) {
46   std::wstring a = L"aaaaa aaaaa";
47   std::wstring b = L"bbbbb bbbbb";
48   for (auto _ : state) {
49     benchmark::DoNotOptimize(partial_ratio(a, b));
50   }
51   state.SetLabel("Different Strings");
52 }
53 
54 BENCHMARK(BM_FuzzPartialRatio1);
55 BENCHMARK(BM_FuzzPartialRatio2);
56 
BM_FuzzTokenSort1(benchmark::State & state)57 static void BM_FuzzTokenSort1(benchmark::State &state) {
58   std::wstring a = L"aaaaa aaaaa";
59   for (auto _ : state) {
60     benchmark::DoNotOptimize(token_sort_ratio(a, a));
61   }
62   state.SetLabel("Similar Strings");
63 }
64 
BM_FuzzTokenSort2(benchmark::State & state)65 static void BM_FuzzTokenSort2(benchmark::State &state) {
66   std::wstring a = L"aaaaa aaaaa";
67   std::wstring b = L"bbbbb bbbbb";
68   for (auto _ : state) {
69     benchmark::DoNotOptimize(token_sort_ratio(a, b));
70   }
71   state.SetLabel("Different Strings");
72 }
73 
74 BENCHMARK(BM_FuzzTokenSort1);
75 BENCHMARK(BM_FuzzTokenSort2);
76 
BM_FuzzPartialTokenSort1(benchmark::State & state)77 static void BM_FuzzPartialTokenSort1(benchmark::State &state) {
78   std::wstring a = L"aaaaa aaaaa";
79   for (auto _ : state) {
80     benchmark::DoNotOptimize(partial_token_sort_ratio(a, a));
81   }
82   state.SetLabel("Similar Strings");
83 }
84 
BM_FuzzPartialTokenSort2(benchmark::State & state)85 static void BM_FuzzPartialTokenSort2(benchmark::State &state) {
86   std::wstring a = L"aaaaa aaaaa";
87   std::wstring b = L"bbbbb bbbbb";
88   for (auto _ : state) {
89     benchmark::DoNotOptimize(partial_token_sort_ratio(a, b));
90   }
91   state.SetLabel("Different Strings");
92 }
93 
94 BENCHMARK(BM_FuzzPartialTokenSort1);
95 BENCHMARK(BM_FuzzPartialTokenSort2);
96 
97 
BM_FuzzTokenSet1(benchmark::State & state)98 static void BM_FuzzTokenSet1(benchmark::State &state) {
99   std::wstring a = L"aaaaa aaaaa";
100   for (auto _ : state) {
101     benchmark::DoNotOptimize(token_set_ratio(a, a));
102   }
103   state.SetLabel("Similar Strings");
104 }
105 
BM_FuzzTokenSet2(benchmark::State & state)106 static void BM_FuzzTokenSet2(benchmark::State &state) {
107   std::wstring a = L"aaaaa aaaaa";
108   std::wstring b = L"bbbbb bbbbb";
109   for (auto _ : state) {
110     benchmark::DoNotOptimize(token_set_ratio(a, b));
111   }
112   state.SetLabel("Different Strings");
113 }
114 
115 BENCHMARK(BM_FuzzTokenSet1);
116 BENCHMARK(BM_FuzzTokenSet2);
117 
118 
BM_FuzzPartialTokenSet1(benchmark::State & state)119 static void BM_FuzzPartialTokenSet1(benchmark::State &state) {
120   std::wstring a = L"aaaaa aaaaa";
121   for (auto _ : state) {
122     benchmark::DoNotOptimize(partial_token_set_ratio(a, a));
123   }
124   state.SetLabel("Similar Strings");
125 }
126 
BM_FuzzPartialTokenSet2(benchmark::State & state)127 static void BM_FuzzPartialTokenSet2(benchmark::State &state) {
128   std::wstring a = L"aaaaa aaaaa";
129   std::wstring b = L"bbbbb bbbbb";
130   for (auto _ : state) {
131     benchmark::DoNotOptimize(partial_token_set_ratio(a, b));
132   }
133   state.SetLabel("Different Strings");
134 }
135 
136 BENCHMARK(BM_FuzzPartialTokenSet1);
137 BENCHMARK(BM_FuzzPartialTokenSet2);
138 
139 
BM_FuzzToken1(benchmark::State & state)140 static void BM_FuzzToken1(benchmark::State &state) {
141   std::wstring a = L"aaaaa aaaaa";
142   for (auto _ : state) {
143     benchmark::DoNotOptimize(token_ratio(a, a));
144   }
145   state.SetLabel("Similar Strings");
146 }
147 
BM_FuzzToken2(benchmark::State & state)148 static void BM_FuzzToken2(benchmark::State &state) {
149   std::wstring a = L"aaaaa aaaaa";
150   std::wstring b = L"bbbbb bbbbb";
151   for (auto _ : state) {
152     benchmark::DoNotOptimize(token_ratio(a, b));
153   }
154   state.SetLabel("Different Strings");
155 }
156 
157 BENCHMARK(BM_FuzzToken1);
158 BENCHMARK(BM_FuzzToken2);
159 
160 
BM_FuzzPartialToken1(benchmark::State & state)161 static void BM_FuzzPartialToken1(benchmark::State &state) {
162   std::wstring a = L"aaaaa aaaaa";
163   for (auto _ : state) {
164     benchmark::DoNotOptimize(partial_token_ratio(a, a));
165   }
166   state.SetLabel("Similar Strings");
167 }
168 
BM_FuzzPartialToken2(benchmark::State & state)169 static void BM_FuzzPartialToken2(benchmark::State &state) {
170   std::wstring a = L"aaaaa aaaaa";
171   std::wstring b = L"bbbbb bbbbb";
172   for (auto _ : state) {
173     benchmark::DoNotOptimize(partial_token_ratio(a, b));
174   }
175   state.SetLabel("Different Strings");
176 }
177 
178 BENCHMARK(BM_FuzzPartialToken1);
179 BENCHMARK(BM_FuzzPartialToken2);
180 
181 
BM_FuzzWRatio1(benchmark::State & state)182 static void BM_FuzzWRatio1(benchmark::State &state) {
183   std::wstring a = L"aaaaa aaaaa";
184   for (auto _ : state) {
185     benchmark::DoNotOptimize(WRatio(a, a));
186   }
187   state.SetLabel("Similar Strings");
188 }
189 
BM_FuzzWRatio3(benchmark::State & state)190 static void BM_FuzzWRatio3(benchmark::State &state) {
191   std::wstring a = L"aaaaa aaaaa";
192   std::wstring b = L"bbbbb bbbbb";
193   for (auto _ : state) {
194     benchmark::DoNotOptimize(WRatio(a, b));
195   }
196   state.SetLabel("Different Strings");
197 }
198 
BM_FuzzWRatio2(benchmark::State & state)199 static void BM_FuzzWRatio2(benchmark::State &state) {
200   std::wstring a = L"aaaaa b";
201   std::wstring b = L"bbbbb bbbbbbbbb";
202   for (auto _ : state) {
203     benchmark::DoNotOptimize(WRatio(a, b));
204   }
205   state.SetLabel("Different length Strings");
206 }
207 
208 BENCHMARK(BM_FuzzWRatio1);
209 BENCHMARK(BM_FuzzWRatio2);
210 BENCHMARK(BM_FuzzWRatio3);
211 
212 
213 BENCHMARK_MAIN();
214