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:
authorAlex Zolotarev <deathbaba@gmail.com>2010-12-05 19:24:16 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-22 22:33:57 +0300
commitd6e12b7ce4bcbf0ccd1c07eb25de143422913c34 (patch)
treea7e910c330ce4da9b4f2d8be76067adece2561c4 /geometry/geometry_tests/covering_test.cpp
One Month In Minsk. Made in Belarus.
Diffstat (limited to 'geometry/geometry_tests/covering_test.cpp')
-rw-r--r--geometry/geometry_tests/covering_test.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/geometry/geometry_tests/covering_test.cpp b/geometry/geometry_tests/covering_test.cpp
new file mode 100644
index 0000000000..5f41c0eff8
--- /dev/null
+++ b/geometry/geometry_tests/covering_test.cpp
@@ -0,0 +1,127 @@
+#include "../../testing/testing.hpp"
+#include "../cellid.hpp"
+#include "../covering.hpp"
+#include "../point2d.hpp"
+#include "../../base/stl_add.hpp"
+
+typedef m2::CellId<5> CellId;
+
+UNIT_TEST(CoverTriangle_Simple)
+{
+ vector<CellId> v;
+ covering::Covering<CellId> c(m2::PointD(3*2, 3*2), m2::PointD(4*2, 12*2), m2::PointD(14*2, 3*2));
+ c.OutputToVector(v);
+ vector<CellId> e;
+ e.push_back(CellId("03"));
+ e.push_back(CellId("003"));
+ e.push_back(CellId("012"));
+ e.push_back(CellId("013"));
+ e.push_back(CellId("102"));
+ e.push_back(CellId("103"));
+ e.push_back(CellId("112"));
+ e.push_back(CellId("120"));
+ e.push_back(CellId("121"));
+ e.push_back(CellId("122"));
+ e.push_back(CellId("210"));
+ e.push_back(CellId("211"));
+ e.push_back(CellId("212"));
+ e.push_back(CellId("0211"));
+ e.push_back(CellId("0213"));
+ e.push_back(CellId("0231"));
+ e.push_back(CellId("0233"));
+ e.push_back(CellId("1130"));
+ e.push_back(CellId("1132"));
+ e.push_back(CellId("1230"));
+ e.push_back(CellId("1300"));
+ e.push_back(CellId("2011"));
+ e.push_back(CellId("2013"));
+ e.push_back(CellId("2031"));
+ e.push_back(CellId("2033"));
+ e.push_back(CellId("2130"));
+ e.push_back(CellId("2211"));
+ e.push_back(CellId("2300"));
+ e.push_back(CellId("3000"));
+ TEST_EQUAL(v, e, ());
+}
+
+UNIT_TEST(CoverTriangle_TriangleInsideCell)
+{
+ vector<CellId> v;
+ covering::Covering<CellId> c(m2::PointD(0.1, 0.1), m2::PointD(0.2, 0.2), m2::PointD(0.2, 0.4));
+ c.OutputToVector(v);
+ vector<CellId> e;
+ e.push_back(CellId("0000"));
+ TEST_EQUAL(v, e, ());
+}
+
+UNIT_TEST(Covering_Append_Simple)
+{
+ vector<CellId> v1, v2, v3;
+
+ v1.push_back(CellId("012"));
+ v2.push_back(CellId("0123"));
+ v3.push_back(CellId("012"));
+
+ v1.push_back(CellId("023"));
+ v2.push_back(CellId("023"));
+ v3.push_back(CellId("023"));
+
+ v1.push_back(CellId("130"));
+ v1.push_back(CellId("131"));
+ v2.push_back(CellId("133"));
+ v1.push_back(CellId("1320"));
+ v1.push_back(CellId("1321"));
+ v2.push_back(CellId("1322"));
+ v2.push_back(CellId("1323"));
+ v3.push_back(CellId("13"));
+
+ covering::Covering<CellId> c1(v1);
+ c1.Append(covering::Covering<CellId>(v2));
+ vector<CellId> v4;
+ c1.OutputToVector(v4);
+ sort(v4.begin(), v4.end(), CellId::LessStackOrder());
+ TEST_EQUAL(v3, v4, ());
+}
+
+UNIT_TEST(IntersectCellWithTriangle_EmptyTriangle)
+{
+ m2::PointU pt(27, 31);
+ TEST_EQUAL(covering::CELL_TRIANGLE_NO_INTERSECTION,
+ covering::IntersectCellWithTriangle(CellId("0"), pt, pt, pt), ());
+ TEST_EQUAL(covering::CELL_TRIANGLE_NO_INTERSECTION,
+ covering::IntersectCellWithTriangle(CellId("1"), pt, pt, pt), ());
+ TEST_EQUAL(covering::CELL_TRIANGLE_NO_INTERSECTION,
+ covering::IntersectCellWithTriangle(CellId("2"), pt, pt, pt), ());
+ TEST_EQUAL(covering::TRIANGLE_INSIDE_CELL,
+ covering::IntersectCellWithTriangle(CellId("3"), pt, pt, pt), ());
+}
+
+UNIT_TEST(Covering_EmptyTriangle)
+{
+ m2::PointU pt(27, 31);
+ CellId const expectedCellId = CellId::FromXY(pt.x, pt.y);
+ TEST_GREATER(expectedCellId.ToInt64(), 5, ());
+ covering::Covering<CellId> covering(pt, pt, pt);
+ vector<CellId> ids;
+ covering.OutputToVector(ids);
+ TEST_EQUAL(ids, vector<CellId>(1, expectedCellId), ());
+}
+
+UNIT_TEST(Covering_Simplify_Smoke)
+{
+ vector<CellId> v;
+ v.push_back(CellId("03"));
+ v.push_back(CellId("020"));
+ v.push_back(CellId("021"));
+ v.push_back(CellId("022"));
+ v.push_back(CellId("0012"));
+ covering::Covering<CellId> covering(v);
+ v.clear();
+ covering.Simplify();
+ covering.OutputToVector(v);
+ vector<CellId> e;
+ e.push_back(CellId("02"));
+ e.push_back(CellId("03"));
+ e.push_back(CellId("0012"));
+ TEST_EQUAL(v, e, ());
+}