diff --git a/generator/generator_tests_support/test_feature.cpp b/generator/generator_tests_support/test_feature.cpp index 5b6f4831a7..1ab2e297d8 100644 --- a/generator/generator_tests_support/test_feature.cpp +++ b/generator/generator_tests_support/test_feature.cpp @@ -313,6 +313,14 @@ string TestPOI::ToDebugString() const return os.str(); } +feature::TypesHolder TestPOI::GetTypes() const +{ + feature::TypesHolder types; + for (auto const path : m_types) + types.Add(classif().GetTypeByPath(path)); + return types; +} + // TestMultilingualPOI ----------------------------------------------------------------------------- TestMultilingualPOI::TestMultilingualPOI(m2::PointD const & center, string const & defaultName, map const & multilingualNames) diff --git a/generator/generator_tests_support/test_feature.hpp b/generator/generator_tests_support/test_feature.hpp index 7591cc44a5..e9fbc7b01c 100644 --- a/generator/generator_tests_support/test_feature.hpp +++ b/generator/generator_tests_support/test_feature.hpp @@ -1,5 +1,6 @@ #pragma once +#include "indexer/feature_data.hpp" #include "indexer/feature_decl.hpp" #include "indexer/feature_meta.hpp" #include "indexer/mwm_set.hpp" @@ -156,6 +157,7 @@ public: void Serialize(FeatureBuilder1 & fb) const override; std::string ToDebugString() const override; + feature::TypesHolder GetTypes() const; void SetHouseNumber(std::string const & houseNumber) { m_houseNumber = houseNumber; } void SetStreetName(std::string const & name) { m_streetName = name; } void SetTypes(std::vector> const & types) { m_types = types; } diff --git a/indexer/indexer_tests/scale_index_reading_tests.cpp b/indexer/indexer_tests/scale_index_reading_tests.cpp index 191c8164e8..08834d4bb1 100644 --- a/indexer/indexer_tests/scale_index_reading_tests.cpp +++ b/indexer/indexer_tests/scale_index_reading_tests.cpp @@ -10,6 +10,7 @@ #include "indexer/data_source.hpp" #include "indexer/feature.hpp" #include "indexer/feature_covering.hpp" +#include "indexer/feature_visibility.hpp" #include "indexer/mwm_set.hpp" #include "indexer/scale_index.hpp" @@ -42,16 +43,17 @@ class ScaleIndexReadingTest : public TestWithCustomMwms { public: template - Names CollectNames(MwmSet::MwmId const & id, ScaleIndex const & index, int scale, - m2::RectD const & rect) + Names CollectNames(MwmSet::MwmId const & id, ScaleIndex const & index, int scaleForIntervals, + int scaleForZoomLevels, m2::RectD const & rect) { covering::CoveringGetter covering(rect, covering::ViewportWithLowLevels); vector indices; - for (auto const & interval : covering.Get(scale)) + for (auto const & interval : covering.Get(scaleForIntervals)) { - index.ForEachInIntervalAndScale(interval.first, interval.second, scale, - [&](uint64_t /* key */, uint32_t value) { indices.push_back(value); }); + index.ForEachInIntervalAndScale( + interval.first, interval.second, scaleForZoomLevels, + [&](uint64_t /* key */, uint32_t value) { indices.push_back(value); }); } FeaturesLoaderGuard loader(m_dataSource, id); @@ -105,11 +107,26 @@ UNIT_CLASS_TEST(ScaleIndexReadingTest, Mmap) ScaleIndex> index(subReader, factory); auto collectNames = [&](m2::RectD const & rect) { - return CollectNames(id, index, header.GetLastScale(), rect); + return CollectNames(id, index, header.GetLastScale(), header.GetLastScale(), rect); }; TEST_EQUAL(collectNames(m2::RectD{-0.5, -0.5, 0.5, 0.5}), Names({"A"}), ()); TEST_EQUAL(collectNames(m2::RectD{0.5, -0.5, 1.5, 1.5}), Names({"B", "C"}), ()); TEST_EQUAL(collectNames(m2::RectD{-0.5, -0.5, 1.5, 1.5}), Names({"A", "B", "C", "D"}), ()); + + auto collectNamesForExactScale = [&](m2::RectD const & rect, int scale) { + return CollectNames(id, index, header.GetLastScale(), scale, rect); + }; + + auto const drawableScale = feature::GetMinDrawableScaleClassifOnly(a.GetTypes()); + CHECK_LESS(drawableScale, header.GetLastScale(), + ("Change the test to ensure scales less than last scale work.")); + + TEST_EQUAL(collectNamesForExactScale(m2::RectD{-0.5, -0.5, 0.5, 0.5}, drawableScale), + Names({"A"}), ()); + TEST_EQUAL(collectNamesForExactScale(m2::RectD{0.5, -0.5, 1.5, 1.5}, drawableScale), + Names({"B", "C"}), ()); + TEST_EQUAL(collectNamesForExactScale(m2::RectD{-0.5, -0.5, 1.5, 1.5}, drawableScale), + Names({"A", "B", "C", "D"}), ()); } } // namespace