From afa1d62d211edc5e1e87ebee6f06a6c60da8d776 Mon Sep 17 00:00:00 2001 From: Lev Dragunov Date: Tue, 10 Nov 2015 11:11:30 +0300 Subject: [PATCH] Routing session tests. --- .../routing_tests/routing_session_test.cpp | 127 ++++++++++++++++++ routing/routing_tests/routing_tests.pro | 1 + 2 files changed, 128 insertions(+) create mode 100644 routing/routing_tests/routing_session_test.cpp diff --git a/routing/routing_tests/routing_session_test.cpp b/routing/routing_tests/routing_session_test.cpp new file mode 100644 index 0000000000..cd7c15a4e1 --- /dev/null +++ b/routing/routing_tests/routing_session_test.cpp @@ -0,0 +1,127 @@ +#include "testing/testing.hpp" + +#include "routing/route.hpp" +#include "routing/router.hpp" +#include "routing/routing_session.hpp" + +#include "geometry/point2d.hpp" + +#include "base/logging.hpp" + +#include "std/string.hpp" +#include "std/vector.hpp" + +namespace routing { +// Simple router. It returns route given to him on creation. +class DummyRouter : public IRouter +{ +private: + Route & m_route; + ResultCode m_code; + size_t & m_buildCount; + +public: + DummyRouter(Route & route, ResultCode code, size_t & buildCounter) + : m_route(route), m_code(code), m_buildCount(buildCounter) + { + } + string GetName() const override { return "dummy"; } + void ClearState() override {} + ResultCode CalculateRoute(m2::PointD const & /* startPoint */, + m2::PointD const & /* startDirection */, + m2::PointD const & /* finalPoint */, + RouterDelegate const & /* delegate */, Route & route) override + { + ++m_buildCount; + route = m_route; + return m_code; + } +}; + +static vector kTestRoute = {{0., 1.}, {0., 2.}, {0., 3.}, {0., 4.}}; + +UNIT_TEST(TestRouteBuilding) +{ + RoutingSession session; + session.Init(nullptr, nullptr); + vector routePoints = kTestRoute; + Route masterRoute("dummy", routePoints.begin(), routePoints.end()); + size_t counter = 0; + atomic routeBuilded(false); + unique_ptr router = make_unique(masterRoute, DummyRouter::NoError, counter); + session.SetRouter(move(router), nullptr); + session.BuildRoute(kTestRoute.front(), kTestRoute.back(), + [&routeBuilded](Route const &, IRouter::ResultCode) + { + routeBuilded = true; + }, + nullptr, 0); + while (!routeBuilded) + { + } + TEST_EQUAL(counter, 1, ()); +} + +UNIT_TEST(TestRouteRebuilding) +{ + Index index; + RoutingSession session; + session.Init(nullptr, nullptr); + vector routePoints = kTestRoute; + Route masterRoute("dummy", routePoints.begin(), routePoints.end()); + size_t counter = 0; + atomic routeBuilded(false); + unique_ptr router = make_unique(masterRoute, DummyRouter::NoError, counter); + session.SetRouter(move(router), nullptr); + + // Go along the route. + session.BuildRoute(kTestRoute.front(), kTestRoute.back(), + [&routeBuilded](Route const &, IRouter::ResultCode) + { + routeBuilded = true; + }, + nullptr, 0); + while (!routeBuilded) + { + } + + location::GpsInfo info; + info.m_horizontalAccuracy = 0.01; + info.m_verticalAccuracy = 0.01; + info.m_longitude = 0.; + info.m_latitude = 1.; + RoutingSession::State code = session.OnLocationPositionChanged( + MercatorBounds::FromLatLon(info.m_latitude, info.m_longitude), info, index); + while (info.m_latitude < kTestRoute.back().y) + { + code = session.OnLocationPositionChanged( + MercatorBounds::FromLatLon(info.m_latitude, info.m_longitude), info, index); + TEST_EQUAL(code, RoutingSession::State::OnRoute, ()); + info.m_latitude += 0.01; + } + TEST_EQUAL(counter, 1, ()); + + // Rebuild route and go in opposite direction. So initiate a route rebuilding flag. + counter = 0; + routeBuilded = false; + session.BuildRoute(kTestRoute.front(), kTestRoute.back(), + [&routeBuilded](Route const &, IRouter::ResultCode) + { + routeBuilded = true; + }, + nullptr, 0); + info.m_longitude = 0.; + info.m_latitude = 1.; + while (!routeBuilded) + { + } + + for (size_t i = 0; i < 10; ++i) + { + code = session.OnLocationPositionChanged( + MercatorBounds::FromLatLon(info.m_latitude, info.m_longitude), info, index); + info.m_latitude -= 0.1; + } + TEST_EQUAL(code, RoutingSession::State::RouteNeedRebuild, ()); +} +} // namespace routing diff --git a/routing/routing_tests/routing_tests.pro b/routing/routing_tests/routing_tests.pro index 6c46d3ae7b..f9cad6e63f 100644 --- a/routing/routing_tests/routing_tests.pro +++ b/routing/routing_tests/routing_tests.pro @@ -34,6 +34,7 @@ SOURCES += \ road_graph_nearest_edges_test.cpp \ route_tests.cpp \ routing_mapping_test.cpp \ + routing_session_test.cpp \ turns_generator_test.cpp \ turns_sound_test.cpp \ turns_tts_text_tests.cpp \