2016-03-16 07:42:26 -04:00
|
|
|
#include <boost/test/test_case_template.hpp>
|
2016-05-27 15:05:04 -04:00
|
|
|
#include <boost/test/unit_test.hpp>
|
2016-03-16 07:42:26 -04:00
|
|
|
|
2016-04-11 19:13:12 -04:00
|
|
|
#include "coordinates.hpp"
|
2016-03-24 16:02:55 -04:00
|
|
|
#include "fixture.hpp"
|
2016-04-13 17:07:24 -04:00
|
|
|
#include "waypoint_check.hpp"
|
2016-03-16 07:42:26 -04:00
|
|
|
|
|
|
|
#include "osrm/table_parameters.hpp"
|
|
|
|
|
|
|
|
#include "osrm/coordinate.hpp"
|
|
|
|
#include "osrm/engine_config.hpp"
|
|
|
|
#include "osrm/json_container.hpp"
|
|
|
|
#include "osrm/osrm.hpp"
|
2016-05-27 15:05:04 -04:00
|
|
|
#include "osrm/status.hpp"
|
2016-03-16 07:42:26 -04:00
|
|
|
|
|
|
|
BOOST_AUTO_TEST_SUITE(table)
|
|
|
|
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix)
|
|
|
|
{
|
|
|
|
using namespace osrm;
|
|
|
|
|
2017-03-21 06:27:15 -04:00
|
|
|
auto osrm = getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm");
|
2016-04-13 17:07:24 -04:00
|
|
|
|
|
|
|
TableParameters params;
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.sources.push_back(0);
|
|
|
|
params.destinations.push_back(2);
|
2018-04-20 18:18:55 -04:00
|
|
|
params.annotations = TableParameters::AnnotationsType::All;
|
2016-04-13 17:07:24 -04:00
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
engine::api::ResultT result = json::Object();
|
2016-04-13 17:07:24 -04:00
|
|
|
|
|
|
|
const auto rc = osrm.Table(params, result);
|
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
auto& json_result=result.get<json::Object>();
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK(rc == Status::Ok || rc == Status::Error);
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto code = json_result.values.at("code").get<json::String>().value;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(code, "Ok");
|
|
|
|
|
|
|
|
// check that returned durations error is expected size and proportions
|
|
|
|
// this test expects a 1x1 matrix
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &durations_array = json_result.values.at("durations").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(durations_array.size(), params.sources.size());
|
|
|
|
for (unsigned int i = 0; i < durations_array.size(); i++)
|
|
|
|
{
|
|
|
|
const auto durations_matrix = durations_array[i].get<json::Array>().values;
|
2016-05-27 15:05:04 -04:00
|
|
|
BOOST_CHECK_EQUAL(durations_matrix.size(),
|
|
|
|
params.sources.size() * params.destinations.size());
|
2016-04-13 17:07:24 -04:00
|
|
|
}
|
2018-04-20 18:18:55 -04:00
|
|
|
|
|
|
|
// check that returned distances error is expected size and proportions
|
|
|
|
// this test expects a 1x1 matrix
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &distances_array = json_result.values.at("distances").get<json::Array>().values;
|
2018-04-20 18:18:55 -04:00
|
|
|
BOOST_CHECK_EQUAL(distances_array.size(), params.sources.size());
|
|
|
|
for (unsigned int i = 0; i < distances_array.size(); i++)
|
|
|
|
{
|
|
|
|
const auto distances_matrix = distances_array[i].get<json::Array>().values;
|
|
|
|
BOOST_CHECK_EQUAL(distances_matrix.size(),
|
|
|
|
params.sources.size() * params.destinations.size());
|
|
|
|
}
|
|
|
|
|
2016-04-13 17:07:24 -04:00
|
|
|
// check destinations array of waypoint objects
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &destinations_array = json_result.values.at("destinations").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(destinations_array.size(), params.destinations.size());
|
|
|
|
for (const auto &destination : destinations_array)
|
|
|
|
{
|
|
|
|
BOOST_CHECK(waypoint_check(destination));
|
|
|
|
}
|
|
|
|
// check sources array of waypoint objects
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &sources_array = json_result.values.at("sources").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(sources_array.size(), params.sources.size());
|
|
|
|
for (const auto &source : sources_array)
|
|
|
|
{
|
|
|
|
BOOST_CHECK(waypoint_check(source));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_matrix)
|
2016-03-16 07:42:26 -04:00
|
|
|
{
|
2016-04-13 17:07:24 -04:00
|
|
|
using namespace osrm;
|
|
|
|
|
2017-03-21 06:27:15 -04:00
|
|
|
auto osrm = getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm");
|
2016-04-13 17:07:24 -04:00
|
|
|
|
|
|
|
TableParameters params;
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.sources.push_back(0);
|
2019-08-13 04:17:15 -04:00
|
|
|
engine::api::ResultT result = json::Object();
|
2016-04-13 17:07:24 -04:00
|
|
|
|
|
|
|
const auto rc = osrm.Table(params, result);
|
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
auto& json_result=result.get<json::Object>();
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK(rc == Status::Ok || rc == Status::Error);
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto code = json_result.values.at("code").get<json::String>().value;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(code, "Ok");
|
2016-04-11 19:13:12 -04:00
|
|
|
|
2016-04-13 17:07:24 -04:00
|
|
|
// check that returned durations error is expected size and proportions
|
|
|
|
// this test expects a 1x3 matrix
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &durations_array = json_result.values.at("durations").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(durations_array.size(), params.sources.size());
|
|
|
|
for (unsigned int i = 0; i < durations_array.size(); i++)
|
|
|
|
{
|
|
|
|
const auto durations_matrix = durations_array[i].get<json::Array>().values;
|
|
|
|
BOOST_CHECK_EQUAL(durations_matrix[i].get<json::Number>().value, 0);
|
2016-05-27 15:05:04 -04:00
|
|
|
BOOST_CHECK_EQUAL(durations_matrix.size(),
|
|
|
|
params.sources.size() * params.coordinates.size());
|
2016-04-13 17:07:24 -04:00
|
|
|
}
|
|
|
|
// check destinations array of waypoint objects
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &destinations_array = json_result.values.at("destinations").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(destinations_array.size(), params.coordinates.size());
|
|
|
|
for (const auto &destination : destinations_array)
|
|
|
|
{
|
|
|
|
BOOST_CHECK(waypoint_check(destination));
|
|
|
|
}
|
|
|
|
// check sources array of waypoint objects
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &sources_array = json_result.values.at("sources").get<json::Array>().values;
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK_EQUAL(sources_array.size(), params.sources.size());
|
|
|
|
for (const auto &source : sources_array)
|
|
|
|
{
|
|
|
|
BOOST_CHECK(waypoint_check(source));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(test_table_three_coordinates_matrix)
|
|
|
|
{
|
2016-03-16 07:42:26 -04:00
|
|
|
using namespace osrm;
|
|
|
|
|
2017-03-21 06:27:15 -04:00
|
|
|
auto osrm = getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm");
|
2016-03-16 07:42:26 -04:00
|
|
|
|
|
|
|
TableParameters params;
|
2016-04-11 19:13:12 -04:00
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
2018-04-20 18:18:55 -04:00
|
|
|
params.annotations = TableParameters::AnnotationsType::Duration;
|
2016-03-16 07:42:26 -04:00
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
engine::api::ResultT result = json::Object();
|
2016-03-16 07:42:26 -04:00
|
|
|
|
|
|
|
const auto rc = osrm.Table(params, result);
|
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
auto& json_result=result.get<json::Object>();
|
2016-03-16 07:42:26 -04:00
|
|
|
BOOST_CHECK(rc == Status::Ok || rc == Status::Error);
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto code = json_result.values.at("code").get<json::String>().value;
|
2016-04-11 19:13:12 -04:00
|
|
|
BOOST_CHECK_EQUAL(code, "Ok");
|
|
|
|
|
2016-04-13 17:07:24 -04:00
|
|
|
// check that returned durations error is expected size and proportions
|
|
|
|
// this test expects a 3x3 matrix
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &durations_array = json_result.values.at("durations").get<json::Array>().values;
|
2016-04-11 19:13:12 -04:00
|
|
|
BOOST_CHECK_EQUAL(durations_array.size(), params.coordinates.size());
|
|
|
|
for (unsigned int i = 0; i < durations_array.size(); i++)
|
|
|
|
{
|
|
|
|
const auto durations_matrix = durations_array[i].get<json::Array>().values;
|
|
|
|
BOOST_CHECK_EQUAL(durations_matrix[i].get<json::Number>().value, 0);
|
|
|
|
BOOST_CHECK_EQUAL(durations_matrix.size(), params.coordinates.size());
|
|
|
|
}
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &destinations_array = json_result.values.at("destinations").get<json::Array>().values;
|
2016-04-11 19:13:12 -04:00
|
|
|
for (const auto &destination : destinations_array)
|
|
|
|
{
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK(waypoint_check(destination));
|
2016-04-11 19:13:12 -04:00
|
|
|
}
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto &sources_array = json_result.values.at("sources").get<json::Array>().values;
|
2016-04-11 19:13:12 -04:00
|
|
|
BOOST_CHECK_EQUAL(sources_array.size(), params.coordinates.size());
|
2016-04-13 17:07:24 -04:00
|
|
|
for (const auto &source : sources_array)
|
2016-04-11 19:13:12 -04:00
|
|
|
{
|
2016-04-13 17:07:24 -04:00
|
|
|
BOOST_CHECK(waypoint_check(source));
|
2016-04-11 19:13:12 -04:00
|
|
|
}
|
2016-03-16 07:42:26 -04:00
|
|
|
}
|
|
|
|
|
2017-05-02 05:08:26 -04:00
|
|
|
// See https://github.com/Project-OSRM/osrm-backend/pull/3992
|
|
|
|
BOOST_AUTO_TEST_CASE(test_table_no_segment_for_some_coordinates)
|
|
|
|
{
|
|
|
|
using namespace osrm;
|
|
|
|
|
|
|
|
auto osrm = getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm");
|
|
|
|
|
|
|
|
TableParameters params;
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
params.coordinates.push_back(get_dummy_location());
|
|
|
|
// resembles query option: `&radiuses=0;`
|
|
|
|
params.radiuses.push_back(boost::make_optional(0.));
|
|
|
|
params.radiuses.push_back(boost::none);
|
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
engine::api::ResultT result = json::Object();
|
2017-05-02 05:08:26 -04:00
|
|
|
|
|
|
|
const auto rc = osrm.Table(params, result);
|
|
|
|
|
2019-08-13 04:17:15 -04:00
|
|
|
auto& json_result=result.get<json::Object>();
|
2017-05-02 05:08:26 -04:00
|
|
|
BOOST_CHECK(rc == Status::Error);
|
2019-08-13 04:17:15 -04:00
|
|
|
const auto code = json_result.values.at("code").get<json::String>().value;
|
2017-05-02 05:08:26 -04:00
|
|
|
BOOST_CHECK_EQUAL(code, "NoSegment");
|
|
|
|
}
|
|
|
|
|
2016-03-16 07:42:26 -04:00
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|