diff --git a/.github/workflows/cmake-single-platform.yml b/.github/workflows/cmake-single-platform.yml index bb3be7f..8ded0d0 100644 --- a/.github/workflows/cmake-single-platform.yml +++ b/.github/workflows/cmake-single-platform.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Install deps - run: sudo apt install -y libopengl-dev libgl1-mesa-dev libxrandr-dev libxi-dev libxinerama-dev libgl-dev libxcursor-dev libmpfr-dev libmpfrc++-dev + run: sudo apt install -y libopengl-dev libgl1-mesa-dev libxrandr-dev libxi-dev libxinerama-dev libgl-dev libxcursor-dev libmpfr-dev libmpfrc++-dev libblas-dev liblapack-dev - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. @@ -34,9 +34,10 @@ jobs: # Build your program with the given configuration run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + - name: Build tests + run: cmake --build ${{github.workspace}}/build --target penner_tests --config ${{env.BUILD_TYPE}} + - name: Test working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: make test + run: ctest --output-on-failure --build-config ${{env.BUILD_TYPE}} diff --git a/CMakeLists.txt b/CMakeLists.txt index d8ac75f..c5fa2d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,11 @@ if (PROJECT_IS_TOP_LEVEL) option(BUILD_CURVATURE_METRIC_TESTS "Build tests" ON) option(CHECK_VALIDITY "Check validity pre and post conditions" ON) + if(BUILD_CURVATURE_METRIC_TESTS) + include(Catch2) + include(CTest) + endif() + # Set default libigl and suitesparse options option(LIBIGL_PREDICATES "Use Predicates" ON) set ( SUITESPARSE_ENABLE_PROJECTS "suitesparse_config;cholmod;spqr" ) diff --git a/src/feature/pybind.cpp b/src/feature/pybind.cpp index 84a8ea4..425d21d 100644 --- a/src/feature/pybind.cpp +++ b/src/feature/pybind.cpp @@ -21,6 +21,7 @@ #include "feature/core/common.h" #include "feature/core/component_mesh.h" #include "util/vf_corners.h" +#include "util/vf_mesh.h" #include "feature/dirichlet/constraint.h" #include "feature/dirichlet/optimization.h" #include "feature/dirichlet/dirichlet_penner_cone_metric.h" diff --git a/src/holonomy/pybind.cpp b/src/holonomy/pybind.cpp index b36ae7d..242bcb7 100644 --- a/src/holonomy/pybind.cpp +++ b/src/holonomy/pybind.cpp @@ -53,7 +53,21 @@ void init_holonomy_pybind(pybind11::module& m) pybind11::class_(m, "IntrinsicNRosyField") .def(pybind11::init<>()) .def("initialize", &IntrinsicNRosyField::initialize) - .def("set_field", &IntrinsicNRosyField::set_field) + .def("set_field", pybind11::overload_cast< + const Mesh&, + const std::vector&, + const Eigen::MatrixXi&, + const std::vector&, + const Eigen::VectorXd&, + const Eigen::MatrixXd&, + const Eigen::MatrixXi&>(&IntrinsicNRosyField::set_field)) + .def("set_field", pybind11::overload_cast< + const Mesh&, + const std::vector&, + const Eigen::MatrixXi&, + const Eigen::VectorXd&, + const Eigen::MatrixXd&, + const Eigen::MatrixXi&>(&IntrinsicNRosyField::set_field)) .def("compute_principal_matchings", &IntrinsicNRosyField::compute_principal_matchings) .def("fix_inconsistent_matchings", &IntrinsicNRosyField::fix_inconsistent_matchings) .def("compute_rotation_form", &IntrinsicNRosyField::compute_rotation_form); diff --git a/src/optimization/CMakeLists.txt b/src/optimization/CMakeLists.txt index e6ff6f2..8668534 100644 --- a/src/optimization/CMakeLists.txt +++ b/src/optimization/CMakeLists.txt @@ -55,3 +55,10 @@ if ((NOT USE_MULTIPRECISION) AND (DEBUG_WARNINGS)) -Wall -Wpedantic -Wextra -Werror ) endif() + +if(BUILD_CURVATURE_METRIC_TESTS) + add_executable(penner_tests tests/tests.cpp) + target_link_libraries(penner_tests PRIVATE PennerOptimizationLib Catch2::Catch2WithMain) + target_include_directories(penner_tests PRIVATE tests) + add_test(NAME penner_tests COMMAND penner_tests) +endif() diff --git a/src/optimization/parameterization/layout.cpp b/src/optimization/parameterization/layout.cpp index 330ee22..d47f920 100644 --- a/src/optimization/parameterization/layout.cpp +++ b/src/optimization/parameterization/layout.cpp @@ -212,6 +212,20 @@ double signed_area( } // find the previous halfedge of a halfedge in a mesh +template +int prev_halfedge( + const Mesh& m, + int hij) +{ + int hli = hij; + while (m.n[hli] != hij) + { + hli = m.n[hli]; + } + + return hli; +} + template int prev_halfedge( const OverlayMesh& m,