From c8316a013e67e044f8786311c84c4434f72b3c61 Mon Sep 17 00:00:00 2001 From: Martin Schultz Date: Tue, 29 Sep 2015 17:12:43 +0200 Subject: [PATCH 1/3] * added basic vvrange testcase that checks if a mesh with only one vertex has an empty vvrange. --- src/Unittests/unittests_cpp_11_features.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Unittests/unittests_cpp_11_features.cc b/src/Unittests/unittests_cpp_11_features.cc index 935856f9..085e12cd 100644 --- a/src/Unittests/unittests_cpp_11_features.cc +++ b/src/Unittests/unittests_cpp_11_features.cc @@ -67,6 +67,25 @@ TEST_F(OpenMesh_Triangle, cpp11_initializer_test) { } +TEST_F(OpenMesh_Triangle, cpp11_vvrange_test) { + //check empty vvrange + mesh_.clear(); + Mesh::VertexHandle vh = mesh_.add_vertex(Mesh::Point(0, 1, 0)); + for(auto t : mesh_.vv_range(vh)) + { + FAIL() << "The vvrange for a single vertex is not empty"; + } +} + +TEST_F(OpenMesh_Poly, cpp11_vvrange_test) { + mesh_.clear(); + PolyMesh::VertexHandle vh = mesh_.add_vertex(PolyMesh::Point(0, 1, 0)); + for(auto t : mesh_.vv_range(vh)) + { + FAIL() << "The vvrange for a single vertex is not empty"; + } +} + #endif } From 3df14fae1a9d8e1a24122bdf258622d4ec351917 Mon Sep 17 00:00:00 2001 From: Martin Schultz Date: Thu, 1 Oct 2015 15:55:07 +0200 Subject: [PATCH 2/3] fixes #3 by checking Half Edge Handle validity on circulator creation --- src/OpenMesh/Core/Mesh/CirculatorsT.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenMesh/Core/Mesh/CirculatorsT.hh b/src/OpenMesh/Core/Mesh/CirculatorsT.hh index 250167ea..1bf8cb4c 100644 --- a/src/OpenMesh/Core/Mesh/CirculatorsT.hh +++ b/src/OpenMesh/Core/Mesh/CirculatorsT.hh @@ -202,7 +202,7 @@ class GenericCirculatorBaseT { GenericCirculatorBaseT() : mesh_(0), lap_counter_(0) {} GenericCirculatorBaseT(mesh_ref mesh, HalfedgeHandle heh, bool end = false) : - mesh_(&mesh), start_(heh), heh_(heh), lap_counter_(static_cast(end)) {} + mesh_(&mesh), start_(heh), heh_(heh), lap_counter_(static_cast(end && heh.is_valid())) {} GenericCirculatorBaseT(const GenericCirculatorBaseT &rhs) : mesh_(rhs.mesh_), start_(rhs.start_), heh_(rhs.heh_), lap_counter_(rhs.lap_counter_) {} From 4c80b7e52f47576007db0498d39e02c470f505b3 Mon Sep 17 00:00:00 2001 From: Martin Schultz Date: Thu, 1 Oct 2015 16:27:12 +0200 Subject: [PATCH 3/3] * added more unittests for c++11 ranges vvrange and vertexrange --- src/Unittests/unittests_cpp_11_features.cc | 179 +++++++++++++++++++-- 1 file changed, 169 insertions(+), 10 deletions(-) diff --git a/src/Unittests/unittests_cpp_11_features.cc b/src/Unittests/unittests_cpp_11_features.cc index 085e12cd..ec3cb64b 100644 --- a/src/Unittests/unittests_cpp_11_features.cc +++ b/src/Unittests/unittests_cpp_11_features.cc @@ -1,7 +1,7 @@ #include #include -#include +//#include namespace { @@ -67,23 +67,182 @@ TEST_F(OpenMesh_Triangle, cpp11_initializer_test) { } -TEST_F(OpenMesh_Triangle, cpp11_vvrange_test) { - //check empty vvrange + +// //////////////////////////////////////////////////////////////////// +// C++11 Range tests +// //////////////////////////////////////////////////////////////////// + + +/** + * @brief TEST_F test the vertexrange behaviour on trimeshes + */ +TEST_F(OpenMesh_Triangle, cpp11_vertexrange_test) { + //check empty vertexrange mesh_.clear(); - Mesh::VertexHandle vh = mesh_.add_vertex(Mesh::Point(0, 1, 0)); - for(auto t : mesh_.vv_range(vh)) + for(Mesh::VertexHandle t : mesh_.vertices()) { - FAIL() << "The vvrange for a single vertex is not empty"; + FAIL() << "The Vertexrange for an empty Mesh is not empty"; } + + //add vertices to mesh + mesh_.add_vertex(Mesh::Point(0, 1, 0)); + mesh_.add_vertex(Mesh::Point(1, 0, 0)); + mesh_.add_vertex(Mesh::Point(2, 1, 0)); + mesh_.add_vertex(Mesh::Point(0,-1, 0)); + mesh_.add_vertex(Mesh::Point(2,-1, 0)); + + //check nonempty mesh vertexrange + int iteration_counter = 0; + for(Mesh::VertexHandle t : mesh_.vertices()) + { + EXPECT_TRUE(t.is_valid()); + ++iteration_counter; + } + EXPECT_EQ(iteration_counter,5); } -TEST_F(OpenMesh_Poly, cpp11_vvrange_test) { +/** + * @brief TEST_F test the vertexrange behaviour on polymeshes + */ +TEST_F(OpenMesh_Poly, cpp11_vertexrange_test) { + //check empty vertexrange mesh_.clear(); - PolyMesh::VertexHandle vh = mesh_.add_vertex(PolyMesh::Point(0, 1, 0)); - for(auto t : mesh_.vv_range(vh)) + for(PolyMesh::VertexHandle t : mesh_.vertices()) { - FAIL() << "The vvrange for a single vertex is not empty"; + FAIL() << "The Vertexrange for an empty Mesh is not empty"; } + + //add vertices to mesh + mesh_.add_vertex(PolyMesh::Point(0, 1, 0)); + mesh_.add_vertex(PolyMesh::Point(1, 0, 0)); + mesh_.add_vertex(PolyMesh::Point(2, 1, 0)); + mesh_.add_vertex(PolyMesh::Point(0,-1, 0)); + mesh_.add_vertex(PolyMesh::Point(2,-1, 0)); + + //check nonempty mesh vertexrange + int iteration_counter = 0; + for(PolyMesh::VertexHandle t : mesh_.vertices()) + { + EXPECT_TRUE(t.is_valid()); + ++iteration_counter; + } + EXPECT_EQ(iteration_counter,5); +} + +/** + * @brief TEST_F test vvrange behaviour on trimeshes + */ +TEST_F(OpenMesh_Triangle, cpp11_vvrange_test) { + //check empty vv_range + mesh_.clear(); + Mesh::VertexHandle vhandle[5]; + vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0)); + for(Mesh::VertexHandle t : mesh_.vv_range(vhandle[0])) + { + FAIL() << "The vvrange for a single vertex in a TriMesh is not empty"; + } + + //add more vertices + vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0)); + vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0)); + vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0)); + vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0)); + + // Add 4 faces + std::vector face_vhandles; + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[2]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[1]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + //check nonempty vvrange + int iteration_counter = 0; + for(Mesh::VertexHandle t : mesh_.vv_range(vhandle[1])) + { + EXPECT_TRUE(t.is_valid()); + ++iteration_counter; + } + EXPECT_EQ(iteration_counter,4); +} + +/** + * @brief TEST_F test the vvrange behaviour on polymeshes + */ +TEST_F(OpenMesh_Poly, cpp11_vvrange_test) { + //check empty vv_range + mesh_.clear(); + Mesh::VertexHandle vhandle[5]; + vhandle[0] = mesh_.add_vertex(PolyMesh::Point(0, 1, 0)); + for(PolyMesh::VertexHandle t : mesh_.vv_range(vhandle[0])) + { + FAIL() << "The vvrange for a single vertex in a PolyMesh is not empty"; + } + + //add more vertices + vhandle[1] = mesh_.add_vertex(PolyMesh::Point(1, 0, 0)); + vhandle[2] = mesh_.add_vertex(PolyMesh::Point(2, 1, 0)); + vhandle[3] = mesh_.add_vertex(PolyMesh::Point(0,-1, 0)); + vhandle[4] = mesh_.add_vertex(PolyMesh::Point(2,-1, 0)); + + // Add 4 faces + std::vector face_vhandles; + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[2]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[1]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + //check nonempty vvrange + int iteration_counter = 0; + for(PolyMesh::VertexHandle t : mesh_.vv_range(vhandle[1])) + { + EXPECT_TRUE(t.is_valid()); + ++iteration_counter; + } + EXPECT_EQ(iteration_counter,4); } #endif