preCICE v3.2.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EdgeTest.cpp
Go to the documentation of this file.
1#include <Eigen/Core>
2#include <Eigen/src/Core/Matrix.h>
3#include <iosfwd>
4#include <string>
5#include "logging/Logger.hpp"
6#include "mesh/Edge.hpp"
7#include "mesh/Vertex.hpp"
9#include "testing/Testing.hpp"
10
11using namespace precice;
12using namespace precice::mesh;
13using namespace Eigen;
14
15BOOST_AUTO_TEST_SUITE(MeshTests)
16BOOST_AUTO_TEST_SUITE(EdgeTests)
17
20{
22 Vertex v1(Vector3d::Constant(0.0), 0);
23 Vertex v2(Vector3d::Constant(1.0), 1);
24 Edge edge(v1, v2);
25
26 BOOST_TEST(edge.getDimensions() == 3);
27 VectorXd coords1 = edge.vertex(0).getCoords();
28 VectorXd coords2 = edge.vertex(1).getCoords();
29 BOOST_TEST(coords1 == Vector3d::Constant(0.0));
30 BOOST_TEST(coords2 == Vector3d::Constant(1.0));
31
32 double expectedLenght = std::sqrt(3.0);
33 double expectedRadius = expectedLenght / 2.0;
34 BOOST_TEST(edge.getLength() == expectedLenght);
35 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
36 BOOST_TEST(testing::equals(edge.getCenter(), (coords1 + coords2) / 2));
37}
38
41{
43 Vertex v1(Vector2d::Constant(0.0), 0);
44 Vertex v2(Vector2d::Constant(1.0), 1);
45 Edge edge(v1, v2);
46 BOOST_TEST(edge.getDimensions() == 2);
47
48 double expectedLenght = std::sqrt(2.0);
49 double expectedRadius = expectedLenght / 2.0;
50 BOOST_TEST(edge.getLength() == expectedLenght);
51 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
52 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0.5, 0.5}));
53}
54
57{
59 Vertex v1(Vector2d::Constant(0.0), 0);
60 Vertex v2(Vector2d{1, 0}, 1);
61 Edge edge(v1, v2);
62 BOOST_TEST(edge.getDimensions() == 2);
63
64 double expectedLenght = std::sqrt(1.0);
65 double expectedRadius = expectedLenght / 2.0;
66 BOOST_TEST(edge.getLength() == expectedLenght);
67 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
68 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0.5, 0}));
69}
70
73{
75 Vertex v1(Vector2d::Constant(0.0), 0);
76 Vertex v2(Vector2d{0, 1}, 1);
77 Edge edge(v1, v2);
78 BOOST_TEST(edge.getDimensions() == 2);
79
80 double expectedLenght = std::sqrt(1.0);
81 double expectedRadius = expectedLenght / 2.0;
82 BOOST_TEST(edge.getLength() == expectedLenght);
83 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
84 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0, 0.5}));
85}
86
89{
91 Vertex v1(Vector3d::Constant(0.0), 0);
92 Vertex v2(Vector3d{1, 0, 0}, 1);
93 Edge edge(v1, v2);
94 BOOST_TEST(edge.getDimensions() == 3);
95
96 double expectedLenght = std::sqrt(1.0);
97 double expectedRadius = expectedLenght / 2.0;
98 BOOST_TEST(edge.getLength() == expectedLenght);
99 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
100 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0.5, 0, 0}));
101}
102
103PRECICE_TEST_SETUP(1_rank)
105{
106 PRECICE_TEST();
107 Vertex v1(Vector3d::Constant(0.0), 0);
108 Vertex v2(Vector3d{0, 1, 0}, 1);
109 Edge edge(v1, v2);
110 BOOST_TEST(edge.getDimensions() == 3);
111
112 double expectedLenght = std::sqrt(1.0);
113 double expectedRadius = expectedLenght / 2.0;
114 BOOST_TEST(edge.getLength() == expectedLenght);
115 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
116 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0, 0.5, 0}));
117}
118
119PRECICE_TEST_SETUP(1_rank)
121{
122 PRECICE_TEST();
123 Vertex v1(Vector3d::Constant(0.0), 0);
124 Vertex v2(Vector3d{0, 0, 1}, 1);
125 Edge edge(v1, v2);
126 BOOST_TEST(edge.getDimensions() == 3);
127
128 double expectedLenght = std::sqrt(1.0);
129 double expectedRadius = expectedLenght / 2.0;
130 BOOST_TEST(edge.getLength() == expectedLenght);
131 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
132 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0, 0, 0.5}));
133}
134
135PRECICE_TEST_SETUP(1_rank)
137{
138 PRECICE_TEST();
139 Vertex v1(Vector3d::Constant(0.0), 0);
140 Vertex v2(Vector3d::Constant(1.0), 1);
141 Edge edge(v1, v2);
142 BOOST_TEST(edge.getDimensions() == 3);
143
144 double expectedLenght = std::sqrt(3.0);
145 double expectedRadius = expectedLenght / 2.0;
146 BOOST_TEST(edge.getLength() == expectedLenght);
147 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
148 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d::Constant(0.5)));
149}
150
151PRECICE_TEST_SETUP(1_rank)
153{
154 PRECICE_TEST();
155 Vertex v1(Vector3d(0, 0, 0), 0);
156 Vertex v2(Vector3d(0, 0, 1), 0);
157 Vertex v3(Vector3d(0, 0, 2), 0);
158 Edge edge1(v1, v2);
159 Edge edge2(v2, v1);
160 Edge edge3(v1, v3);
161 Edge edge4(v1, v3);
162 BOOST_TEST(edge1 == edge2);
163 BOOST_TEST(edge1 != edge3);
164 BOOST_TEST(edge3 == edge4);
165}
166
167PRECICE_TEST_SETUP(1_rank)
169{
170 PRECICE_TEST();
171 Vertex v1(Vector2d(1., 2.), 0);
172 Vertex v2(Vector2d(2., 3.), 0);
173 Edge e1(v1, v2);
174 std::stringstream e1stream;
175 e1stream << e1;
176 std::string e1str("LINESTRING (1 2, 2 3)");
177 BOOST_TEST(e1str == e1stream.str());
178 Vertex v3(Vector3d(1., 2., 3.), 0);
179 Vertex v4(Vector3d(3., 2., 1.), 0);
180 Edge e2(v3, v4);
181 std::stringstream e2stream;
182 e2stream << e2;
183 std::string e2str("LINESTRING (1 2 3, 3 2 1)");
184 BOOST_TEST(e2str == e2stream.str());
185}
186
187PRECICE_TEST_SETUP(1_rank)
188BOOST_AUTO_TEST_CASE(EdgeConnectedTo)
189{
190 PRECICE_TEST();
191 Vertex v1(Vector3d(0, 0, 1), 0);
192 Vertex v2(Vector3d(0, 0, 2), 0);
193 Vertex v3(Vector3d(0, 0, 3), 0);
194 Vertex v4(Vector3d(0, 0, 4), 0);
195
196 Edge edge1(v1, v2);
197 Edge edge2(v2, v3);
198 BOOST_TEST(edge1.connectedTo(edge2));
199 BOOST_TEST(edge2.connectedTo(edge1));
200
201 Edge edge3(v3, v4);
202 BOOST_TEST(!edge1.connectedTo(edge3));
203 BOOST_TEST(!edge3.connectedTo(edge1));
204 BOOST_TEST(edge2.connectedTo(edge3));
205 BOOST_TEST(edge3.connectedTo(edge2));
206}
207
BOOST_AUTO_TEST_CASE(Edges)
Definition EdgeTest.cpp:19
BOOST_AUTO_TEST_SUITE(PreProcess)
BOOST_AUTO_TEST_SUITE_END()
#define PRECICE_TEST()
Definition Testing.hpp:39
#define PRECICE_TEST_SETUP(...)
Creates and attaches a TestSetup to a Boost test case.
Definition Testing.hpp:29
Linear edge of a mesh, defined by two Vertex objects.
Definition Edge.hpp:15
double getEnclosingRadius() const
Returns the radius of the enclosing circle of the edge.
Definition Edge.cpp:34
double getLength() const
Returns the length of the edge.
Definition Edge.cpp:23
int getDimensions() const
Returns number of spatial dimensions (2 or 3) the edge is embedded to.
Definition Edge.hpp:90
const Eigen::VectorXd getCenter() const
Returns the center of the edge.
Definition Edge.cpp:29
Vertex & vertex(int i)
Returns the edge's vertex with index 0 or 1.
Definition Edge.hpp:76
bool connectedTo(const Edge &other) const
Checks whether both edges share a vertex.
Definition Edge.cpp:39
Vertex of a mesh.
Definition Vertex.hpp:16
Eigen::VectorXd getCoords() const
Returns the coordinates of the vertex.
Definition Vertex.hpp:114
provides Mesh, Data and primitives.
boost::test_tools::predicate_result equals(const std::vector< float > &VectorA, const std::vector< float > &VectorB, float tolerance)
equals to be used in tests. Compares two std::vectors using a given tolerance. Prints both operands o...
Definition Testing.cpp:93
Main namespace of the precice library.
T sqrt(T... args)
T str(T... args)