Developer Documentation
Loading...
Searching...
No Matches
unittests_properties.cc
1
2#include <iostream>
3
4#include "unittests_common.hh"
5
6#include <OpenVolumeMesh/Attribs/StatusAttrib.hh>
7
8using namespace OpenVolumeMesh;
9using namespace Geometry;
10
11TEST_F(PolyhedralMeshBase, PropertySmartPointerTestSimple) {
12
13 generatePolyhedralMesh(mesh_);
14
15 for(int i = 0; i < 1; ++i) {
16
17 VertexPropertyT<float> v_prop = mesh_.request_vertex_property<float>("SimpleTestProp");
18 }
19}
20
21TEST_F(PolyhedralMeshBase, PropertySmartPointerTest1) {
22
23 generatePolyhedralMesh(mesh_);
24
25 EXPECT_EQ(12u, mesh_.n_vertices());
26 const size_t nvp = mesh_.n_vertex_props();
27
28 VertexPropertyT<double> v_prop_d = mesh_.request_vertex_property<double>("MyVPropDbl");
29 EXPECT_EQ(nvp + 1, mesh_.n_vertex_props());
30
31 for(int i = 0; i < 1; ++i) {
32
33 VertexPropertyT<float> v_prop = mesh_.request_vertex_property<float>("MyVProp");
34
35 v_prop[VertexHandle(0)] = 1.4f;
36
37 VertexPropertyT<float> v_prop2(v_prop);
38
39 VertexPropertyT<float> v_prop3 = v_prop;
40
41 EXPECT_EQ(12u, v_prop3.size());
42
43 EXPECT_EQ(nvp + 2, mesh_.n_vertex_props());
44
45 VertexPropertyT<float> v_prop_duplicate = mesh_.request_vertex_property<float>("MyVProp");
46
47 EXPECT_EQ(nvp + 2, mesh_.n_vertex_props());
48
49 EXPECT_FLOAT_EQ(1.4f, v_prop3[VertexHandle(0)]);
50
51 VertexPropertyT<std::string> v_prop_duplicate_2 = mesh_.request_vertex_property<std::string>("MyVProp");
52
53 EXPECT_EQ(nvp + 3, mesh_.n_vertex_props());
54 }
55
56 mesh_.set_persistent(v_prop_d);
57
58 EXPECT_EQ(nvp + 1, mesh_.n_vertex_props());
59
60 mesh_.add_vertex(Vec3d(0.0, 0.0, 0.0));
61
62 EXPECT_EQ(13u, mesh_.n_vertices());
63
64 VertexPropertyT<double> v_prop_d2 = mesh_.request_vertex_property<double>("MyVPropDbl");
65
66 EXPECT_EQ(nvp + 1, mesh_.n_vertex_props());
67
68 HalfEdgePropertyT<int> he_prop = mesh_.request_halfedge_property<int>("MyHEProp");
69
70 EXPECT_EQ(40u, he_prop.size());
71
72 mesh_.add_edge(VertexHandle(0), VertexHandle(2));
73
74 EXPECT_EQ(42u, he_prop.size());
75}
76
77TEST_F(HexahedralMeshBase, PropertySmartPointerPersistencyTest1) {
78
79 generateHexahedralMesh(mesh_);
80
81 for(int i = 0; i < 1; ++i) {
82
83 VertexPropertyT<float> v_prop = mesh_.request_vertex_property<float>("FloatVProp");
84
85 v_prop[VertexHandle(0)] = 24.5f;
86 v_prop[VertexHandle(11)] = 2.34f;
87
88 mesh_.set_persistent(v_prop);
89 }
90
91 VertexPropertyT<float> v_prop2 = mesh_.request_vertex_property<float>("FloatVProp");
92
93 EXPECT_FLOAT_EQ(24.5f, v_prop2[VertexHandle(0)]);
94 EXPECT_FLOAT_EQ(2.34f, v_prop2[VertexHandle(11)]);
95}
96
97TEST_F(HexahedralMeshBase, PropertySmartPointerPersistencyTest2) {
98
99 generateHexahedralMesh(mesh_);
100 const size_t nvp = mesh_.n_vertex_props();
101
102 for(int i = 0; i < 1; ++i) {
103
104 VertexPropertyT<float> v_prop = mesh_.request_vertex_property<float>("FloatVProp");
105
106 mesh_.set_persistent(v_prop);
107 }
108
109 EXPECT_EQ(nvp + 1, mesh_.n_vertex_props());
110
111 for(int i = 0; i < 1; ++i) {
112
113 VertexPropertyT<float> v_prop = mesh_.request_vertex_property<float>("FloatVProp");
114
115 EXPECT_EQ(nvp + 1, mesh_.n_vertex_props());
116
117 mesh_.set_persistent(v_prop, false);
118 }
119
120 EXPECT_EQ(nvp, mesh_.n_vertex_props());
121}
122
123TEST_F(HexahedralMeshBase, AnonymousPropertiesTest1) {
124
125 generateHexahedralMesh(mesh_);
126
127 CellPropertyT<float> c_prop = mesh_.request_cell_property<float>();
128 CellPropertyT<float> c_prop2 = c_prop;
129
130 EXPECT_EQ(1u, mesh_.n_cell_props());
131
132 // only shared props can be persistent
133 EXPECT_THROW(mesh_.set_persistent(c_prop), std::runtime_error);
134
135 // anonymous properties cannot be be shared
136 EXPECT_THROW(mesh_.set_shared(c_prop), std::runtime_error);
137
138 c_prop.set_name("test");
139
140 EXPECT_EQ(c_prop2.name(), "test");
141
142
143 // only shared props can be persistent
144 EXPECT_THROW(mesh_.set_persistent(c_prop), std::runtime_error);
145 mesh_.set_shared(c_prop);
146 mesh_.set_persistent(c_prop);
147
148 EXPECT_EQ(1u, mesh_.n_cell_props());
149 EXPECT_EQ(1u, mesh_.n_persistent_props<Entity::Cell>());
150
151 mesh_.set_persistent(c_prop2, false);
152
153 EXPECT_EQ(1u, mesh_.n_cell_props());
154 EXPECT_EQ(0u, mesh_.n_persistent_props<Entity::Cell>());
155}
156
157TEST_F(HexahedralMeshBase, AnonymousPropertiesTest2) {
158
159 generateHexahedralMesh(mesh_);
160
161 CellPropertyT<float> c_prop1 = mesh_.request_cell_property<float>();
162
163 for(int i = 0; i < 1; ++i) {
164
165 CellPropertyT<float> c_prop2 = mesh_.request_cell_property<float>();
166 EXPECT_EQ(2u, mesh_.n_cell_props());
167 }
168
169 EXPECT_EQ(1u, mesh_.n_cell_props());
170}
171
172TEST_F(PolyhedralMeshBase, StatusTest) {
173
174 generatePolyhedralMesh(mesh_);
175
176 EXPECT_EQ(12u, mesh_.n_vertices());
177
178 StatusAttrib status(mesh_);
179}
180
181TEST_F(PolyhedralMeshBase, PropertyOnConstMesh)
182{
183 auto test = [](auto const &mesh) {
184 auto prop = mesh.template create_private_property<int, Entity::Vertex>();
185 };
186
187
188 generatePolyhedralMesh(mesh_);
189 test(mesh_);
190}
191
192
193TEST_F(PolyhedralMeshBase, PropertyAtAccess)
194{
195 generatePolyhedralMesh(mesh_);
196 auto prop = mesh_.create_private_property<int, Entity::Vertex>();
197 prop.at(VertexHandle(1)) = 12345;
198 EXPECT_EQ(prop.at(VertexHandle(1)), 12345);
199 try {
200 prop.at(VertexHandle(654321)) = 1;
201 FAIL() << "Expected exception";
202 } catch (std::out_of_range &) {
203 }
204
205}
206
207TEST_F(PolyhedralMeshBase, EntitySwapInt)
208{
209 generatePolyhedralMesh(mesh_);
210 auto prop = mesh_.create_private_property<int, Entity::Vertex>();
211 auto v0 = VertexHandle(0);
212 auto v1 = VertexHandle(1);
213 prop[v0] = 23;
214 prop[v1] = 42;
215 mesh_.swap_vertex_indices(v0, v1);
216 EXPECT_EQ(prop[v0], 42);
217 EXPECT_EQ(prop[v1], 23);
218}
219
220TEST_F(PolyhedralMeshBase, EntitySwapBool)
221{
222 generatePolyhedralMesh(mesh_);
223 auto prop = mesh_.create_private_property<bool, Entity::Vertex>();
224 auto v0 = VertexHandle(0);
225 auto v1 = VertexHandle(1);
226 prop[v0] = false;
227 prop[v1] = true;
228 mesh_.swap_vertex_indices(v0, v1);
229 EXPECT_EQ(prop[v0], true);
230 EXPECT_EQ(prop[v1], false);
231}
232
233
234
SmartVertexHandle add_vertex(const Point _p)
Definition PolyMeshT.hh:255