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