From d3d5d0f156d088301f11b196be5b02607a8d4c76 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Wed, 19 Jul 2017 17:47:02 +0300 Subject: [PATCH] Recovering FollowedPolyline::Append() and FollowedPolyline::Pop() and adding tests. --- geometry/polyline2d.hpp | 10 ++++++++ routing/base/followed_polyline.hpp | 12 +++++++++ .../routing_tests/followed_polyline_test.cpp | 25 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/geometry/polyline2d.hpp b/geometry/polyline2d.hpp index ff0170b4bd..9e96516bd5 100644 --- a/geometry/polyline2d.hpp +++ b/geometry/polyline2d.hpp @@ -70,6 +70,16 @@ public: void Clear() { m_points.clear(); } void Add(Point const & pt) { m_points.push_back(pt); } + void Append(Polyline const & poly) + { + m_points.insert(m_points.end(), poly.m_points.cbegin(), poly.m_points.cend()); + } + + void PopBack() + { + ASSERT(!m_points.empty(), ()); + m_points.pop_back(); + } void Swap(Polyline & rhs) { m_points.swap(rhs.m_points); } size_t GetSize() const { return m_points.size(); } diff --git a/routing/base/followed_polyline.hpp b/routing/base/followed_polyline.hpp index fc69abb6c4..0d67605501 100644 --- a/routing/base/followed_polyline.hpp +++ b/routing/base/followed_polyline.hpp @@ -22,6 +22,18 @@ public: void Swap(FollowedPolyline & rhs); + void Append(FollowedPolyline const & poly) + { + m_poly.Append(poly.m_poly); + Update(); + } + + void PopBack() + { + m_poly.PopBack(); + Update(); + } + bool IsValid() const { return (m_current.IsValid() && m_poly.GetSize() > 1); } m2::PolylineD const & GetPolyline() const { return m_poly; } diff --git a/routing/routing_tests/followed_polyline_test.cpp b/routing/routing_tests/followed_polyline_test.cpp index db3f3aa743..50a996d3d9 100644 --- a/routing/routing_tests/followed_polyline_test.cpp +++ b/routing/routing_tests/followed_polyline_test.cpp @@ -11,8 +11,33 @@ using namespace routing; namespace { static const m2::PolylineD kTestDirectedPolyline({{0.0, 0.0}, {3.0, 0.0}, {5.0, 0.0}}); + static const m2::PolylineD kTestDirectedPolyline2({{6.0, 0.0}, {7.0, 0.0}}); } // namespace +UNIT_TEST(FollowedPolylineAppend) +{ + FollowedPolyline followedPolyline1(kTestDirectedPolyline.Begin(), kTestDirectedPolyline.End()); + FollowedPolyline const followedPolyline2(kTestDirectedPolyline2.Begin(), kTestDirectedPolyline2.End()); + + TEST_EQUAL(followedPolyline1.GetPolyline(), kTestDirectedPolyline, ()); + followedPolyline1.Append(followedPolyline2); + TEST_EQUAL(followedPolyline1.GetPolyline().GetSize(), 5, ()); + + m2::PolylineD polyline1 = kTestDirectedPolyline; + polyline1.Append(kTestDirectedPolyline2); + TEST_EQUAL(followedPolyline1.GetPolyline(), polyline1, ()); +} + +UNIT_TEST(FollowedPolylinePop) +{ + FollowedPolyline followedPolyline(kTestDirectedPolyline.Begin(), kTestDirectedPolyline.End()); + + TEST_EQUAL(followedPolyline.GetPolyline(), kTestDirectedPolyline, ()); + TEST_EQUAL(followedPolyline.GetPolyline().GetSize(), 3, ()); + followedPolyline.PopBack(); + TEST_EQUAL(followedPolyline.GetPolyline().GetSize(), 2, ()); +} + UNIT_TEST(FollowedPolylineInitializationFogTest) { FollowedPolyline polyline(kTestDirectedPolyline.Begin(), kTestDirectedPolyline.End());