#include #include #include #include #include "game/geoData.h" using GeoMutation = std::function; using Something = std::tuple; BOOST_TEST_DONT_PRINT_LOG_VALUE(GeoMutation); BOOST_TEST_DECORATOR(*boost::unit_test::timeout(2)); BOOST_DATA_TEST_CASE(deformLogical, boost::unit_test::data::make({ {"nochange", [](GeoData &) {}, 16, 33, 18}, // No change base case {"simple", [](GeoData & geoData) { Surface surface; // Basic triangle, no crossing, simple case geoData.setHeights(std::array {{ {2000, 8000, 1000}, {2000, 4000, 1000}, {6000, 8000, 1000}, }}, {.surface = &surface, .nearNodeTolerance = 0}); }, 19, 42, 24}, {"simple-cross", [](GeoData & geoData) { Surface surface; // Basic triangle, with crossing, reasonably simple case geoData.setHeights(std::array {{ {2000, 8000, 1000}, {3000, 4000, 1000}, {4000, 9000, 1000}, }}, {.surface = &surface, .nearNodeTolerance = 0}); }, 19, 42, 24}, {"quad-multi-cross", [](GeoData & geoData) { Surface surface; // Basic quad, with crossing, spans into adjacent original triangle, should remove that edge geoData.setHeights(std::array {{ {2000, 8000, 1000}, {3000, 4000, 1000}, {4000, 9000, 1000}, {8000, 2000, 1000}, }}, {.surface = &surface, .nearNodeTolerance = 0}); }, 20, 45, 26}, }), name, func, expVertices, expEdges, expFaces) { auto geoData = GeoData::createFlat({0, 0}, {30'000, 30'000}, 1000); BOOST_REQUIRE_NO_THROW(func(geoData)); OpenMesh::IO::write_mesh(geoData, std::format("/tmp/mesh-{}.obj", name)); BOOST_CHECK_EQUAL(geoData.n_vertices(), expVertices); BOOST_CHECK_EQUAL(geoData.n_edges(), expEdges); BOOST_CHECK_EQUAL(geoData.n_faces(), expFaces); }