MultiPoint_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_multipoint, init) {
11  F2CMultiPoint ps1;
12  EXPECT_EQ(ps1.size(), 0);
13  ps1.addPoint(1,1);
14  ps1.addPoint(2,1);
15  EXPECT_EQ(ps1.size(), 2);
16  F2CMultiPoint ps2{F2CPoint(1,2), F2CPoint(3,2), F2CPoint(1,3)};
17  EXPECT_EQ(ps2.size(), 3);
18  F2CMultiPoint ps3(std::vector<F2CPoint>({F2CPoint(1,2), F2CPoint(3,2), F2CPoint(1,3)}));
19  EXPECT_EQ(ps3.size(), 3);
20 
21  F2CMultiPoint ps4;
22  for (int i = 0; i < 10; ++i) {
23  ps4.addPoint( i, -i, 3 * i);
24  }
25  EXPECT_EQ(ps4.size(), 10);
26  EXPECT_EQ(ps4[5], F2CPoint(5, -5, 15));
27  int i = 0;
28  for (const auto& p : ps4) {
29  EXPECT_EQ(p, F2CPoint(i, -i, 3*i));
30  ++i;
31  }
32  for (auto&& p : ps4) {
33  p = p + F2CPoint(-1,2,-3);
34  }
35  i = 0;
36  for (auto&& p : ps4) {
37  EXPECT_EQ(p.getX(), i -1);
38  EXPECT_EQ(p.getY(), -i +2);
39  EXPECT_EQ(p.getZ(), 3*i -3);
40  ++i;
41  }
42  F2CPoint p_error;
43  EXPECT_THROW(ps4.getGeometry(30, p_error), std::out_of_range);
44  EXPECT_THROW(ps4.getGeometry(30), std::out_of_range);
45 
46  ps4 *= 2;
47  const auto ps5 = ps4.clone();
48  EXPECT_EQ(ps5.size(), 10);
49  for (int i = 0; i < ps5.size(); ++i) {
50  F2CPoint p = ps5.getGeometry(i);
51  EXPECT_EQ(p.getX(), 2*(i -1));
52  EXPECT_EQ(p.getY(), 2*(-i +2));
53  EXPECT_EQ(p.getZ(), 2*(3*i -3));
54  }
55  EXPECT_THROW(ps5.getGeometry(30, p_error), std::out_of_range);
56  EXPECT_THROW(ps5.getGeometry(30), std::out_of_range);
57 
58  ps4.addPoints(ps1);
59  EXPECT_EQ(ps4.size(), 12);
60  for (int i = 0; i < ps5.size(); ++i) {
61  F2CPoint p = ps4.getGeometry(i);
62  EXPECT_EQ(p.getX(), 2*(i -1));
63  EXPECT_EQ(p.getY(), 2*(-i +2));
64  EXPECT_EQ(p.getZ(), 2*(3*i -3));
65  }
66  EXPECT_EQ(ps4.getGeometry(10), F2CPoint(1,1));
67  EXPECT_EQ(ps4.getGeometry(11), F2CPoint(2,1));
68 }
69 
70 TEST(fields2cover_types_multipoint, getGeometry) {
71  F2CMultiPoint ps1{F2CPoint(1,2), F2CPoint(3,2,5), F2CPoint(1,3), F2CPoint(9,4, 0.2)};
72  EXPECT_EQ(ps1.size(), 4);
73  EXPECT_EQ(ps1.getGeometry(0).getX(), 1);
74  EXPECT_EQ(ps1.getGeometry(0).getY(), 2);
75  EXPECT_EQ(ps1.getGeometry(0).getZ(), 0);
76  EXPECT_EQ(ps1.getGeometry(3).getX(), 9);
77  EXPECT_EQ(ps1.getGeometry(3).getY(), 4);
78  EXPECT_EQ(ps1.getGeometry(3).getZ(), 0.2);
79 
80  const F2CMultiPoint ps2 = ps1.clone();
81  EXPECT_EQ(ps2.size(), 4);
82  EXPECT_EQ(ps2.getGeometry(1).getX(), 3);
83  EXPECT_EQ(ps2.getGeometry(1).getY(), 2);
84  EXPECT_EQ(ps2.getGeometry(1).getZ(), 5);
85  EXPECT_EQ(ps2.getGeometry(2).getX(), 1);
86  EXPECT_EQ(ps2.getGeometry(2).getY(), 3);
87  EXPECT_EQ(ps2.getGeometry(2).getZ(), 0);
88 }
89 
90 TEST(fields2cover_types_multipoint, getAngles) {
91  F2CMultiPoint ps1{F2CPoint(1,1), F2CPoint(2,2), F2CPoint(0, 2), F2CPoint(1, 1)};
92  EXPECT_EQ(ps1.size(), 4);
93  EXPECT_NEAR(ps1.getOutAngle(0), M_PI / 4.0, 1e-7);
94  EXPECT_NEAR(ps1.getInAngle(1), M_PI / 4.0, 1e-7);
95  EXPECT_NEAR(ps1.getOutAngle(1), M_PI, 1e-7);
96  EXPECT_NEAR(ps1.getInAngle(2), M_PI, 1e-7);
97  EXPECT_NEAR(ps1.getOutAngle(2), 7.0 * M_PI / 4.0, 1e-7);
98  EXPECT_NEAR(ps1.getInAngle(3), 7.0 * M_PI / 4.0, 1e-7);
99  EXPECT_THROW(ps1.getInAngle(0), std::invalid_argument);
100  EXPECT_THROW(ps1.getOutAngle(3), std::invalid_argument);
101 }
102 
103 
f2c::types::Point::getZ
double getZ() const
Definition: Point.cpp:97
types.h
f2c::types::Geometries::clone
SAMETYPE clone() const
Definition: Geometries_impl.hpp:19
TEST
TEST(fields2cover_types_multipoint, init)
Definition: MultiPoint_test.cpp:10
f2c::types::MultiPoint::addPoint
void addPoint(const Point &p)
Definition: MultiPoint.cpp:87
f2c::types::MultiPoint::getGeometry
void getGeometry(size_t i, Point &point)
Definition: MultiPoint.cpp:34
f2c::types::MultiPoint
Definition: MultiPoint.h:18
f2c::types::Point
Definition: Point.h:21
f2c::types::MultiPoint::size
size_t size() const
Definition: MultiPoint.cpp:30
f2c::types::Point::getY
double getY() const
Definition: Point.cpp:96
f2c::types::Point::getX
double getX() const
Definition: Point.cpp:95
F2CPoint
f2c::types::Point F2CPoint
Definition: types.h:38


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