Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcc-engineering <13055392+cc-engineering@users.noreply.github.com>2019-01-18 19:27:17 +0300
committerGitHub <noreply@github.com>2019-01-18 19:27:17 +0300
commitd8f32e8165d00a841e11467e476fc354a1bafe53 (patch)
tree6b57ec3b39ed81576b9bea47e7fcbc56bd08da74 /indexer
parenta33a7db094eacec0d6e6eaa9419f992d9da85996 (diff)
parent0be3b828ecce1f8992163b02649fd23ce427568b (diff)
Merge pull request #10217 from tatiana-yan/add_locality_index_tests
[indexer][tests] Add tests for LocalityIndex top size.
Diffstat (limited to 'indexer')
-rw-r--r--indexer/indexer_tests/locality_index_test.cpp54
-rw-r--r--indexer/locality_object.hpp25
2 files changed, 56 insertions, 23 deletions
diff --git a/indexer/indexer_tests/locality_index_test.cpp b/indexer/indexer_tests/locality_index_test.cpp
index 811313a49d..c15b8a8eff 100644
--- a/indexer/indexer_tests/locality_index_test.cpp
+++ b/indexer/indexer_tests/locality_index_test.cpp
@@ -73,10 +73,10 @@ UNIT_TEST(BuildLocalityIndexTest)
{
LocalityObjectVector objects;
objects.m_objects.resize(4);
- objects.m_objects[0].SetForTests(1, m2::PointD{0, 0});
- objects.m_objects[1].SetForTests(2, m2::PointD{1, 0});
- objects.m_objects[2].SetForTests(3, m2::PointD{1, 1});
- objects.m_objects[3].SetForTests(4, m2::PointD{0, 1});
+ objects.m_objects[0].SetForTesting(1, m2::PointD{0, 0});
+ objects.m_objects[1].SetForTesting(2, m2::PointD{1, 0});
+ objects.m_objects[2].SetForTesting(3, m2::PointD{1, 1});
+ objects.m_objects[3].SetForTesting(4, m2::PointD{0, 1});
vector<char> localityIndex;
MemWriter<vector<char>> writer(localityIndex);
@@ -94,10 +94,10 @@ UNIT_TEST(LocalityIndexRankTest)
{
LocalityObjectVector objects;
objects.m_objects.resize(4);
- objects.m_objects[0].SetForTests(1, m2::PointD{1, 0});
- objects.m_objects[1].SetForTests(2, m2::PointD{2, 0});
- objects.m_objects[2].SetForTests(3, m2::PointD{3, 0});
- objects.m_objects[3].SetForTests(4, m2::PointD{4, 0});
+ objects.m_objects[0].SetForTesting(1, m2::PointD{1, 0});
+ objects.m_objects[1].SetForTesting(2, m2::PointD{2, 0});
+ objects.m_objects[2].SetForTesting(3, m2::PointD{3, 0});
+ objects.m_objects[3].SetForTesting(4, m2::PointD{4, 0});
vector<char> localityIndex;
MemWriter<vector<char>> writer(localityIndex);
@@ -125,17 +125,19 @@ UNIT_TEST(LocalityIndexRankTest)
UNIT_TEST(LocalityIndexTopSizeTest)
{
LocalityObjectVector objects;
- objects.m_objects.resize(7);
+ objects.m_objects.resize(8);
// Same cell.
- objects.m_objects[0].SetForTests(1, m2::PointD{1.0, 0.0});
- objects.m_objects[1].SetForTests(2, m2::PointD{1.0, 0.0});
- objects.m_objects[2].SetForTests(3, m2::PointD{1.0, 0.0});
- objects.m_objects[3].SetForTests(4, m2::PointD{1.0, 0.0});
+ objects.m_objects[0].SetForTesting(1, m2::PointD{1.0, 0.0});
+ objects.m_objects[1].SetForTesting(2, m2::PointD{1.0, 0.0});
+ objects.m_objects[2].SetForTesting(3, m2::PointD{1.0, 0.0});
+ objects.m_objects[3].SetForTesting(4, m2::PointD{1.0, 0.0});
// Another close cell.
- objects.m_objects[4].SetForTests(5, m2::PointD{1.0, 1.0});
- objects.m_objects[5].SetForTests(6, m2::PointD{1.0, 1.0});
+ objects.m_objects[4].SetForTesting(5, m2::PointD{1.0, 1.0});
+ objects.m_objects[5].SetForTesting(6, m2::PointD{1.0, 1.0});
// Far cell.
- objects.m_objects[6].SetForTests(7, m2::PointD{10.0, 10.0});
+ objects.m_objects[6].SetForTesting(7, m2::PointD{10.0, 10.0});
+ // The big object contains all points and must be returned on any query.
+ objects.m_objects[7].SetForTesting(8, m2::RectD{0.0, 0.0, 10.0, 10.0});
vector<char> localityIndex;
MemWriter<vector<char>> writer(localityIndex);
@@ -143,17 +145,25 @@ UNIT_TEST(LocalityIndexTopSizeTest)
MemReader reader(localityIndex.data(), localityIndex.size());
indexer::GeoObjectsIndex<MemReader> index(reader);
+
+ // There is only one object (the big object) at this point.
+ TEST_EQUAL(GetRankedIds(index, m2::PointD{2.0, 2.0} /* center */,
+ m2::PointD{2.0, 2.0} /* border */, 8 /* topSize */)
+ .size(),
+ 1, ());
+
+ // There are 4 small objects and 1 big object at this point.
TEST_EQUAL(GetRankedIds(index, m2::PointD{1.0, 0.0} /* center */,
- m2::PointD{10.0, 10.0} /* border */, 4 /* topSize */)
+ m2::PointD{10.0, 10.0} /* border */, 5 /* topSize */)
.size(),
- 4, ());
+ 5, ());
// 4 objects are indexed at the central cell. Index does not guarantee the order but must
- // return 4 objects.
+ // return 4 objects from central cell and the big object.
TEST_EQUAL(GetRankedIds(index, m2::PointD{1.0, 0.0} /* center */,
m2::PointD{10.0, 10.0} /* border */, 3 /* topSize */)
.size(),
- 4, ());
+ 5, ());
// At the {1.0, 1.0} point there are also 2 objects, but it's not a central cell, index must
// return 5 (topSize) objects.
@@ -170,8 +180,8 @@ UNIT_TEST(LocalityIndexTopSizeTest)
5, ());
TEST_EQUAL(GetRankedIds(index, m2::PointD{4.0, 0.0} /* center */,
- m2::PointD{10.0, 10.0} /* border */, 7 /* topSize */)
+ m2::PointD{10.0, 10.0} /* border */, 8 /* topSize */)
.size(),
- 7, ());
+ 8, ());
}
} // namespace
diff --git a/indexer/locality_object.hpp b/indexer/locality_object.hpp
index d6c390d5dd..27c50b5093 100644
--- a/indexer/locality_object.hpp
+++ b/indexer/locality_object.hpp
@@ -1,6 +1,10 @@
#pragma once
#include "geometry/point2d.hpp"
+#include "geometry/polygon.hpp"
+#include "geometry/rect2d.hpp"
+
+#include "coding/geometry_coding.hpp"
#include "base/buffer_vector.hpp"
#include "base/geo_object_id.hpp"
@@ -41,13 +45,32 @@ public:
toDo(m_triangles[i - 2], m_triangles[i - 1], m_triangles[i]);
}
- void SetForTests(uint64_t id, m2::PointD point)
+ void SetForTesting(uint64_t id, m2::PointD point)
{
m_id = id;
m_points.clear();
m_points.push_back(point);
}
+ void SetForTesting(uint64_t id, m2::RectD rect)
+ {
+ m_id = id;
+
+ m_points.clear();
+ m_points.push_back(rect.LeftBottom());
+ m_points.push_back(rect.RightBottom());
+ m_points.push_back(rect.RightTop());
+ m_points.push_back(rect.LeftTop());
+
+ buffer_vector<m2::PointD, 32> strip;
+ auto const index = FindSingleStrip(
+ m_points.size(), IsDiagonalVisibleFunctor<std::vector<m2::PointD>::const_iterator>(
+ m_points.begin(), m_points.end()));
+ MakeSingleStripFromIndex(index, m_points.size(),
+ [&](size_t i) { strip.push_back(m_points[i]); });
+ serial::StripToTriangles(strip.size(), strip, m_triangles);
+ }
+
private:
uint64_t m_id = 0;
std::vector<m2::PointD> m_points;