diff --git a/src/benchmarks/match.cpp b/src/benchmarks/match.cpp index caed1a00b..ab63de21f 100644 --- a/src/benchmarks/match.cpp +++ b/src/benchmarks/match.cpp @@ -12,13 +12,15 @@ #include +#include +#include #include #include +#include +#include #include #include -#include - int main(int argc, const char *argv[]) try { @@ -213,25 +215,54 @@ try FloatCoordinate{FloatLongitude{7.415513992309569}, FloatLatitude{43.73347615145474}}); params.coordinates.push_back( FloatCoordinate{FloatLongitude{7.415342330932617}, FloatLatitude{43.733251335381205}}); - - TIMER_START(routes); - auto NUM = 100; - for (int i = 0; i < NUM; ++i) + for (size_t index = 0; index < params.coordinates.size(); ++index) { - engine::api::ResultT result = json::Object(); - const auto rc = osrm.Match(params, result); - auto &json_result = result.get(); - if (rc != Status::Ok || - json_result.values.at("matchings").get().values.size() != 1) - { - return EXIT_FAILURE; - } + params.radiuses.emplace_back(); } - TIMER_STOP(routes); - std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size() - << " coordinate" << std::endl; - std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate" - << std::endl; + + auto run_benchmark = [&](std::optional radiusInMeters) + { + if (radiusInMeters) + { + for (auto &radius : params.radiuses) + { + radius = *radiusInMeters; + } + } + + TIMER_START(routes); + auto NUM = 100; + for (int i = 0; i < NUM; ++i) + { + engine::api::ResultT result = json::Object(); + const auto rc = osrm.Match(params, result); + auto &json_result = result.get(); + if (rc != Status::Ok || + json_result.values.at("matchings").get().values.size() != 1) + { + throw std::runtime_error{"Couldn't match"}; + } + } + TIMER_STOP(routes); + if (radiusInMeters) + { + std::cout << "Radius " << *radiusInMeters << "m: " << std::endl; + } + else + { + std::cout << "Default radius: " << std::endl; + } + std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size() + << " coordinate" << std::endl; + std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate" + << std::endl; + }; + + run_benchmark(std::nullopt); + run_benchmark(5.0); + run_benchmark(10.0); + run_benchmark(15.0); + run_benchmark(30.0); return EXIT_SUCCESS; } @@ -239,4 +270,4 @@ catch (const std::exception &e) { std::cerr << "Error: " << e.what() << std::endl; return EXIT_FAILURE; -} +} \ No newline at end of file