11
11
#include " osrm/status.hpp"
12
12
13
13
#include < boost/assert.hpp>
14
-
14
+ # include < cstdlib >
15
15
#include < exception>
16
16
#include < iostream>
17
+ #include < optional>
18
+ #include < stdexcept>
17
19
#include < string>
18
20
#include < utility>
19
21
20
- #include < cstdlib>
21
-
22
22
int main (int argc, const char *argv[])
23
23
try
24
24
{
@@ -214,29 +214,54 @@ try
214
214
params.coordinates .push_back (
215
215
FloatCoordinate{FloatLongitude{7.415342330932617 }, FloatLatitude{43.733251335381205 }});
216
216
217
- TIMER_START (routes);
218
- auto NUM = 100 ;
219
- for (int i = 0 ; i < NUM; ++i)
217
+ auto run_benchmark = [&](std::optional<double > radiusInMeters)
220
218
{
221
- engine::api::ResultT result = json::Object ();
222
- const auto rc = osrm.Match (params, result);
223
- auto &json_result = result.get <json::Object>();
224
- if (rc != Status::Ok ||
225
- json_result.values .at (" matchings" ).get <json::Array>().values .size () != 1 )
219
+ params.radiuses = {};
220
+ if (radiusInMeters)
221
+ {
222
+ for (size_t index = 0 ; index < params.coordinates .size (); ++index)
223
+ {
224
+ params.radiuses .emplace_back (*radiusInMeters);
225
+ }
226
+ }
227
+
228
+ TIMER_START (routes);
229
+ auto NUM = 100 ;
230
+ for (int i = 0 ; i < NUM; ++i)
226
231
{
227
- return EXIT_FAILURE;
232
+ engine::api::ResultT result = json::Object ();
233
+ const auto rc = osrm.Match (params, result);
234
+ auto &json_result = result.get <json::Object>();
235
+ if (rc != Status::Ok ||
236
+ json_result.values .at (" matchings" ).get <json::Array>().values .size () != 1 )
237
+ {
238
+ throw std::runtime_error{" Couldn't match" };
239
+ }
228
240
}
241
+ TIMER_STOP (routes);
242
+ if (radiusInMeters)
243
+ {
244
+ std::cout << " Radius " << *radiusInMeters << " m: " << std::endl;
245
+ }
246
+ else
247
+ {
248
+ std::cout << " Default radius: " << std::endl;
249
+ }
250
+ std::cout << (TIMER_MSEC (routes) / NUM) << " ms/req at " << params.coordinates .size ()
251
+ << " coordinate" << std::endl;
252
+ std::cout << (TIMER_MSEC (routes) / NUM / params.coordinates .size ()) << " ms/coordinate"
253
+ << std::endl;
254
+ };
255
+
256
+ for (auto radius : std::vector<std::optional<double >>{std::nullopt, 5.0 , 10.0 , 15.0 , 30.0 })
257
+ {
258
+ run_benchmark (radius);
229
259
}
230
- TIMER_STOP (routes);
231
- std::cout << (TIMER_MSEC (routes) / NUM) << " ms/req at " << params.coordinates .size ()
232
- << " coordinate" << std::endl;
233
- std::cout << (TIMER_MSEC (routes) / NUM / params.coordinates .size ()) << " ms/coordinate"
234
- << std::endl;
235
260
236
261
return EXIT_SUCCESS;
237
262
}
238
263
catch (const std::exception &e)
239
264
{
240
265
std::cerr << " Error: " << e.what () << std::endl;
241
266
return EXIT_FAILURE;
242
- }
267
+ }
0 commit comments