MultiLineString_test.cpp
Go to the documentation of this file.
1 //=============================================================================
2 // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3 // Author: Gonzalo Mier
4 // BSD-3 License
5 //=============================================================================
6 
7 #include <gtest/gtest.h>
8 #include "fields2cover/types.h"
9 
10 TEST(fields2cover_types_multilinestring, init) {
12  for (int i = 0; i < 3; ++i) {
13  F2CLineString line;
14  for (int j = i; j < 5; ++j) {
15  line.addPoint(F2CPoint(i, j, -i * j));
16  }
17  lines.addGeometry(line);
18  }
19 
20  int i = 0;
21  for (const F2CLineString& l : lines) {
22  for (int j = 0; j < 5 - i; ++j) {
23  EXPECT_EQ(l.getX(j), i);
24  EXPECT_EQ(l.getY(j), j+i);
25  EXPECT_EQ(l.getZ(j), -i * (j + i));
26  }
27  ++i;
28  }
29 
30  lines *= 2.0;
31 
32  i = 0;
33  for (auto&& l : lines) {
34  for (int j = 0; j < 5-i; ++j) {
35  EXPECT_EQ(l.getX(j), 2*i);
36  EXPECT_EQ(l.getY(j), 2*(j+i));
37  EXPECT_EQ(l.getZ(j), -2*i * (j+i));
38  }
39  ++i;
40  }
41  const auto const_lines = lines;
42  i = 0;
43  for (auto&& l : const_lines) {
44  for (int j = 0; j < 5-i; ++j) {
45  EXPECT_EQ(l.getX(j), 2*i);
46  EXPECT_EQ(l.getY(j), 2*(j+i));
47  EXPECT_EQ(l.getZ(j), -2*i * (j+i));
48  }
49  ++i;
50  }
51  i = 0;
52  for (F2CLineString& l : lines) {
53  for (int j = 0; j < 5-i; ++j) {
54  EXPECT_EQ(l.getX(j), 2*i);
55  EXPECT_EQ(l.getY(j), 2*(j+i));
56  EXPECT_EQ(l.getZ(j), -2*i * (j+i));
57  }
58  ++i;
59  }
60 
61  EXPECT_EQ(lines.size(), 3);
62  F2CMultiLineString lines2 = lines.clone();
63  EXPECT_EQ(lines.size(), 3);
64  EXPECT_EQ(lines2.size(), 3);
65 
66  lines.addGeometry(lines2);
67  EXPECT_EQ(lines.size(), 6);
68  EXPECT_EQ(lines2.size(), 3);
69 }
70 
71 TEST(fields2cover_types_multilinestring, getGeometry) {
73  for (int i = 0; i < 3; ++i) {
74  F2CLineString line;
75  for (int j = i; j < 5; ++j) {
76  line.addPoint(F2CPoint(0, j));
77  }
78  lines.addGeometry(line);
79  }
80 
81  const auto const_lines = lines.clone();
82  for (int i = 0; i < lines.size(); ++i) {
83  EXPECT_EQ(lines.getGeometry(i).size(), 5-i);
84  EXPECT_EQ(lines.getGeometry(i).length(), 5-i-1);
85  EXPECT_EQ(const_lines.getGeometry(i).size(), 5-i);
86  EXPECT_EQ(const_lines.getGeometry(i).length(), 5-i-1);
87  }
88 
89 
90  F2CLineString l_error;
91  EXPECT_THROW(lines.getGeometry(30, l_error), std::out_of_range);
92  EXPECT_THROW(const_lines.getGeometry(30, l_error), std::out_of_range);
93  EXPECT_THROW(lines.getGeometry(30), std::out_of_range);
94  EXPECT_THROW(const_lines.getGeometry(30), std::out_of_range);
95 }
96 
97 TEST(fields2cover_types_multilinestring, append) {
98  F2CLinearRing ring1 {
99  F2CPoint(0,0), F2CPoint(1,0), F2CPoint(1,1), F2CPoint(0,1), F2CPoint(0,0)};
100  F2CLinearRing ring2 = ring1.clone();
101  ring2 *= 2.0;
102  ring1 = ring1 + F2CPoint(0.5, 0.5);
103  F2CCell cell {ring2};
104  cell.addRing(ring1);
105 
107  lines.append(cell.get());
108  EXPECT_EQ(lines.size(), 2);
109  lines.append(F2CCells(cell).get());
110  EXPECT_EQ(lines.size(), 4);
111 }
112 
113 TEST(fields2cover_types_multilinestring, setGeometry) {
114  F2CLineString line {
115  F2CPoint(0,0), F2CPoint(2,0), F2CPoint(2,2), F2CPoint(0,2)};
117  F2CPoint(0,0), F2CPoint(4,0), F2CPoint(4,4), F2CPoint(0,4)};
119  EXPECT_EQ(lines.length(), 0);
120  EXPECT_EQ(lines.size(), 0);
121 
122  lines.setGeometry(0, line2);
123  EXPECT_EQ(lines.length(), 12);
124  EXPECT_EQ(lines.size(), 1);
125 
126  lines.setGeometry(0, line);
127  EXPECT_EQ(lines.length(), 6);
128  EXPECT_EQ(lines.size(), 1);
129 
130  lines.setGeometry(1, F2CLineString());
131  EXPECT_EQ(lines.length(), 6);
132  EXPECT_EQ(lines.size(), 2);
133 
134  lines.setGeometry(10, line);
135  EXPECT_EQ(lines.length(), 12);
136  EXPECT_EQ(lines.size(), 11);
137 
138  lines.setGeometry(0, line2);
139  EXPECT_EQ(lines.length(), 18);
140  EXPECT_EQ(lines.size(), 11);
141 }
142 
143 TEST(fields2cover_types_multilinestring, getLineSegments) {
144  F2CLinearRing ring1 {F2CPoint(0,0), F2CPoint(1,0), F2CPoint(1,1), F2CPoint(0,1), F2CPoint(0,0)};
146  EXPECT_EQ(lines.size(), 4);
147  EXPECT_EQ(lines.size(), ring1.size() - 1);
148  EXPECT_NEAR(lines.length(), 4.0, 1e-7);
149 }
150 
1_basic_types.line2
line2
Definition: 1_basic_types.py:61
types.h
f2c::types::Geometries::clone
SAMETYPE clone() const
Definition: Geometries_impl.hpp:19
1_basic_types.cell
cell
Definition: 1_basic_types.py:88
F2CCells
f2c::types::Cells F2CCells
Definition: types.h:44
TEST
TEST(fields2cover_types_multilinestring, init)
Definition: MultiLineString_test.cpp:10
f2c::types::MultiLineString
Definition: MultiLineString.h:18
f2c::types::LinearRing
Definition: LinearRing.h:18
f2c::types::MultiLineString::getLineSegments
static MultiLineString getLineSegments(const LineString &line)
Definition: MultiLineString.cpp:130
f2c::types::Cell
Definition: Cell.h:32
f2c::types::LineString
Definition: LineString.h:19
f2c::types::MultiLineString::size
size_t size() const
Definition: MultiLineString.cpp:31
F2CLineString
f2c::types::LineString F2CLineString
Definition: types.h:40
f2c::types::LineString::addPoint
void addPoint(double x, double y, double z=0)
Definition: LineString.cpp:107
1_basic_types.lines
lines
Definition: 1_basic_types.py:73
F2CPoint
f2c::types::Point F2CPoint
Definition: types.h:38


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31