#include "testing/testing.hpp" #include "geometry/cellid.hpp" #include "geometry/covering.hpp" #include "geometry/covering_utils.hpp" #include "geometry/point2d.hpp" #include "base/stl_add.hpp" // TODO: Add covering unit tests here. typedef m2::CellId<5> CellId; UNIT_TEST(CoverTriangle_Simple) { vector v; covering::Covering c(m2::PointD(3*2, 3*2), m2::PointD(4*2, 12*2), m2::PointD(14*2, 3*2)); c.OutputToVector(v); vector 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 v; covering::Covering c(m2::PointD(0.1, 0.1), m2::PointD(0.2, 0.2), m2::PointD(0.2, 0.4)); c.OutputToVector(v); vector e; e.push_back(CellId("0000")); TEST_EQUAL(v, e, ()); } UNIT_TEST(Covering_Append_Simple) { vector 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 c1(v1); c1.Append(covering::Covering(v2)); vector v4; c1.OutputToVector(v4); sort(v4.begin(), v4.end(), CellId::LessPreOrder()); 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, CellId::DEPTH_LEVELS - 1); TEST_GREATER(expectedCellId.ToInt64(CellId::DEPTH_LEVELS), 5, ()); covering::Covering covering(pt, pt, pt); vector ids; covering.OutputToVector(ids); TEST_EQUAL(ids, vector(1, expectedCellId), ()); } UNIT_TEST(Covering_Simplify_Smoke) { vector 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 covering(v); v.clear(); covering.Simplify(); covering.OutputToVector(v); vector e; e.push_back(CellId("02")); e.push_back(CellId("03")); e.push_back(CellId("0012")); TEST_EQUAL(v, e, ()); }