7 #include <gtest/gtest.h>
13 TEST(fields2cover_types_point, minus) {
16 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
17 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
18 EXPECT_NEAR(
p1.getZ(), 3.3, 1e-7);
19 EXPECT_NEAR(
p2.getX(), -0.5, 1e-7);
20 EXPECT_NEAR(
p2.getY(), 0.6, 1e-7);
21 EXPECT_NEAR(
p2.getZ(), 1, 1e-7);
22 EXPECT_NEAR(
p3.getX(), -1.6, 1e-7);
23 EXPECT_NEAR(
p3.getY(), -1.6, 1e-7);
24 EXPECT_NEAR(
p3.getZ(), -2.3, 1e-7);
27 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
28 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
29 EXPECT_NEAR(
p1.getZ(), 3.3, 1e-7);
30 EXPECT_NEAR(
p2.getX(), -0.5, 1e-7);
31 EXPECT_NEAR(
p2.getY(), 0.6, 1e-7);
32 EXPECT_NEAR(
p2.getZ(), 1, 1e-7);
33 EXPECT_NEAR(
p4.getX(), -1.6, 1e-7);
34 EXPECT_NEAR(
p4.getY(), -1.6, 1e-7);
35 EXPECT_NEAR(
p4.getZ(), -2.3, 1e-7);
37 OGRPoint op2(-0.5, 0.6, 1);
39 EXPECT_NEAR(op4.getX(), -1.6, 1e-7);
40 EXPECT_NEAR(op4.getY(), -1.6, 1e-7);
41 EXPECT_NEAR(op4.getZ(), -2.3, 1e-7);
44 TEST(fields2cover_types_point, plus) {
47 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
48 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
49 EXPECT_NEAR(
p1.getZ(), 3.3, 1e-7);
50 EXPECT_NEAR(
p2.getX(), -0.5, 1e-7);
51 EXPECT_NEAR(
p2.getY(), 0.6, 1e-7);
52 EXPECT_NEAR(
p2.getZ(), 1, 1e-7);
53 EXPECT_NEAR(
p3.getX(), 0.6, 1e-7);
54 EXPECT_NEAR(
p3.getY(), 2.8, 1e-7);
55 EXPECT_NEAR(
p3.getZ(), 4.3, 1e-7);
57 OGRPoint op2(-0.5, 0.6, 1);
59 EXPECT_NEAR(
p4.getX(), 0.6, 1e-7);
60 EXPECT_NEAR(
p4.getY(), 2.8, 1e-7);
61 EXPECT_NEAR(
p4.getZ(), 4.3, 1e-7);
64 TEST(fields2cover_types_point, mult_equal) {
67 EXPECT_NEAR(
p1.getX(), 1.65, 1e-7);
68 EXPECT_NEAR(
p1.getY(), 3.3, 1e-7);
69 EXPECT_NEAR(
p1.getZ(), 4.5, 1e-7);
72 TEST(fields2cover_types_point, multiply) {
75 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
76 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
77 EXPECT_NEAR(
p1.getZ(), 3, 1e-7);
78 EXPECT_NEAR(
p2.getX(), 1.65, 1e-7);
79 EXPECT_NEAR(
p2.getY(), 3.3, 1e-7);
80 EXPECT_NEAR(
p2.getZ(), 4.5, 1e-7);
83 TEST(fields2cover_types_point, plus_v) {
87 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
88 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
89 EXPECT_NEAR(v[0].getX(), 0, 1e-7);
90 EXPECT_NEAR(v[0].getY(), 0, 1e-7);
91 EXPECT_NEAR(v[1].getX(), 1, 1e-7);
92 EXPECT_NEAR(v[1].getY(), 2, 1e-7);
93 EXPECT_NEAR(
p2[0].getX(), 1.1, 1e-7);
94 EXPECT_NEAR(
p2[0].getY(), 2.2, 1e-7);
95 EXPECT_NEAR(
p2[1].getX(), 2.1, 1e-7);
96 EXPECT_NEAR(
p2[1].getY(), 4.2, 1e-7);
99 TEST(fields2cover_types_point, minus_v) {
103 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
104 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
105 EXPECT_NEAR(v[0].getX(), 0, 1e-7);
106 EXPECT_NEAR(v[0].getY(), 0, 1e-7);
107 EXPECT_NEAR(v[1].getX(), 1, 1e-7);
108 EXPECT_NEAR(v[1].getY(), 2, 1e-7);
109 EXPECT_NEAR(
p2[0].getX(), -1.1, 1e-7);
110 EXPECT_NEAR(
p2[0].getY(), -2.2, 1e-7);
111 EXPECT_NEAR(
p2[1].getX(), -0.1, 1e-7);
112 EXPECT_NEAR(
p2[1].getY(), -0.2, 1e-7);
115 EXPECT_NEAR(
p1.getX(), 1.1, 1e-7);
116 EXPECT_NEAR(
p1.getY(), 2.2, 1e-7);
117 EXPECT_NEAR(v[0].getX(), 0, 1e-7);
118 EXPECT_NEAR(v[0].getY(), 0, 1e-7);
119 EXPECT_NEAR(v[1].getX(), 1, 1e-7);
120 EXPECT_NEAR(v[1].getY(), 2, 1e-7);
121 EXPECT_NEAR(
p3[0].getX(), 1.1, 1e-7);
122 EXPECT_NEAR(
p3[0].getY(), 2.2, 1e-7);
123 EXPECT_NEAR(
p3[1].getX(), 0.1, 1e-7);
124 EXPECT_NEAR(
p3[1].getY(), 0.2, 1e-7);
127 TEST(fields2cover_types_point, clone) {
131 EXPECT_EQ(b.
getX(), 2);
134 TEST(fields2cover_types_point, set) {
145 TEST(fields2cover_types_point, print) {
147 std::ostringstream ss_a;
149 EXPECT_EQ(ss_a.str(),
"Point(1, 2, 0)");
151 std::ostringstream ss_a2;
153 EXPECT_EQ(ss_a2.str(),
"Point(1, 2, -5)");
156 TEST(fields2cover_types_point, rotateFromPoint) {
162 std::vector<F2CPoint> vp {
p1,
p2};
163 std::vector<F2CMultiPoint> pss {
ps};
164 std::vector<F2CLineString> vls {ls, ls2};
165 std::vector<F2CMultiLineString> vmls {mls};
167 EXPECT_NEAR(
ps.getGeometry(1).getX(), 2, 1e-7);
168 EXPECT_NEAR(ls.getGeometry(1).getX(), 2, 1e-7);
170 auto r_ls = p0.rotateFromPoint(0.5*boost::math::constants::half_pi<double>(), ls);
171 EXPECT_NEAR(r_ls.getGeometry(0).getX(), -1./sqrt(2), 1e-7);
172 EXPECT_NEAR(r_ls.getGeometry(0).getY(), 1./sqrt(2), 1e-7);
173 EXPECT_NEAR(r_ls.getGeometry(1).getX(), sqrt(2), 1e-7);
174 EXPECT_NEAR(r_ls.getGeometry(1).getY(), sqrt(2), 1e-7);
176 auto r_mls = p0.rotateFromPoint(0.5*boost::math::constants::half_pi<double>(), mls);
177 EXPECT_EQ(r_mls.size(), 2);
178 auto r_ls3 = r_mls.getGeometry(0);
179 EXPECT_NEAR(r_ls3.getGeometry(0).getX(), -1./sqrt(2), 1e-7);
180 EXPECT_NEAR(r_ls3.getGeometry(0).getY(), 1./sqrt(2), 1e-7);
181 EXPECT_NEAR(r_ls3.getGeometry(1).getX(), sqrt(2), 1e-7);
182 EXPECT_NEAR(r_ls3.getGeometry(1).getY(), sqrt(2), 1e-7);
184 auto r_vmls = p0.rotateFromPoint(0.5*boost::math::constants::half_pi<double>(), vmls);
185 EXPECT_EQ(r_vmls.size(), 1);
186 EXPECT_EQ(r_vmls[0].size(), 2);
187 auto r_ls4 = r_vmls[0].getGeometry(0);
188 EXPECT_NEAR(r_ls4.getGeometry(0).getX(), -1./sqrt(2), 1e-7);
189 EXPECT_NEAR(r_ls4.getGeometry(0).getY(), 1./sqrt(2), 1e-7);
190 EXPECT_NEAR(r_ls4.getGeometry(1).getX(), sqrt(2), 1e-7);
191 EXPECT_NEAR(r_ls4.getGeometry(1).getY(), sqrt(2), 1e-7);
193 auto r_vls = p0.rotateFromPoint(0.5*boost::math::constants::half_pi<double>(), vls);
194 EXPECT_EQ(r_vls.size(), 2);
195 auto r_ls5 = r_vls[0];
196 EXPECT_NEAR(r_ls5.getGeometry(0).getX(), -1./sqrt(2), 1e-7);
197 EXPECT_NEAR(r_ls5.getGeometry(0).getY(), 1./sqrt(2), 1e-7);
198 EXPECT_NEAR(r_ls5.getGeometry(1).getX(), sqrt(2), 1e-7);
199 EXPECT_NEAR(r_ls5.getGeometry(1).getY(), sqrt(2), 1e-7);
201 auto r_p1 = p0.rotateFromPoint(boost::math::constants::half_pi<double>(),
p1);
202 EXPECT_NEAR(r_p1.getX(), -1, 1e-7);
203 EXPECT_NEAR(r_p1.getY(), 0, 1e-7);
204 auto r_p2 = p0.rotateFromPoint(boost::math::constants::half_pi<double>(),
p2);
205 EXPECT_NEAR(r_p2.getX(), 0, 1e-7);
206 EXPECT_NEAR(r_p2.getY(), 2, 1e-7);
208 auto r_ps = p0.rotateFromPoint(boost::math::constants::half_pi<double>(),
ps);
209 EXPECT_NEAR(r_ps.getGeometry(0).getX(), -1, 1e-7);
210 EXPECT_NEAR(r_ps.getGeometry(0).getY(), 0, 1e-7);
211 EXPECT_NEAR(r_ps.getGeometry(1).getX(), 0, 1e-7);
212 EXPECT_NEAR(r_ps.getGeometry(1).getY(), 2, 1e-7);
213 auto r_pss = p0.rotateFromPoint(boost::math::constants::half_pi<double>(), pss);
214 EXPECT_NEAR(r_pss[0].getGeometry(0).getX(), -1, 1e-7);
215 EXPECT_NEAR(r_pss[0].getGeometry(0).getY(), 0, 1e-7);
216 EXPECT_NEAR(r_pss[0].getGeometry(1).getX(), 0, 1e-7);
217 EXPECT_NEAR(r_pss[0].getGeometry(1).getY(), 2, 1e-7);
218 auto r_vp = p0.rotateFromPoint(boost::math::constants::half_pi<double>(), vp);
219 EXPECT_NEAR(r_vp[1].getX(), 0, 1e-7);
220 EXPECT_NEAR(r_vp[1].getY(), 2, 1e-7);
223 auto field =
rand.generateRandField(1e4, 3);
224 EXPECT_NEAR(
field.area(), 1e4, 1e-7);
226 EXPECT_NEAR(
cells.area(), 1e4, 1e-7);
227 auto r_cells = p0.rotateFromPoint(boost::math::constants::pi<double>(),
cells);
228 F2CPoint start =
cells.getGeometry(0).getGeometry(0).getGeometry(1);
229 F2CPoint r_start = r_cells.getGeometry(0).getGeometry(0).getGeometry(1);
230 EXPECT_NEAR(
cells.area(), 1e4, 1e-7);
231 EXPECT_NEAR(r_cells.area(), 1e4, 1e-7);
232 EXPECT_NEAR(start.
getX(), -r_start.
getX(), 1e-7);
233 EXPECT_NEAR(start.
getY(), -r_start.
getY(), 1e-7);
235 auto r_cell = p0.rotateFromPoint(boost::math::constants::pi<double>(),
236 cells.getGeometry(0));
237 F2CPoint r_start2 = r_cell.getGeometry(0).getGeometry(1);
238 EXPECT_NEAR(start.
getX(), -r_start2.
getX(), 1e-7);
239 EXPECT_NEAR(start.
getY(), -r_start2.
getY(), 1e-7);
241 std::vector<F2CLinearRing> v_ring {
cells.getGeometry(0).getGeometry(0)};
242 auto r_v_ring = p0.rotateFromPoint(boost::math::constants::pi<double>(),
244 F2CPoint r_v_start6 = r_v_ring[0].getGeometry(1);
245 EXPECT_NEAR(start.
getX(), -r_v_start6.
getX(), 1e-7);
246 EXPECT_NEAR(start.
getY(), -r_v_start6.
getY(), 1e-7);
248 std::vector<F2CCell> v_cell {
cells.getGeometry(0)};
249 auto r_v_cell = p0.rotateFromPoint(boost::math::constants::pi<double>(),
251 F2CPoint r_v_start2 = r_v_cell[0].getGeometry(0).getGeometry(1);
252 EXPECT_NEAR(start.
getX(), -r_v_start2.
getX(), 1e-7);
253 EXPECT_NEAR(start.
getY(), -r_v_start2.
getY(), 1e-7);
255 std::vector<F2CCells> v_cells {
cells};
256 auto r_v_cells = p0.rotateFromPoint(boost::math::constants::pi<double>(),
258 F2CPoint r_v_start3 = r_v_cells[0].getGeometry(0).getGeometry(0).getGeometry(1);
259 EXPECT_NEAR(start.
getX(), -r_v_start3.
getX(), 1e-7);
260 EXPECT_NEAR(start.
getY(), -r_v_start3.
getY(), 1e-7);
263 TEST(fields2cover_types_point, signedDistance2Segment) {
272 EXPECT_EQ(p00.signedDistance2Segment(p10, p_10), 0.0);
273 EXPECT_EQ(p11.signedDistance2Segment(p_10, p10), 1.0);
274 EXPECT_EQ(p11.signedDistance2Segment(p10, p_10), -1.0);
275 EXPECT_EQ(p1_1.signedDistance2Segment(p_10, p10), -1.0);
276 EXPECT_EQ(p1_1.signedDistance2Segment(p10, p_10), 1.0);
277 EXPECT_EQ(p2_2.signedDistance2Segment(p_10, p10), -2.0);
278 EXPECT_EQ(p11.signedDistance2Segment(p00, p90), 1.0);
281 TEST(fields2cover_types_point, intersectionOfLines) {
296 TEST(fields2cover_types_point, closestPointInSegment) {
301 EXPECT_EQ(
p1.closestPointInSegment(s1_s, s1_e), s1_e);
302 EXPECT_EQ(
p2.closestPointInSegment(s1_s, s1_e), s1_s);
303 EXPECT_EQ(
p3.closestPointInSegment(s1_s, s1_e),
F2CPoint(0, 1));
308 EXPECT_EQ(
p4.closestPointInSegment(s2_s, s2_e),
F2CPoint(2, 0));