From c92a666658d6a409ea203108da39e67fa288948b Mon Sep 17 00:00:00 2001 From: Max Lyon Date: Wed, 5 Feb 2020 22:09:36 +0100 Subject: [PATCH] add unittest for writing and reading double positions and normals --- src/Unittests/unittests_read_write_OM.cc | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Unittests/unittests_read_write_OM.cc b/src/Unittests/unittests_read_write_OM.cc index e138f4cd..044227e0 100644 --- a/src/Unittests/unittests_read_write_OM.cc +++ b/src/Unittests/unittests_read_write_OM.cc @@ -1472,4 +1472,32 @@ TEST_F(OpenMeshReadWriteOM, LoadTriMeshVersion_7_5) { EXPECT_FALSE(ok) << file_name; } + +/* + * Try to write and load positions and normals that can only be represented by doubles + */ +TEST_F(OpenMeshReadWriteOM, WriteAndLoadDoubles) { + + typedef OpenMesh::PolyMesh_ArrayKernelT DoublePolyMesh; + + DoublePolyMesh mesh; + mesh.request_vertex_normals(); + + mesh.add_vertex(DoublePolyMesh::Point(1.0/3.0, std::numeric_limits::min(), std::numeric_limits::max())); + mesh.set_normal(OpenMesh::VertexHandle(0), DoublePolyMesh::Normal(1.0/3.0, std::numeric_limits::min(), std::numeric_limits::max())); + + std::string file_name = "doubles.om"; + + OpenMesh::IO::Options opt = OpenMesh::IO::Options::VertexNormal; + ASSERT_TRUE(OpenMesh::IO::write_mesh(mesh, file_name, opt)) << "Could not write file " << file_name; + + DoublePolyMesh mesh2; + mesh2.request_vertex_normals(); + + ASSERT_TRUE(OpenMesh::IO::read_mesh(mesh2, file_name, opt)) << "Could not read file " << file_name; + + EXPECT_EQ(mesh.point(OpenMesh::VertexHandle(0)), mesh2.point(OpenMesh::VertexHandle(0))); + EXPECT_EQ(mesh.normal(OpenMesh::VertexHandle(0)), mesh2.normal(OpenMesh::VertexHandle(0))); +} + }