Skip to content

Commit f059b69

Browse files
author
Lev Dragunov
committed
Routing completion percent test.
1 parent 55fbfc7 commit f059b69

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

routing/routing_session.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ void RoutingSession::GetRouteFollowingInfo(FollowingInfo & info) const
325325

326326
double RoutingSession::GetCompletionPercent() const
327327
{
328+
// Uncreated route can't have completion percents.
329+
if (!m_route.IsValid())
330+
return 0;
331+
328332
double const percent = 100.0 *
329333
(m_passedDistanceOnRouteMeters + m_route.GetCurrentDistanceFromBeginMeters()) /
330334
(m_passedDistanceOnRouteMeters + m_route.GetTotalDistanceMeters());

routing/routing_tests/routing_session_test.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,59 @@ UNIT_TEST(TestFollowRouteFlagPersistence)
230230
TEST(rebuildTimedSignal.WaitUntil(time), ("Route was not built."));
231231
TEST(session.IsFollowing(), ());
232232
}
233+
234+
UNIT_TEST(TestFollowRoutePercentTest)
235+
{
236+
Index index;
237+
RoutingSession session;
238+
session.Init(nullptr, nullptr);
239+
vector<m2::PointD> routePoints = kTestRoute;
240+
Route masterRoute("dummy", routePoints.begin(), routePoints.end());
241+
size_t counter = 0;
242+
unique_ptr<DummyRouter> router = make_unique<DummyRouter>(masterRoute, DummyRouter::NoError, counter);
243+
session.SetRouter(move(router), nullptr);
244+
245+
// Get completion percent of unexisted route.
246+
TEST_EQUAL(session.GetCompletionPercent(), 0, ());
247+
// Go along the route.
248+
TimedSignal alongTimedSignal;
249+
session.BuildRoute(kTestRoute.front(), kTestRoute.back(),
250+
[&alongTimedSignal](Route const &, IRouter::ResultCode)
251+
{
252+
alongTimedSignal.Signal();
253+
},
254+
nullptr, 0);
255+
// Manual check of the routeBuilded mutex to avoid spurious results.
256+
auto time = steady_clock::now() + kRouteBuildingMaxDuration;
257+
TEST(alongTimedSignal.WaitUntil(time), ("Route was not built."));
258+
259+
// Get completion percent of unstarted route.
260+
TEST_EQUAL(session.GetCompletionPercent(), 0, ());
261+
262+
location::GpsInfo info;
263+
info.m_horizontalAccuracy = 0.01;
264+
info.m_verticalAccuracy = 0.01;
265+
266+
// Go through the route.
267+
info.m_longitude = 0.;
268+
info.m_latitude = 1.;
269+
session.OnLocationPositionChanged(info, index);
270+
TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 0., 0.5), ());
271+
272+
info.m_longitude = 0.;
273+
info.m_latitude = 2.;
274+
session.OnLocationPositionChanged(info, index);
275+
TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 33.3, 0.5), ());
276+
277+
278+
info.m_longitude = 0.;
279+
info.m_latitude = 3.;
280+
session.OnLocationPositionChanged(info, index);
281+
TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 66.6, 0.5), ());
282+
283+
info.m_longitude = 0.;
284+
info.m_latitude = 3.99;
285+
session.OnLocationPositionChanged(info, index);
286+
TEST(my::AlmostEqualAbs(session.GetCompletionPercent(), 100., 0.5), ());
287+
}
233288
} // namespace routing

0 commit comments

Comments
 (0)