Geometries_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_geometries, constructor) {
11  const int N = 10;
12  F2CLineString line;
13  for (int i =0; i < N; ++i) {
14  line.addPoint(i,i);
15  }
16 
17  F2CLineString line2 (line.get());
18 
19  for (int i =0; i < N; ++i) {
20  EXPECT_EQ(line2.getX(i), i);
21  EXPECT_EQ(line2.getY(i), i);
22  }
23  EXPECT_EQ(line2.size(), N);
24 }
25 
26 TEST(fields2cover_types_geometries, access_iterators) {
27  const int N = 10;
28  F2CLineString line;
29 
30  for (int i =0; i < N; ++i) {
31  line.addPoint(i,i);
32  }
33  for (int i =0; i < N; ++i) {
34  EXPECT_EQ(line.getX(i), i);
35  EXPECT_EQ(line.getY(i), i);
36  }
37  EXPECT_EQ(line.size(), N);
38 
39  int i = 0;
40  for (auto p : line) {
41  EXPECT_EQ(p.getX(), i);
42  EXPECT_EQ(p.getY(), i);
43  ++i;
44  }
45 
46  i = 0;
47  for (auto&& p : line) {
48  EXPECT_EQ(p.getX(), i);
49  EXPECT_EQ(p.getY(), i);
50  ++i;
51  }
52 
53  i = 0;
54  for (auto& p : line) {
55  EXPECT_EQ(p.getX(), i);
56  EXPECT_EQ(p.getY(), i);
57  ++i;
58  }
59 
60  i = 0;
61  for (const auto& p : line) {
62  EXPECT_EQ(p.getX(), i);
63  EXPECT_EQ(p.getY(), i);
64  ++i;
65  }
66 }
67 
68 
69 TEST(fields2cover_types_geometries, mult_iterators) {
70  const int N = 2;
71  F2CLinearRing line;
72 
73  for (int i =0; i < N; ++i) {
74  line.addPoint(i,i);
75  }
76  for (int i =0; i < N; ++i) {
77  EXPECT_EQ(line.getX(i), i);
78  EXPECT_EQ(line.getY(i), i);
79  }
80  EXPECT_EQ(line.size(), N);
81 
82  int i = 0;
83  for (auto&& p : line) {
84  EXPECT_EQ(p.getX(), i);
85  EXPECT_EQ(p.getY(), i);
86  p *= 10.0;
87  EXPECT_EQ(p.getX(), 1e1 * i);
88  EXPECT_EQ(p.getY(), 1e1 * i);
89  ++i;
90  }
91 
92  i = 0;
93  for (auto&& p : line) {
94  EXPECT_EQ(p.getX(), 1e1 * i);
95  EXPECT_EQ(p.getY(), 1e1 * i);
96  ++i;
97  }
98  i = 0;
99  for (auto& p : line) {
100  EXPECT_EQ(p.getX(), 1e1 * i);
101  EXPECT_EQ(p.getY(), 1e1 * i);
102  p *= 10.0;
103  EXPECT_EQ(p.getX(), 1e2 * i);
104  EXPECT_EQ(p.getY(), 1e2 * i);
105  ++i;
106  }
107 
108  i = 0;
109  for (auto&& p : line) {
110  EXPECT_EQ(p.getX(), 1e2 * i);
111  EXPECT_EQ(p.getY(), 1e2 * i);
112  ++i;
113  }
114 }
115 
116 TEST(fields2cover_types_geometries, simplify) {
117  F2CLinearRing ring1{
118  F2CPoint(0,0), F2CPoint(1,0),F2CPoint(1, 1),F2CPoint(0, 1), F2CPoint(0, 0)};
119  F2CLineString line {ring1};
120  F2CMultiLineString lines {line};
121  F2CCell cell {ring1};
122  F2CCells cells {cell};
123  EXPECT_NEAR(line.length(), line.simplify(1e-2).length(), 0.1);
124  auto s_lines = lines.simplify(1e-2);
125  EXPECT_NEAR(lines[0].length(), s_lines.getGeometry(0).length(), 0.1);
126  EXPECT_NEAR(cell.area(), cell.simplify(1e-2).area(), 0.1);
127  EXPECT_NEAR(cells.area(), cells.simplify(1e-2).area(), 0.1);
128 }
129 
130 TEST(fields2cover_types_geometries, area) {
132  F2CPoint(0,0), F2CPoint(1,0),F2CPoint(1, 1),F2CPoint(0, 1), F2CPoint(0, 0)};
133  F2CLinearRing ring1{
134  F2CPoint(0,0), F2CPoint(1,0),F2CPoint(1, 1),F2CPoint(0, 1), F2CPoint(0, 0)};
135  F2CLineString line {ring1};
136  F2CMultiLineString lines {line};
137  F2CCell cell {ring1};
138  F2CCells cells {cell};
139  EXPECT_NEAR(ps.area(), 0, 1e-3);
140  EXPECT_NEAR(ring1.area(), 1, 1e-3);
141  EXPECT_NEAR(line.area(), 1, 1e-3);
142  EXPECT_NEAR(lines.area(), 1, 1e-3);
143  EXPECT_NEAR(cell.area(), 1, 1e-3);
144  EXPECT_NEAR(cells.area(), 1, 1e-3);
145  EXPECT_NEAR(cell.clone().area(), 1, 1e-3);
146 }
147 
148 
149 
150 
f2c::types::LineString::getX
double getX(size_t i) const
Definition: LineString.cpp:44
f2c::types::LinearRing::getX
double getX(size_t i) const
Definition: LinearRing.cpp:37
1_basic_types.cells
cells
Definition: 1_basic_types.py:93
1_basic_types.line2
line2
Definition: 1_basic_types.py:61
types.h
1_basic_types.cell
cell
Definition: 1_basic_types.py:88
f2c::types::LinearRing::getY
double getY(size_t i) const
Definition: LinearRing.cpp:41
f2c::types::LinearRing::addPoint
void addPoint(double x, double y, double z=0)
Definition: LinearRing.cpp:105
f2c::types::MultiLineString
Definition: MultiLineString.h:18
f2c::types::LinearRing
Definition: LinearRing.h:18
f2c::types::Cell
Definition: Cell.h:32
f2c::types::Geometry::get
T * get()
Definition: Geometry_impl.hpp:71
f2c::types::MultiPoint
Definition: MultiPoint.h:18
f2c::types::LineString
Definition: LineString.h:19
TEST
TEST(fields2cover_types_geometries, constructor)
Definition: Geometries_test.cpp:10
8_complete_flow.ps
list ps
Definition: 8_complete_flow.py:43
f2c::types::Cells
Definition: Cells.h:21
f2c::types::LineString::addPoint
void addPoint(double x, double y, double z=0)
Definition: LineString.cpp:107
f2c::types::LineString::getY
double getY(size_t i) const
Definition: LineString.cpp:45
f2c::types::LinearRing::size
size_t size() const
Definition: LinearRing.cpp:55
f2c::types::LineString::size
size_t size() const
Definition: LineString.cpp:49
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