From 7484ac789445bf535e6890d8a4b8b149be94b150 Mon Sep 17 00:00:00 2001 From: tatiana-yan Date: Mon, 10 Dec 2018 19:14:28 +0300 Subject: [PATCH] [search] Add results grouping test. --- .../search_integration_tests/ranker_test.cpp | 55 +++++++++++++++++++ .../test_results_matching.cpp | 2 +- .../test_results_matching.hpp | 8 +-- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/search/search_integration_tests/ranker_test.cpp b/search/search_integration_tests/ranker_test.cpp index e3ccc6ca13..f64d4dd4ed 100644 --- a/search/search_integration_tests/ranker_test.cpp +++ b/search/search_integration_tests/ranker_test.cpp @@ -6,9 +6,13 @@ #include "generator/generator_tests_support/test_feature.hpp" #include "generator/generator_tests_support/test_mwm_builder.hpp" +#include +#include + using namespace generator::tests_support; using namespace search::tests_support; using namespace search; +using namespace std; namespace { @@ -49,4 +53,55 @@ UNIT_CLASS_TEST(RankerTest, ErrorsInStreets) TEST(ResultsMatch({results[1]}, {rules[1]}), ()); } } + +UNIT_CLASS_TEST(RankerTest, UniteSameResults) +{ + size_t constexpr kSameCount = 10; + + vector bars; + for (size_t i = 0; i < kSameCount; ++i) + bars.emplace_back(m2::PointD(0.0, 1.0), "bar", "en"); + + vector cafes; + for (size_t i = 0; i < kSameCount; ++i) + cafes.emplace_back(m2::PointD(1.0, 1.0), "cafe", "en"); + + vector fastfoods; + for (size_t i = 0; i < kSameCount; ++i) + fastfoods.emplace_back(m2::PointD(1.0, 1.0), "fastfood", "en"); + + auto id = BuildCountry("FoodLand", [&](TestMwmBuilder & builder) { + for (auto const & b : bars) + builder.Add(b); + + for (auto const & c : cafes) + builder.Add(c); + + for (auto const & f : fastfoods) + builder.Add(f); + }); + + SetViewport(m2::RectD(m2::PointD(0.0, 1.0), m2::PointD(2.0, 3.0))); + { + auto request = MakeRequest("eat "); + auto const & results = request->Results(); + + TRules barRules; + for (auto const & b : bars) + barRules.push_back(ExactMatch(id, b)); + + TRules cafeRules; + for (auto const & c : cafes) + cafeRules.push_back(ExactMatch(id, c)); + + TRules fastfoodRules; + for (auto const & f : fastfoods) + fastfoodRules.push_back(ExactMatch(id, f)); + + TEST(ResultsMatch(results, + {AlternativesMatch(move(barRules)), AlternativesMatch(move(cafeRules)), + AlternativesMatch(move(fastfoodRules))}), + ()); + } +} } // namespace diff --git a/search/search_tests_support/test_results_matching.cpp b/search/search_tests_support/test_results_matching.cpp index 4e89bae0fa..611160c783 100644 --- a/search/search_tests_support/test_results_matching.cpp +++ b/search/search_tests_support/test_results_matching.cpp @@ -33,7 +33,7 @@ string ExactMatchingRule::ToString() const return os.str(); } -AlternativesMatchingRule::AlternativesMatchingRule(initializer_list> rules) +AlternativesMatchingRule::AlternativesMatchingRule(vector> && rules) : m_rules(move(rules)) { } diff --git a/search/search_tests_support/test_results_matching.hpp b/search/search_tests_support/test_results_matching.hpp index a2fb51de21..230079791e 100644 --- a/search/search_tests_support/test_results_matching.hpp +++ b/search/search_tests_support/test_results_matching.hpp @@ -52,7 +52,7 @@ private: class AlternativesMatchingRule : public MatchingRule { public: - AlternativesMatchingRule(std::initializer_list> rules); + AlternativesMatchingRule(std::vector> && rules); // MatchingRule overrides: bool Matches(FeatureType & feature) const override; @@ -68,10 +68,10 @@ std::shared_ptr ExactMatch(TArgs &&... args) return std::make_shared(forward(args)...); } -template -std::shared_ptr AlternativesMatch(TArgs &&... args) +inline std::shared_ptr AlternativesMatch( + std::vector> && rules) { - return std::make_shared(std::forward(args)...); + return std::make_shared(std::move(rules)); } bool MatchResults(DataSource const & dataSource, std::vector> rules,