From 958008d5c68fb79bd329361d7edc267cf23682f3 Mon Sep 17 00:00:00 2001 From: Lev Dragunov Date: Fri, 14 Aug 2015 12:49:26 +0300 Subject: [PATCH] [routing] Tests for GetDistanceM method. --- routing/base/followed_polyline.cpp | 1 - .../routing_tests/followed_polyline_test.cpp | 26 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/routing/base/followed_polyline.cpp b/routing/base/followed_polyline.cpp index d95aff2de6..df9c391f39 100644 --- a/routing/base/followed_polyline.cpp +++ b/routing/base/followed_polyline.cpp @@ -17,7 +17,6 @@ Iter FollowedPolyline::End() const return Iter(m_poly.Back(), m_poly.GetSize() - 1); } -// TODO (ldragunov) Write tests for this code. double FollowedPolyline::GetDistanceM(Iter const & it1, Iter const & it2) const { ASSERT(IsValid(), ()); diff --git a/routing/routing_tests/followed_polyline_test.cpp b/routing/routing_tests/followed_polyline_test.cpp index ab98b05661..abb7da1858 100644 --- a/routing/routing_tests/followed_polyline_test.cpp +++ b/routing/routing_tests/followed_polyline_test.cpp @@ -57,8 +57,30 @@ UNIT_TEST(FollowedPolylineFollowingTestByPrediction) MercatorBounds::RectByCenterXYAndSizeInMeters({0.002, 0.003}, 20000), dist); TEST_EQUAL(polyline.GetCurrentIter().m_ind, 1, ()); TEST_LESS_OR_EQUAL(MercatorBounds::DistanceOnEarth(polyline.GetCurrentIter().m_pt, - m2::PointD(0.003, 0.003)), - 0.1, ()); + m2::PointD(0.003, 0.003)), 0.1, ()); +} +UNIT_TEST(FollowedPolylineDistanceCalculationTest) +{ + // Test full length case. + FollowedPolyline polyline(kTestDirectedPolyline.Begin(), kTestDirectedPolyline.End()); + double distance = polyline.GetDistanceM(polyline.Begin(), polyline.End()); + double masterDistance = MercatorBounds::DistanceOnEarth(kTestDirectedPolyline.Front(), + kTestDirectedPolyline.Back()); + ASSERT_LESS(pow(distance - masterDistance, 2), 0.001, (distance, masterDistance)); + + // Test partial length case. + polyline.UpdateProjection(MercatorBounds::RectByCenterXYAndSizeInMeters({3, 0}, 2)); + distance = polyline.GetDistanceM(polyline.GetCurrentIter(), polyline.End()); + masterDistance = MercatorBounds::DistanceOnEarth(kTestDirectedPolyline.GetPoint(1), + kTestDirectedPolyline.Back()); + ASSERT_LESS(pow(distance - masterDistance, 2), 0.001, (distance, masterDistance)); + + // Test point in the middle case. + polyline.UpdateProjection(MercatorBounds::RectByCenterXYAndSizeInMeters({4, 0}, 2)); + distance = polyline.GetDistanceM(polyline.GetCurrentIter(), polyline.End()); + masterDistance = MercatorBounds::DistanceOnEarth(m2::PointD(4, 0), + kTestDirectedPolyline.Back()); + ASSERT_LESS(pow(distance - masterDistance, 2), 0.001, (distance, masterDistance)); } } // namespace routing_test