diff --git a/test/data/huygens.3ds b/test/data/huygens.3ds new file mode 100644 index 000000000..4fd5d2cb0 Binary files /dev/null and b/test/data/huygens.3ds differ diff --git a/test/integration/3ds_load_test.cpp b/test/integration/3ds_load_test.cpp new file mode 100644 index 000000000..366781d22 --- /dev/null +++ b/test/integration/3ds_load_test.cpp @@ -0,0 +1,37 @@ +#include +#include + +#include + +#include +#include + +TEST_CASE("Load a 3DS file", "[3ds] [integration]") +{ + std::unique_ptr scene = Read3DSFile("huygens.3ds"); + REQUIRE(scene != nullptr); + REQUIRE(scene->getMaterialCount() == 4); + + REQUIRE(scene->getModelCount() == UINT32_C(8)); + + std::uint32_t meshCount = 0; + std::uint32_t faceCount = 0; + std::uint32_t vertexCount = 0; + for (std::uint32_t i = 0; i < scene->getModelCount(); ++i) + { + const M3DModel* model = scene->getModel(i); + REQUIRE(model != nullptr); + meshCount += model->getTriMeshCount(); + for (std::uint32_t j = 0; j < model->getTriMeshCount(); ++j) + { + const M3DTriangleMesh* mesh = model->getTriMesh(j); + REQUIRE(mesh != nullptr); + faceCount += static_cast(mesh->getFaceCount()); + vertexCount += static_cast(mesh->getVertexCount()); + } + } + + REQUIRE(meshCount == 8); + REQUIRE(faceCount == 6098); + REQUIRE(vertexCount == 3263); +} diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index b49a753a5..a558916c2 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -1,4 +1,7 @@ +test_case(3ds_load) test_case(cmod_bin_ascii_roundtrip) +file(COPY "${CMAKE_SOURCE_DIR}/test/data/huygens.3ds" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") file(COPY "${CMAKE_SOURCE_DIR}/test/data/iss/models/iss.cmod" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")