LineString_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_linestring, init) {
12  line1.addPoint(1,1);
13  line1.addPoint(2,1);
14  EXPECT_EQ(line1.size(), 2);
15  F2CLineString line2({F2CPoint(1,2), F2CPoint(3,2), F2CPoint(1,3)});
16  EXPECT_EQ(line2.size(), 3);
17  EXPECT_EQ(line2.getX(0), 1);
18  EXPECT_EQ(line2.getX(1), 3);
19  EXPECT_EQ(line2.X(1), 3);
20  EXPECT_EQ(line2.Y(1), 2);
21  EXPECT_EQ(line2.Z(1), 0);
22  F2CLineString line3{F2CPoint(2,3)};
23  EXPECT_EQ(line3.size(), 1);
24  EXPECT_EQ(line3.getX(0), 2);
25  const F2CPoint p {20, 30};
26  F2CLineString line4{p};
27  EXPECT_EQ(line4.size(), 1);
28  auto p2 = line4.getGeometry(0);
29  EXPECT_EQ(p2.getX(), 20);
30  EXPECT_EQ(p2.getY(), 30);
31  F2CLineString line5(std::vector<F2CPoint>({F2CPoint(1,2), F2CPoint(3,2), F2CPoint(1,3)}));
32  EXPECT_EQ(line5.size(), 3);
33  EXPECT_EQ(line5.getX(0), 1);
34  EXPECT_EQ(line5.getX(1), 3);
35 
36  F2CLineString line6(static_cast<OGRGeometry*>(line5.get()), f2c::types::EmptyDestructor());
37  EXPECT_EQ(line6.size(), 3);
38  EXPECT_EQ(line6.getX(0), 1);
39  EXPECT_EQ(line6.getX(1), 3);
40 
41  OGRLineString ogr_line = *(line5.get());
42  F2CLineString line7(ogr_line);
43  EXPECT_EQ(line7.size(), 3);
44  EXPECT_EQ(line7.getX(0), 1);
45  EXPECT_EQ(line7.getX(1), 3);
46 
47  F2CPoint error_p;
48  const F2CLineString c_line = line7.clone();
49  EXPECT_THROW(line7.getGeometry(100, error_p), std::out_of_range);
50  EXPECT_THROW(c_line.getGeometry(100, error_p), std::out_of_range);
51  EXPECT_THROW(line7.getGeometry(100), std::out_of_range);
52  EXPECT_THROW(c_line.getGeometry(100), std::out_of_range);
53 }
54 
55 TEST(fields2cover_types_linestring, loop) {
56  F2CLineString line(std::vector<F2CPoint>({F2CPoint(1,2), F2CPoint(3,4), F2CPoint(5,6)}));
57  int i = 1;
58  for (const F2CPoint& p : line) {
59  EXPECT_EQ(p, F2CPoint(i, i+1));
60  i += 2;
61  }
62  i = 1;
63  for (F2CPoint& p : line) {
64  EXPECT_EQ(p, F2CPoint(i, i+1));
65  i += 2;
66  }
67  i = 1;
68  for (auto&& p : line) {
69  EXPECT_EQ(p, F2CPoint(i, i+1));
70  i += 2;
71  }
72  i = 1;
73  for (auto&& p : line) {
74  p *= -1;
75  EXPECT_EQ(p, F2CPoint(-i, -i-1));
76  i += 2;
77  }
78 
79  EXPECT_EQ(line.getX(0), -1);
80  EXPECT_EQ(line.getY(0), -2);
81 }
82 
83 
84 TEST(fields2cover_types_linestring, closestPointTo) {
85  F2CLineString line(std::vector<F2CPoint>({F2CPoint(1,2), F2CPoint(3,2), F2CPoint(3,7)}));
86  EXPECT_EQ(line.closestPointTo(F2CPoint(0, 0)), F2CPoint(1, 2));
87  EXPECT_EQ(line.closestPointTo(F2CPoint(2, -5)), F2CPoint(2, 2));
88  EXPECT_EQ(line.closestPointTo(F2CPoint(3, 5)), F2CPoint(3, 5));
89  EXPECT_EQ(line.closestPointTo(F2CPoint(5, 4)), F2CPoint(3, 4));
90 }
91 
92 TEST(fields2cover_types_linestring, startAngle_and_endAngle) {
93  F2CLineString line(std::vector<F2CPoint>({
94  F2CPoint(1,-1), F2CPoint(3,1), F2CPoint(4,2), F2CPoint(4,-2)}));
95  EXPECT_NEAR(line.startAngle(), 0.25*M_PI, 1e-3);
96  EXPECT_NEAR(line.endAngle(), 1.5*M_PI, 1e-3);
97 }
98 
99 
f2c::types::LineString::getX
double getX(size_t i) const
Definition: LineString.cpp:44
f2c::types::LineString::closestPointTo
Point closestPointTo(const Point &p) const
Definition: LineString.cpp:130
1_basic_types.line2
line2
Definition: 1_basic_types.py:61
types.h
f2c::types::LineString::getGeometry
void getGeometry(size_t i, Point &point)
Definition: LineString.cpp:54
f2c::types::Geometries::clone
SAMETYPE clone() const
Definition: Geometries_impl.hpp:19
f2c::types::LineString::startAngle
double startAngle() const
Definition: LineString.cpp:122
1_basic_types.p2
p2
Definition: 1_basic_types.py:15
f2c::types::Geometry::get
T * get()
Definition: Geometry_impl.hpp:71
f2c::types::LineString
Definition: LineString.h:19
f2c::types::Point
Definition: Point.h:21
f2c::types::LineString::size
size_t size() const
Definition: LineString.cpp:49
f2c::types::EmptyDestructor
Definition: Geometry.h:23
TEST
TEST(fields2cover_types_linestring, init)
Definition: LineString_test.cpp:10
1_basic_types.line1
line1
Definition: 1_basic_types.py:56
F2CPoint
f2c::types::Point F2CPoint
Definition: types.h:38
f2c::types::LineString::endAngle
double endAngle() const
Definition: LineString.cpp:126


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