diff options
author | Yury Melnichek <melnichek@gmail.com> | 2011-09-10 17:11:54 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:23:33 +0300 |
commit | acd44853d0a81f7f44d157393d1330eeacf96403 (patch) | |
tree | e4e1e24c841fd5106be70034537129b7e449a363 /geometry/geometry_tests/covering_test.cpp | |
parent | 4be41d23fef29b2565b5daa62f81fa77a487352e (diff) |
Restore class Covering.
Diffstat (limited to 'geometry/geometry_tests/covering_test.cpp')
-rw-r--r-- | geometry/geometry_tests/covering_test.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/geometry/geometry_tests/covering_test.cpp b/geometry/geometry_tests/covering_test.cpp index e67fc6acfb..a419b4354c 100644 --- a/geometry/geometry_tests/covering_test.cpp +++ b/geometry/geometry_tests/covering_test.cpp @@ -1,4 +1,132 @@ #include "../../testing/testing.hpp" +#include "../cellid.hpp" +#include "../covering.hpp" #include "../covering_utils.hpp" +#include "../point2d.hpp" +#include "../../base/stl_add.hpp" + // TODO: Add covering unit tests here. + + +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_OBJECT_NO_INTERSECTION, + covering::IntersectCellWithTriangle(CellId("0"), pt, pt, pt), ()); + TEST_EQUAL(covering::CELL_OBJECT_NO_INTERSECTION, + covering::IntersectCellWithTriangle(CellId("1"), pt, pt, pt), ()); + TEST_EQUAL(covering::CELL_OBJECT_NO_INTERSECTION, + covering::IntersectCellWithTriangle(CellId("2"), pt, pt, pt), ()); + TEST_EQUAL(covering::OBJECT_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, ()); +} |