preCICE
Loading...
Searching...
No Matches
EdgeTest.cpp
Go to the documentation of this file.
1#include <Eigen/Core>
2#include <iosfwd>
3#include <string>
4#include "logging/Logger.hpp"
5#include "mesh/Edge.hpp"
6#include "mesh/Vertex.hpp"
8#include "testing/Testing.hpp"
9
10using namespace precice;
11using namespace precice::mesh;
12using namespace Eigen;
13
14BOOST_AUTO_TEST_SUITE(MeshTests)
15BOOST_AUTO_TEST_SUITE(EdgeTests)
16
19{
21 Vertex v1(Vector3d::Constant(0.0), 0);
22 Vertex v2(Vector3d::Constant(1.0), 1);
23 Edge edge(v1, v2);
24
25 BOOST_TEST(edge.getDimensions() == 3);
26 VectorXd coords1 = edge.vertex(0).getCoords();
27 VectorXd coords2 = edge.vertex(1).getCoords();
28 BOOST_TEST(coords1 == Vector3d::Constant(0.0));
29 BOOST_TEST(coords2 == Vector3d::Constant(1.0));
30
31 double expectedLength = std::sqrt(3.0);
32 double expectedRadius = expectedLength / 2.0;
33 BOOST_TEST(edge.getLength() == expectedLength);
34 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
35 BOOST_TEST(testing::equals(edge.getCenter(), (coords1 + coords2) / 2));
36}
37
40{
42 Vertex v1(Vector2d::Constant(0.0), 0);
43 Vertex v2(Vector2d::Constant(1.0), 1);
44 Edge edge(v1, v2);
45 BOOST_TEST(edge.getDimensions() == 2);
46
47 double expectedLength = std::sqrt(2.0);
48 double expectedRadius = expectedLength / 2.0;
49 BOOST_TEST(edge.getLength() == expectedLength);
50 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
51 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0.5, 0.5}));
52}
53
56{
58 Vertex v1(Vector2d::Constant(0.0), 0);
59 Vertex v2(Vector2d{1, 0}, 1);
60 Edge edge(v1, v2);
61 BOOST_TEST(edge.getDimensions() == 2);
62
63 double expectedLength = std::sqrt(1.0);
64 double expectedRadius = expectedLength / 2.0;
65 BOOST_TEST(edge.getLength() == expectedLength);
66 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
67 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0.5, 0}));
68}
69
72{
74 Vertex v1(Vector2d::Constant(0.0), 0);
75 Vertex v2(Vector2d{0, 1}, 1);
76 Edge edge(v1, v2);
77 BOOST_TEST(edge.getDimensions() == 2);
78
79 double expectedLength = std::sqrt(1.0);
80 double expectedRadius = expectedLength / 2.0;
81 BOOST_TEST(edge.getLength() == expectedLength);
82 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
83 BOOST_TEST(testing::equals(edge.getCenter(), Vector2d{0, 0.5}));
84}
85
88{
90 Vertex v1(Vector3d::Constant(0.0), 0);
91 Vertex v2(Vector3d{1, 0, 0}, 1);
92 Edge edge(v1, v2);
93 BOOST_TEST(edge.getDimensions() == 3);
94
95 double expectedLength = std::sqrt(1.0);
96 double expectedRadius = expectedLength / 2.0;
97 BOOST_TEST(edge.getLength() == expectedLength);
98 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
99 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0.5, 0, 0}));
100}
101
102PRECICE_TEST_SETUP(1_rank)
104{
105 PRECICE_TEST();
106 Vertex v1(Vector3d::Constant(0.0), 0);
107 Vertex v2(Vector3d{0, 1, 0}, 1);
108 Edge edge(v1, v2);
109 BOOST_TEST(edge.getDimensions() == 3);
110
111 double expectedLength = std::sqrt(1.0);
112 double expectedRadius = expectedLength / 2.0;
113 BOOST_TEST(edge.getLength() == expectedLength);
114 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
115 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0, 0.5, 0}));
116}
117
118PRECICE_TEST_SETUP(1_rank)
120{
121 PRECICE_TEST();
122 Vertex v1(Vector3d::Constant(0.0), 0);
123 Vertex v2(Vector3d{0, 0, 1}, 1);
124 Edge edge(v1, v2);
125 BOOST_TEST(edge.getDimensions() == 3);
126
127 double expectedLength = std::sqrt(1.0);
128 double expectedRadius = expectedLength / 2.0;
129 BOOST_TEST(edge.getLength() == expectedLength);
130 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
131 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d{0, 0, 0.5}));
132}
133
134PRECICE_TEST_SETUP(1_rank)
136{
137 PRECICE_TEST();
138 Vertex v1(Vector3d::Constant(0.0), 0);
139 Vertex v2(Vector3d::Constant(1.0), 1);
140 Edge edge(v1, v2);
141 BOOST_TEST(edge.getDimensions() == 3);
142
143 double expectedLength = std::sqrt(3.0);
144 double expectedRadius = expectedLength / 2.0;
145 BOOST_TEST(edge.getLength() == expectedLength);
146 BOOST_TEST(edge.getEnclosingRadius() == expectedRadius);
147 BOOST_TEST(testing::equals(edge.getCenter(), Vector3d::Constant(0.5)));
148}
149
150PRECICE_TEST_SETUP(1_rank)
152{
153 PRECICE_TEST();
154 Vertex v1(Vector3d(0, 0, 0), 0);
155 Vertex v2(Vector3d(0, 0, 1), 0);
156 Vertex v3(Vector3d(0, 0, 2), 0);
157 Edge edge1(v1, v2);
158 Edge edge2(v2, v1);
159 Edge edge3(v1, v3);
160 Edge edge4(v1, v3);
161 BOOST_TEST(edge1 == edge2);
162 BOOST_TEST(edge1 != edge3);
163 BOOST_TEST(edge3 == edge4);
164}
165
166PRECICE_TEST_SETUP(1_rank)
168{
169 PRECICE_TEST();
170 Vertex v1(Vector2d(1., 2.), 0);
171 Vertex v2(Vector2d(2., 3.), 0);
172 Edge e1(v1, v2);
173 std::stringstream e1stream;
174 e1stream << e1;
175 std::string e1str("LINESTRING (1 2, 2 3)");
176 BOOST_TEST(e1str == e1stream.str());
177 Vertex v3(Vector3d(1., 2., 3.), 0);
178 Vertex v4(Vector3d(3., 2., 1.), 0);
179 Edge e2(v3, v4);
180 std::stringstream e2stream;
181 e2stream << e2;
182 std::string e2str("LINESTRING (1 2 3, 3 2 1)");
183 BOOST_TEST(e2str == e2stream.str());
184}
185
186PRECICE_TEST_SETUP(1_rank)
187BOOST_AUTO_TEST_CASE(EdgeConnectedTo)
188{
189 PRECICE_TEST();
190 Vertex v1(Vector3d(0, 0, 1), 0);
191 Vertex v2(Vector3d(0, 0, 2), 0);
192 Vertex v3(Vector3d(0, 0, 3), 0);
193 Vertex v4(Vector3d(0, 0, 4), 0);
194
195 Edge edge1(v1, v2);
196 Edge edge2(v2, v3);
197 BOOST_TEST(edge1.connectedTo(edge2));
198 BOOST_TEST(edge2.connectedTo(edge1));
199
200 Edge edge3(v3, v4);
201 BOOST_TEST(!edge1.connectedTo(edge3));
202 BOOST_TEST(!edge3.connectedTo(edge1));
203 BOOST_TEST(edge2.connectedTo(edge3));
204 BOOST_TEST(edge3.connectedTo(edge2));
205}
206
BOOST_AUTO_TEST_CASE(testIQNIMVJPPWithSubsteps)
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.