Unit test for trip across component boundaries.
Daniel's mental model, with updates from Patrick and staring at the code (plugins/trip.cpp): Trip first snaps coordinates which in the case of phantoms that are not only in small components with the same id switches small components to big ones. Therefore we get either only small or only big components. Only then the Tarjan SCC decomposes this. Result: multiple subtrips only happen for islands or continents.
This commit is contained in:
parent
9fc16b6a83
commit
bc514926bf
@ -103,4 +103,51 @@ BOOST_AUTO_TEST_CASE(test_trip_response_for_locations_in_big_component)
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_trip_response_for_locations_across_components)
|
||||
{
|
||||
const auto args = get_args();
|
||||
auto osrm = getOSRM(args.at(0));
|
||||
|
||||
using namespace osrm;
|
||||
|
||||
const auto small = get_locations_in_small_component();
|
||||
const auto big = get_locations_in_big_component();
|
||||
|
||||
TripParameters params;
|
||||
params.coordinates.push_back(small.at(0));
|
||||
params.coordinates.push_back(big.at(0));
|
||||
params.coordinates.push_back(small.at(1));
|
||||
params.coordinates.push_back(big.at(1));
|
||||
|
||||
json::Object result;
|
||||
const auto rc = osrm.Trip(params, result);
|
||||
BOOST_CHECK(rc == Status::Ok);
|
||||
|
||||
const auto code = result.values.at("code").get<json::String>().value;
|
||||
BOOST_CHECK_EQUAL(code, "Ok");
|
||||
|
||||
const auto &waypoints = result.values.at("waypoints").get<json::Array>().values;
|
||||
BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size());
|
||||
|
||||
const auto &trips = result.values.at("trips").get<json::Array>().values;
|
||||
BOOST_CHECK_EQUAL(trips.size(), 1);
|
||||
// ^ First snapping, then SCC decomposition (see plugins/trip.cpp). Therefore only a single trip.
|
||||
|
||||
for (const auto &waypoint : waypoints)
|
||||
{
|
||||
const auto &waypoint_object = waypoint.get<json::Object>();
|
||||
|
||||
const auto location = waypoint_object.values.at("location").get<json::Array>().values;
|
||||
const auto longitude = location[0].get<json::Number>().value;
|
||||
const auto latitude = location[1].get<json::Number>().value;
|
||||
BOOST_CHECK(longitude >= -180. && longitude <= 180.);
|
||||
BOOST_CHECK(latitude >= -90. && latitude <= 90.);
|
||||
|
||||
const auto trip = waypoint_object.values.at("trips_index").get<json::Number>().value;
|
||||
const auto pos = waypoint_object.values.at("waypoint_index").get<json::Number>().value;
|
||||
BOOST_CHECK(trip >= 0 && trip < trips.size());
|
||||
BOOST_CHECK(pos >= 0 && pos < waypoints.size());
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
Loading…
Reference in New Issue
Block a user