From f059b69dec598927cfd4e40412a808bb8c5641e9 Mon Sep 17 00:00:00 2001 From: Lev Dragunov Date: Mon, 8 Feb 2016 15:20:20 +0300 Subject: [PATCH] Routing completion percent test. --- routing/routing_session.cpp | 4 ++ .../routing_tests/routing_session_test.cpp | 55 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/routing/routing_session.cpp b/routing/routing_session.cpp index c9528ea3e0..3001f89f59 100644 --- a/routing/routing_session.cpp +++ b/routing/routing_session.cpp @@ -325,6 +325,10 @@ void RoutingSession::GetRouteFollowingInfo(FollowingInfo & info) const double RoutingSession::GetCompletionPercent() const { + // Uncreated route can't have completion percents. + if (!m_route.IsValid()) + return 0; + double const percent = 100.0 * (m_passedDistanceOnRouteMeters + m_route.GetCurrentDistanceFromBeginMeters()) / (m_passedDistanceOnRouteMeters + m_route.GetTotalDistanceMeters()); diff --git a/routing/routing_tests/routing_session_test.cpp b/routing/routing_tests/routing_session_test.cpp index d06b8d52df..2cbeaa5ff4 100644 --- a/routing/routing_tests/routing_session_test.cpp +++ b/routing/routing_tests/routing_session_test.cpp @@ -230,4 +230,59 @@ UNIT_TEST(TestFollowRouteFlagPersistence) TEST(rebuildTimedSignal.WaitUntil(time), ("Route was not built.")); TEST(session.IsFollowing(), ()); } + +UNIT_TEST(TestFollowRoutePercentTest) +{ + Index index; + RoutingSession session; + session.Init(nullptr, nullptr); + vector routePoints = kTestRoute; + Route masterRoute("dummy", routePoints.begin(), routePoints.end()); + size_t counter = 0; + unique_ptr router = make_unique(masterRoute, DummyRouter::NoError, counter); + session.SetRouter(move(router), nullptr); + + // Get completion percent of unexisted route. + TEST_EQUAL(session.GetCompletionPercent(), 0, ()); + // Go along the route. + TimedSignal alongTimedSignal; + session.BuildRoute(kTestRoute.front(), kTestRoute.back(), + [&alongTimedSignal](Route const &, IRouter::ResultCode) + { + alongTimedSignal.Signal(); + }, + nullptr, 0); + // Manual check of the routeBuilded mutex to avoid spurious results. + auto time = steady_clock::now() + kRouteBuildingMaxDuration; + TEST(alongTimedSignal.WaitUntil(time), ("Route was not built.")); + + // Get completion percent of unstarted route. + TEST_EQUAL(session.GetCompletionPercent(), 0, ()); + + location::GpsInfo info; + info.m_horizontalAccuracy = 0.01; + info.m_verticalAccuracy = 0.01; + + // Go through the route. + info.m_longitude = 0.; + info.m_latitude = 1.; + session.OnLocationPositionChanged(info, index); + TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 0., 0.5), ()); + + info.m_longitude = 0.; + info.m_latitude = 2.; + session.OnLocationPositionChanged(info, index); + TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 33.3, 0.5), ()); + + + info.m_longitude = 0.; + info.m_latitude = 3.; + session.OnLocationPositionChanged(info, index); + TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 66.6, 0.5), ()); + + info.m_longitude = 0.; + info.m_latitude = 3.99; + session.OnLocationPositionChanged(info, index); + TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 100., 0.5), ()); +} } // namespace routing