From 597e42d12f04695cd48091944b0c86196e70db14 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 20 Nov 2024 14:35:10 +0100 Subject: [PATCH] Test: Add unit test to read in 3MF file --- data/tests/mesh.3mf | Bin 0 -> 12279 bytes tests/src/Mod/Mesh/App/CMakeLists.txt | 3 +++ tests/src/Mod/Mesh/App/Importer.cpp | 30 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 data/tests/mesh.3mf create mode 100644 tests/src/Mod/Mesh/App/Importer.cpp diff --git a/data/tests/mesh.3mf b/data/tests/mesh.3mf new file mode 100644 index 0000000000000000000000000000000000000000..be9b26e41bba001553f854430b636b9c854aaa3c GIT binary patch literal 12279 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 B3Df`p literal 0 HcmV?d00001 diff --git a/tests/src/Mod/Mesh/App/CMakeLists.txt b/tests/src/Mod/Mesh/App/CMakeLists.txt index a0ede073d6..038682f4bb 100644 --- a/tests/src/Mod/Mesh/App/CMakeLists.txt +++ b/tests/src/Mod/Mesh/App/CMakeLists.txt @@ -1,8 +1,11 @@ +target_compile_definitions(Mesh_tests_run PRIVATE DATADIR="${CMAKE_SOURCE_DIR}/data") + target_sources( Mesh_tests_run PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Core/KDTree.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Exporter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/Importer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Mesh.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MeshFeature.cpp ) diff --git a/tests/src/Mod/Mesh/App/Importer.cpp b/tests/src/Mod/Mesh/App/Importer.cpp new file mode 100644 index 0000000000..fe6db60559 --- /dev/null +++ b/tests/src/Mod/Mesh/App/Importer.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +// NOLINTBEGIN(cppcoreguidelines-*,readability-*) +TEST(ImporterTest, Test3MF) +{ + std::string file(DATADIR); + file.append("/tests/mesh.3mf"); + + MeshCore::Reader3MF reader(file); + EXPECT_EQ(reader.Load(), true); + + std::vector ids = reader.GetMeshIds(); + std::sort(ids.begin(), ids.end()); + + EXPECT_EQ(ids.size(), 2); + + const MeshCore::MeshKernel& mesh1 = reader.GetMesh(ids[0]); + EXPECT_EQ(mesh1.CountPoints(), 8); + EXPECT_EQ(mesh1.CountEdges(), 18); + EXPECT_EQ(mesh1.CountFacets(), 12); + + const MeshCore::MeshKernel& mesh2 = reader.GetMesh(ids[1]); + EXPECT_EQ(mesh2.CountPoints(), 652); + EXPECT_EQ(mesh2.CountEdges(), 1950); + EXPECT_EQ(mesh2.CountFacets(), 1300); +} +// NOLINTEND(cppcoreguidelines-*,readability-*)