From c86a54f521df1e0d5030f91f574234b287da349a Mon Sep 17 00:00:00 2001 From: Maxim Pimenov Date: Mon, 17 Feb 2020 14:08:03 +0300 Subject: [PATCH] Review fixes. --- search/processor.cpp | 25 ++++++++++--------- .../processor_test.cpp | 4 +-- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/search/processor.cpp b/search/processor.cpp index 4f491b1be2..b84e35757e 100644 --- a/search/processor.cpp +++ b/search/processor.cpp @@ -50,6 +50,7 @@ #include "geometry/mercator.hpp" #include "base/assert.hpp" +#include "base/buffer_vector.hpp" #include "base/logging.hpp" #include "base/macros.hpp" #include "base/scope_guard.hpp" @@ -546,21 +547,13 @@ void Processor::Search(SearchParams const & params) void Processor::SearchCoordinates() { - set seen; - auto const emitUnique = [&](double lat, double lon) { - if (seen.emplace(lat, lon).second) - { - m_emitter.AddResultNoChecks(m_ranker.MakeResult( - RankerResult(lat, lon), true /* needAddress */, true /* needHighlighting */)); - m_emitter.Emit(); - } - }; + buffer_vector results; { double lat; double lon; if (MatchLatLonDegree(m_query, lat, lon)) - emitUnique(lat, lon); + results.emplace_back(lat, lon); } istringstream iss(m_query); @@ -570,11 +563,19 @@ void Processor::SearchCoordinates() ge0::Ge0Parser parser; ge0::Ge0Parser::Result r; if (parser.Parse(token, r)) - emitUnique(r.m_lat, r.m_lon); + results.emplace_back(r.m_lat, r.m_lon); url::GeoURLInfo info(token); if (info.IsValid()) - emitUnique(info.m_lat, info.m_lon); + results.emplace_back(info.m_lat, info.m_lon); + } + + base::SortUnique(results); + for (auto const & r : results) + { + m_emitter.AddResultNoChecks(m_ranker.MakeResult( + RankerResult(r.m_lat, r.m_lon), true /* needAddress */, true /* needHighlighting */)); + m_emitter.Emit(); } } diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp index ce6c7d691d..d087b52b66 100644 --- a/search/search_integration_tests/processor_test.cpp +++ b/search/search_integration_tests/processor_test.cpp @@ -1005,7 +1005,7 @@ UNIT_CLASS_TEST(ProcessorTest, TestCoords) for (auto const & [query, lat, lon] : tests) { - auto request = MakeRequest(query); + auto const request = MakeRequest(query); auto const & results = request->Results(); TEST_EQUAL(results.size(), 1, ()); @@ -1016,7 +1016,7 @@ UNIT_CLASS_TEST(ProcessorTest, TestCoords) m2::PointD const expected = mercator::FromLatLon(lat, lon); auto const actual = result.GetFeatureCenter(); auto const dist = mercator::DistanceOnEarth(actual, expected); - TEST(dist <= 1.0, (actual, expected, dist)); + TEST_LESS_OR_EQUAL(dist, 1.0, (actual, expected)); } }