From 6bb6aa7a61d7f420e5d624db2fef696273f9b58c Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 14 Nov 2018 17:21:30 +0300 Subject: [PATCH] [eye] tests fix --- metrics/eye_info.hpp | 31 ++++++++++++++++++----------- metrics/eye_serdes.cpp | 9 +++++++++ metrics/metrics_tests/eye_tests.cpp | 21 ++++++++++++++++--- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/metrics/eye_info.hpp b/metrics/eye_info.hpp index e32bcbdc65..49dde1983f 100644 --- a/metrics/eye_info.hpp +++ b/metrics/eye_info.hpp @@ -189,8 +189,10 @@ public: : m_bestType(bestType) , m_pos(pos) , m_readableName(readableName) - , m_limitRect(MercatorBounds::ClampX(pos.x - 1e-7), MercatorBounds::ClampY(pos.y - 1e-7), - MercatorBounds::ClampX(pos.x + 1e-7), MercatorBounds::ClampY(pos.y + 1e-7)) + , m_limitRect(MercatorBounds::ClampX(pos.x - kPointAccuracy), + MercatorBounds::ClampY(pos.y - kPointAccuracy), + MercatorBounds::ClampX(pos.x + kPointAccuracy), + MercatorBounds::ClampY(pos.y + kPointAccuracy)) { } @@ -204,8 +206,7 @@ public: bool AlmostEquals(MapObject const & rhs) const { - // We are use 1e-5 eps because of points in mwm have this accuracy. - return GetPos().EqualDxDy(rhs.GetPos(), 1e-5 /* eps */) && GetBestType() == rhs.GetBestType() && + return GetPos().EqualDxDy(rhs.GetPos(), kPointAccuracy) && GetBestType() == rhs.GetBestType() && GetDefaultName() == rhs.GetDefaultName(); } @@ -218,18 +219,20 @@ public: void SetPos(m2::PointD const & pos) { m_pos = pos; - m_limitRect = {MercatorBounds::ClampX(pos.x - 1e-7), MercatorBounds::ClampY(pos.y - 1e-7), - MercatorBounds::ClampX(pos.x + 1e-7), MercatorBounds::ClampY(pos.y + 1e-7)}; + m_limitRect = {MercatorBounds::ClampX(pos.x - kPointAccuracy), + MercatorBounds::ClampY(pos.y - kPointAccuracy), + MercatorBounds::ClampX(pos.x + kPointAccuracy), + MercatorBounds::ClampY(pos.y + kPointAccuracy)}; } + std::string const & GetDefaultName() const { return m_defaultName; } + + void SetDefaultName(std::string const & defaultName) { m_defaultName = defaultName; } + std::string const & GetReadableName() const { return m_readableName; } void SetReadableName(std::string const & readableName) { m_readableName = readableName; } - std::string const & GetDefaultName() const { return m_readableName; } - - void GetDefaultName(std::string const & readableName) { m_readableName = readableName; } - MapObject::Events & GetEditableEvents() const { return m_events; } MapObject::Events const & GetEvents() const { return m_events; } @@ -237,13 +240,17 @@ public: m2::RectD GetLimitRect() const { return m_limitRect; } DECLARE_VISITOR(visitor(m_bestType, "type"), visitor(m_pos, "pos"), - visitor(m_readableName, "name"), visitor(m_events, "events")); + visitor(m_readableName, "readable_name"), visitor(m_defaultName, "default_name"), + visitor(m_events, "events")); private: + // We are use 1e-5 eps because of points in mwm have this accuracy. + static double constexpr kPointAccuracy = 1e-5; + std::string m_bestType; m2::PointD m_pos; - std::string m_readableName; std::string m_defaultName; + std::string m_readableName; // Mutable because of interface of the m4::Tree provides constant references in ForEach methods, // but we need to add events into existing objects to avoid some overhead (copy + change + // remove + insert operations). The other solution is to use const_cast in ForEach methods. diff --git a/metrics/eye_serdes.cpp b/metrics/eye_serdes.cpp index d50cfea8b9..8ebb81cfee 100644 --- a/metrics/eye_serdes.cpp +++ b/metrics/eye_serdes.cpp @@ -18,10 +18,13 @@ namespace struct MapObjectEvent { DECLARE_VISITOR(visitor(m_bestPoiType, "best_type"), visitor(m_poiPos, "pos"), + visitor(m_readableName, "readable_name"), visitor(m_defaultName, "default_name"), visitor(m_event, "event")); std::string m_bestPoiType; m2::PointD m_poiPos; + std::string m_defaultName; + std::string m_readableName; eye::MapObject::Event m_event; }; } // namespace @@ -88,6 +91,8 @@ void Serdes::SerializeMapObjects(MapObjects const & mapObjects, std::vector ser(writer); event.m_bestPoiType = item.GetBestType(); event.m_poiPos = item.GetPos(); + event.m_defaultName = item.GetDefaultName(); + event.m_readableName = item.GetReadableName(); event.m_event = poiEvent; ser(event); } @@ -120,6 +125,8 @@ void Serdes::DeserializeMapObjects(std::vector const & bytes, MapObjects des(event); poi.SetBestType(event.m_bestPoiType); poi.SetPos(event.m_poiPos); + poi.SetDefaultName(event.m_defaultName); + poi.SetReadableName(event.m_readableName); bool found = false; result.ForEachInRect(poi.GetLimitRect(), [&found, &poi, &event](MapObject const & item) @@ -162,6 +169,8 @@ void Serdes::SerializeMapObjectEvent(MapObject const & poi, MapObject::Event con MapObjectEvent event; event.m_bestPoiType = poi.GetBestType(); event.m_poiPos = poi.GetPos(); + event.m_defaultName = poi.GetDefaultName(); + event.m_readableName = poi.GetReadableName(); event.m_event = poiEvent; ser(event); writer.Write(nextLine.data(), nextLine.size()); diff --git a/metrics/metrics_tests/eye_tests.cpp b/metrics/metrics_tests/eye_tests.cpp index fd8d22edac..f97e23ffaa 100644 --- a/metrics/metrics_tests/eye_tests.cpp +++ b/metrics/metrics_tests/eye_tests.cpp @@ -43,6 +43,8 @@ Info MakeDefaultInfoForTesting() MapObject poi; poi.SetBestType("shop"); poi.SetPos({53.652007, 108.143443}); + poi.SetDefaultName("Hello"); + poi.SetReadableName("World"); MapObject::Event eventInfo; eventInfo.m_eventTime = Time(std::chrono::hours(90000)); eventInfo.m_userPos = {72.045507, 81.408095}; @@ -85,6 +87,8 @@ void CompareWithDefaultInfo(Info const & lhs) { TEST(lhsObj.GetPos().EqualDxDy(rhsObj.GetPos(), 1e-6), ()); TEST_EQUAL(lhsObj.GetBestType(), rhsObj.GetBestType(), ()); + TEST_EQUAL(lhsObj.GetDefaultName(), rhsObj.GetDefaultName(), ()); + TEST_EQUAL(lhsObj.GetReadableName(), rhsObj.GetReadableName(), ()); TEST_EQUAL(lhsObj.GetEvents().size(), rhsObj.GetEvents().size(), ()); TEST(lhsObj.GetEvents()[0].m_userPos.EqualDxDy(rhsObj.GetEvents()[0].m_userPos, 1e-6), ()); TEST_EQUAL(lhsObj.GetEvents()[0].m_eventTime, rhsObj.GetEvents()[0].m_eventTime, ()); @@ -571,11 +575,22 @@ UNIT_CLASS_TEST(ScopedEyeForTesting, RegisterMapObjectEvent) EyeForTesting::RegisterMapObjectEvent(poi, MapObject::Event::Type::RouteToCreated, userPos); } + { + MapObject poi; + poi.SetBestType("shop"); + // Sould NOT be concatenated with previous poi because of different names method returns false. + poi.SetPos({53.652005, 108.143448}); + poi.SetDefaultName("No"); + m2::PointD userPos = {0.0, 0.0}; + + EyeForTesting::RegisterMapObjectEvent(poi, MapObject::Event::Type::RouteToCreated, userPos); + } + { MapObject poi; poi.SetBestType("shop"); // Sould be concatenated with previous poi because of AlmostEquals method returns true. - poi.SetPos({53.6520051, 108.14344799999}); + poi.SetPos({53.65201, 108.1434399999}); m2::PointD userPos = {158.016345, 53.683329}; EyeForTesting::RegisterMapObjectEvent(poi, MapObject::Event::Type::AddToBookmark, userPos); @@ -585,7 +600,7 @@ UNIT_CLASS_TEST(ScopedEyeForTesting, RegisterMapObjectEvent) MapObject poi; poi.SetBestType("shop"); // Sould NOT be concatenated with previous poi because of AlmostEquals method returns false. - poi.SetPos({53.6520052, 108.143448}); + poi.SetPos({53.65202, 108.143448}); m2::PointD userPos = {0.0, 0.0}; EyeForTesting::RegisterMapObjectEvent(poi, MapObject::Event::Type::UgcEditorOpened, userPos); @@ -603,7 +618,7 @@ UNIT_CLASS_TEST(ScopedEyeForTesting, RegisterMapObjectEvent) { auto const resultInfo = Eye::Instance().GetInfo(); auto const & mapObjects = resultInfo->m_mapObjects; - TEST_EQUAL(mapObjects.GetSize(), 4, ()); + TEST_EQUAL(mapObjects.GetSize(), 5, ()); { MapObject poi;