1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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::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<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, ());
}
|