Swath_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_swath, hasSameDir) {
11  F2CSwath swath1(F2CLineString({F2CPoint(0, 0), F2CPoint(1, 1)}), 1.0);
12  F2CSwath swath2 = swath1.clone();
13  swath2.reverse();
14  EXPECT_TRUE(swath1.hasSameDir(swath1));
15  EXPECT_FALSE(swath1.hasSameDir(swath2));
16  EXPECT_FALSE(swath2.hasSameDir(swath1));
17  swath1.targetSameDirAs(swath2);
18  EXPECT_TRUE(swath1.hasSameDir(swath2));
19  EXPECT_EQ(swath1.getPoint(0), F2CPoint(1, 1));
20 }
21 
22 TEST(fields2cover_types_swath, comparison) {
23  F2CSwath swath1(F2CLineString({F2CPoint(0, 0), F2CPoint(1, 1)}), 1.0, 1);
24  F2CSwath swath2(F2CLineString({F2CPoint(0, 0), F2CPoint(2, 2)}), 1.0, 2);
25  F2CSwath swath3(F2CLineString({F2CPoint(1, 1), F2CPoint(0, 0)}), 1.0, 3);
26  F2CSwath swath4(F2CLineString({F2CPoint(0, 0), F2CPoint(1, 1)}), 2.0, 4);
27  F2CSwath swath5(F2CLineString({F2CPoint(1, 0), F2CPoint(2, 2)}), 1.0, 5);
28  F2CSwath swath6(F2CLineString({F2CPoint(0, 1), F2CPoint(2, 2)}), 1.0, 6);
29 
30  EXPECT_FALSE(swath1 != swath1);
31  EXPECT_TRUE(swath1 == swath1);
32  EXPECT_TRUE(swath1 >= swath1);
33  EXPECT_TRUE(swath1 <= swath1);
34  EXPECT_FALSE(swath1 < swath1);
35  EXPECT_FALSE(swath1 > swath1);
36  EXPECT_TRUE(swath1 != swath3);
37  EXPECT_FALSE(swath1 == swath3);
38  EXPECT_TRUE(swath1 != swath4);
39  EXPECT_FALSE(swath1 == swath4);
40  EXPECT_FALSE(swath1 > swath4);
41  EXPECT_TRUE(swath1 < swath4);
42  EXPECT_FALSE(swath1 >= swath4);
43  EXPECT_TRUE(swath1 <= swath4);
44  EXPECT_TRUE(swath1 < swath5);
45  EXPECT_FALSE(swath1 > swath5);
46  EXPECT_TRUE(swath1 <= swath5);
47  EXPECT_FALSE(swath1 >= swath5);
48  EXPECT_TRUE(swath5 > swath1);
49  EXPECT_FALSE(swath5 < swath1);
50  EXPECT_TRUE(swath5 >= swath1);
51  EXPECT_FALSE(swath5 <= swath1);
52  EXPECT_TRUE(swath1 < swath6);
53  EXPECT_FALSE(swath1 > swath6);
54  EXPECT_TRUE(swath1 <= swath6);
55  EXPECT_FALSE(swath1 >= swath6);
56  EXPECT_TRUE(swath6 > swath1);
57  EXPECT_FALSE(swath6 < swath1);
58  EXPECT_TRUE(swath6 >= swath1);
59  EXPECT_FALSE(swath6 <= swath1);
60 }
61 
62 
63 
64 TEST(fields2cover_types_swath, length) {
65  F2CLineString path1, path2, path3;
66  path1->addPoint( 0.0, 1.0);
67  path1->addPoint( 4.0, 1.0);
68  path2->addPoint( 0.0, 3.0);
69  path2->addPoint( 4.0, 3.0);
70  path3->addPoint( 0.0, 0.0);
71  path3->addPoint( 1.0, 1.0);
72  F2CSwath swath1(path1);
73  F2CSwath swath2(path2);
74  F2CSwath swath3(path3);
75  F2CSwath swath4;
76 
77  EXPECT_EQ(swath1.length(), 4);
78  EXPECT_EQ(swath2.length(), 4);
79  EXPECT_NEAR(std::pow(swath3.length(),2), 2, 1e-7);
80 
81  swath4.setPath(path2);
82  EXPECT_EQ(swath4.length(), 4);
83 }
84 TEST(fields2cover_types_swath, set_id) {
85  F2CSwath swath;
86  swath.setId(400);
87  EXPECT_EQ(swath.getId(), 400);
88 }
89 
90 TEST(fields2cover_types_swath, width) {
91  F2CSwath swath(5.0);
92  EXPECT_EQ(swath.getWidth(), 5.0);
93 
94  F2CSwath swath2(0.2);
95  EXPECT_EQ(swath2.getWidth(), 0.2);
96 
98  path->addPoint(0.0, 1.0);
99  path->addPoint(4.0, 1.0);
100  EXPECT_THROW(F2CSwath(path, -10), std::invalid_argument);
101  EXPECT_THROW(F2CSwath(0), std::invalid_argument);
102  EXPECT_THROW(F2CSwath(-10), std::invalid_argument);
103 }
104 
105 
106 TEST(fields2cover_types_swath, area) {
107  F2CSwath swath_empty(F2CLineString(), 1.0);
108  EXPECT_TRUE(swath_empty.areaCovered().isEmpty());
109 
110  F2CLineString line {F2CPoint(0, 1), F2CPoint(4, 1)};
111  F2CSwath swath(line, 2.0);
112  auto cell = swath.areaCovered();
113  EXPECT_EQ(swath.getWidth() * swath.length(), cell.getGeometry(0).area());
114  EXPECT_EQ(swath.getWidth() * swath.length(), swath.area());
115 
116  F2CCells cells = F2CCells::buffer(line, 1.0);
117  EXPECT_NEAR(swath.area(cells), cells.area(), 1e-5);
118 }
119 
120 
121 TEST(fields2cover_types_swath, angles) {
122  F2CLineString path1, path2, path3;
123  path1->addPoint( 0.0, 1.0);
124  path1->addPoint( 4.0, 1.0);
125  path2->addPoint( 3.0, 1.0);
126  path2->addPoint( 3.0, 4.0);
127  path3->addPoint( 0.0, 0.0);
128  path3->addPoint( 1.0, 1.0);
129  F2CSwath swath_empty;
130  F2CSwath swath1(path1);
131  F2CSwath swath2(path2);
132  F2CSwath swath3(path3);
133 
134  EXPECT_EQ(swath_empty.getInAngle(), -1.0);
135  EXPECT_EQ(swath_empty.getOutAngle(), -1.0);
136  auto empty_p1 = swath_empty.startPoint();
137  auto empty_p2 = swath_empty.endPoint();
138  EXPECT_TRUE(empty_p1.isEmpty());
139  EXPECT_TRUE(empty_p2.isEmpty());
140  EXPECT_NEAR(fmod(swath1.getInAngle(),boost::math::constants::two_pi<double>()), 0.0, 1e-5);
141  EXPECT_NEAR(fmod(swath2.getInAngle(),boost::math::constants::two_pi<double>()), boost::math::constants::half_pi<double>(), 1e-5);
142  EXPECT_NEAR(fmod(swath3.getInAngle(),boost::math::constants::two_pi<double>()), boost::math::constants::pi<double>() / 4.0, 1e-5);
143  EXPECT_NEAR(fmod(swath1.getInAngle(),boost::math::constants::two_pi<double>()), fmod(swath1.getOutAngle(),boost::math::constants::two_pi<double>()), 1e-5);
144  EXPECT_NEAR(fmod(swath2.getInAngle(),boost::math::constants::two_pi<double>()), fmod(swath2.getOutAngle(),boost::math::constants::two_pi<double>()), 1e-5);
145  EXPECT_NEAR(fmod(swath3.getInAngle(),boost::math::constants::two_pi<double>()), fmod(swath3.getOutAngle(),boost::math::constants::two_pi<double>()), 1e-5);
146 }
147 
148 TEST(fields2cover_types_swath, start_and_end_points) {
149  F2CLineString path1;
150  path1->addPoint( -100.0, 30.0);
151  path1->addPoint( 4.0, 24.2);
152  path1->addPoint( 50.0, -34.2);
153  F2CSwath swath1(path1);
154 
155  EXPECT_NEAR(swath1.startPoint().getX(), -100.0, 1e-5);
156  EXPECT_NEAR(swath1.startPoint().getY(), 30.0, 1e-5);
157  EXPECT_NEAR(swath1.endPoint().getX(), 50.0, 1e-5);
158  EXPECT_NEAR(swath1.endPoint().getY(), -34.2, 1e-5);
159 }
160 
f2c::types::Swath::getId
int getId() const
Definition: Swath.cpp:151
1_basic_types.cells
cells
Definition: 1_basic_types.py:93
types.h
2_objective_functions.path
path
Definition: 2_objective_functions.py:88
f2c::types::Swath::getInAngle
double getInAngle() const
Definition: Swath.cpp:77
f2c::types::Swath::getWidth
double getWidth() const
Definition: Swath.cpp:167
1_basic_types.cell
cell
Definition: 1_basic_types.py:88
f2c::types::Swath
Definition: Swath.h:23
f2c::types::Swath::setPath
void setPath(const LineString &path)
Definition: Swath.cpp:163
f2c::types::Swath::areaCovered
Cells areaCovered() const
Definition: Swath.cpp:106
f2c::types::Swath::setId
void setId(int id)
Definition: Swath.cpp:155
2_objective_functions.swath1
swath1
Definition: 2_objective_functions.py:30
f2c::types::Swath::length
double length() const
Definition: Swath.cpp:60
f2c::types::Geometry::isEmpty
bool isEmpty() const
Definition: Geometry_impl.hpp:222
2_objective_functions.swath3
swath3
Definition: 2_objective_functions.py:34
f2c::types::Swath::endPoint
Point endPoint() const
Definition: Swath.cpp:99
2_objective_functions.width
float width
Definition: 2_objective_functions.py:29
f2c::types::LineString
Definition: LineString.h:19
f2c::types::Swath::startPoint
Point startPoint() const
Definition: Swath.cpp:92
f2c::types::Cells
Definition: Cells.h:21
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
f2c::types::Point
Definition: Point.h:21
TEST
TEST(fields2cover_types_swath, hasSameDir)
Definition: Swath_test.cpp:10
F2CSwath
f2c::types::Swath F2CSwath
Definition: types.h:50
f2c::types::Swath::area
double area() const
Definition: Swath.cpp:64
f2c::types::Swath::getOutAngle
double getOutAngle() const
Definition: Swath.cpp:84
f2c::types::Cells::buffer
static Cells buffer(const Geometry< T, R > &geom, double width, int side=0)
Definition: Cells.h:99
F2CPoint
f2c::types::Point F2CPoint
Definition: types.h:38
2_objective_functions.swath2
swath2
Definition: 2_objective_functions.py:32


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