diff --git a/.gitmodules b/.gitmodules index b312ac8b42..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "cmake"] - path = cmake - url = https://github.com/jrl-umi3218/jrl-cmakemodules -[submodule "models/example-robot-data"] - path = models/example-robot-data - url = https://github.com/Gepetto/example-robot-data.git diff --git a/CMakeLists.txt b/CMakeLists.txt index dc95c6f58e..47f7292b06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,856 +1,1426 @@ -# # Copyright (c) 2015-2025 CNRS INRIA -# Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. -# cmake_minimum_required(VERSION 3.22) -set(PROJECT_NAME pinocchio) -set(PROJECT_DESCRIPTION - "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" +project( + pinocchio + VERSION 4.1.0 + DESCRIPTION + "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" + HOMEPAGE_URL "http://github.com/stack-of-tasks/pinocchio" + LANGUAGES CXX ) -set(PROJECT_URL "http://github.com/stack-of-tasks/pinocchio") -set(PROJECT_CUSTOM_HEADER_EXTENSION "hpp") -if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(PROJECT_USE_CMAKE_EXPORT TRUE) -endif() -set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE) -set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion) -set(PINOCCHIO_PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) -# To enable jrl-cmakemodules compatibility with workspace we must define the two following lines -set(PROJECT_AUTO_RUN_FINALIZE FALSE) -set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) -# Disable -Werror on Unix for now. -set(CXX_DISABLE_WERROR True) -set(CMAKE_VERBOSE_MAKEFILE True) +include(cmake/get-jrl-cmakemodules.cmake) + +jrl_configure_defaults() # ---------------------------------------------------- # --- OPTIONS --------------------------------------- -# Need to be set before including base.cmake # ---------------------------------------------------- -option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) -option(PINOCCHIO_DOXYGEN_USE_MATHJAX "Avoid latex at build time" OFF) - -# Check if the submodule cmake have been initialized -set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake") -if(EXISTS "${JRL_CMAKE_MODULES}/base.cmake") - message(STATUS "JRL cmakemodules found in 'cmake/' git submodule") -else() - find_package(jrl-cmakemodules QUIET CONFIG) - if(jrl-cmakemodules_FOUND) - get_property( - JRL_CMAKE_MODULES - TARGET jrl-cmakemodules::jrl-cmakemodules - PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ) - message( - STATUS - "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}" - ) - else() - message(STATUS "JRL cmakemodules not found. Let's fetch it.") - include(FetchContent) - FetchContent_Declare( - "jrl-cmakemodules" - GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git" - ) - FetchContent_MakeAvailable("jrl-cmakemodules") - FetchContent_GetProperties( - "jrl-cmakemodules" - SOURCE_DIR JRL_CMAKE_MODULES - ) - endif() -endif() -if(PINOCCHIO_DOXYGEN_USE_MATHJAX) - set(DOXYGEN_USE_MATHJAX YES) -endif() +jrl_option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) +jrl_option(BUILD_BENCHMARK "Build the benchmarks" OFF) +jrl_option(BUILD_EXAMPLES "Build the examples" ON) +jrl_option(BUILD_UTILS "Build the utils" OFF) +jrl_option(GENERATE_PYTHON_STUBS "Generate the Python stubs associated to the Python library" OFF) +jrl_option(BUILD_WITH_COMMIT_VERSION "Build libraries by setting specific commit version" OFF) +jrl_option(BUILD_TESTING "build the tests" ON) +jrl_option(BUILD_ADVANCED_TESTING "Build the advanced tests (multiprecision, etc.) of Pinocchio" OFF) +jrl_option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) +jrl_option(BUILD_WITH_URDF_SUPPORT "Build the library with the URDF format support" ON) +jrl_option(BUILD_WITH_SDF_SUPPORT "Build the library with the SDF format support" OFF) +jrl_option(BUILD_WITH_COLLISION_SUPPORT "Build the library with the collision support (required coal)" OFF) +jrl_option(BUILD_WITH_AUTODIFF_SUPPORT "Build the library with the automatic differentiation support (via CppAD)" OFF) +jrl_option( BUILD_WITH_CASADI_SUPPORT "Build the library with the support of CASADI" OFF) +# cppadcodgen don't build well with CL +jrl_option(BUILD_WITH_CODEGEN_SUPPORT + "Build the library with the support of code generation (via CppADCodeGen)" + OFF + CONDITION "NOT WIN32" + FALLBACK OFF +) +jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) +jrl_option(BUILD_PYTHON_INTERFACE "Build the Python bindings" ON) +jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT + "Build the Python interface with Boost.Multiprecision MPFR support" + OFF + CONDITION BUILD_PYTHON_INTERFACE + FALLBACK OFF +) +jrl_option(BUILD_WITH_LIBPYTHON + "Build the library with Python format support" + ON + CONDITION BUILD_PYTHON_INTERFACE + FALLBACK OFF +) +jrl_option(BUILD_WITH_ACCELERATE_SUPPORT + "Build Pinocchio with the Accelerate support" + OFF + CONDITION APPLE + FALLBACK OFF +) +jrl_option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) +jrl_option(ASSERT_ON_EXCEPTION "Turns Pinocchio excpetions into asserts for debug purposes" OFF) +jrl_option(ENABLE_TEMPLATE_INSTANTIATION "Template instantiation of the main library" ON) +jrl_option(PINOCCHIO_BUILD_WITH_TRACY "Build with tracy profiler for performance analysis" OFF) +jrl_option( BUILD_WITH_RTSAN "Build with the Realtime Sanitizer (clang >=20, linux/mac only)" OFF) +jrl_option(PINOCCHIO_INSTALL_DEPRECATED_HEADERS "Use and install deprecated headers" ON) +# PCH and ccache doesn't play well together so we deactivate +# PCH use by default +jrl_option(PINOCCHIO_BUILD_BINDING_WITH_PCH "Use PCH to accelerate binding build" OFF) +jrl_option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" ON) +jrl_option(BUILD_WITH_EXTRA_SUPPORT "Build with extra support" ON) # ---------------------------------------------------- -# --- Policy ----------------------------------------- -# CMake Policy setup +# --- DEPENDENCIES ----------------------------------- # ---------------------------------------------------- -# Policy can be removed when cmake_minimum_required is updated. +# TODO why not neccessary in Simple +set(Boost_USE_DEBUG_RUNTIME OFF) -# We also set CMAKE_POLICY_DEFAULT_CMPXXXX because CMake modules can reset policy and redefine some -# macros like `find_dependency` that will not use our policy. +jrl_find_package(Eigen3 CONFIG REQUIRED EXPECTED_TARGETS Eigen3::Eigen) +jrl_find_package(Boost CONFIG REQUIRED COMPONENTS serialization filesystem + EXPECTED_TARGETS Boost::boost Boost::serialization Boost::filesystem +) -# Use BoostConfig module distributed by boost library instead of using FindBoost module distributed -# by CMake (to remove in 3.30). This policy is not working when using clang-cl. -if(NOT WIN32 OR NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - if(POLICY CMP0167) - cmake_policy(SET CMP0167 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0167 NEW) - endif() +if(BUILD_WITH_COLLISION_SUPPORT) + jrl_find_package(coal CONFIG REQUIRED) endif() -# install() DESTINATION paths are normalized (to remove in 3.31). -if(POLICY CMP0177) - cmake_policy(SET CMP0177 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0177 NEW) + +if(BUILD_TESTING) + jrl_find_package(Boost CONFIG REQUIRED COMPONENTS unit_test_framework + EXPECTED_TARGETS Boost::unit_test_framework + ) endif() -include("${JRL_CMAKE_MODULES}/base.cmake") -compute_project_args(PROJECT_ARGS LANGUAGES CXX) -project(${PROJECT_NAME} ${PROJECT_ARGS}) +if(BUILD_WITH_URDF_SUPPORT) + jrl_find_package(urdfdom_headers REQUIRED) + jrl_find_package(urdfdom REQUIRED EXPECTED_TARGETS urdfdom::urdf_parser) + jrl_find_package(console_bridge CONFIG REQUIRED EXPECTED_TARGETS console_bridge::console_bridge) +endif() -set(INSTALL_PKG_CONFIG_FILE OFF CACHE BOOL "" FORCE) +if(BUILD_WITH_SDF_SUPPORT) + # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 + set(SDF_VERSIONS "15" "13" "12") + list(APPEND SDF_VERSIONS "") + foreach(version IN LISTS SDF_VERSIONS) + find_package(SDFormat${version} QUIET) + if(SDFormat${version}_FOUND) + set(SDFormat_FOUND True) + jrl_find_package(SDFormat${version} CONFIG) + message(STATUS "SDFormat${version} Found") + add_library( + pinocchio_sdformat + ALIAS sdformat${version}::sdformat${version} + ) + break() + endif() + endforeach(version) + if(NOT SDFormat_FOUND) + message( + FATAL_ERROR + "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" + ) + endif() +endif() -include("${JRL_CMAKE_MODULES}/tracy.cmake") -include("${JRL_CMAKE_MODULES}/python.cmake") -include("${JRL_CMAKE_MODULES}/boost.cmake") -include("${JRL_CMAKE_MODULES}/ide.cmake") -include("${JRL_CMAKE_MODULES}/apple.cmake") -include(CMakeDependentOption) +if(BUILD_WITH_CODEGEN_SUPPORT) + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" + ) + jrl_find_package(cppadcg REQUIRED EXPECTED_TARGETS cppadcg::cppadcg) + set(BUILD_WITH_AUTODIFF_SUPPORT TRUE) +endif(BUILD_WITH_CODEGEN_SUPPORT) -# If needed, set CMake policy for APPLE systems -apply_default_apple_configuration() +if(BUILD_WITH_AUTODIFF_SUPPORT) + # TODO remove when jrl v2 provide findcppad in find modules + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" + ) + jrl_find_package(cppad REQUIRED EXPECTED_TARGETS cppad::cppad) +endif() -# Force C++ standard to be C++17 at least -check_minimal_cxx_standard(17 ENFORCE) +set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") +jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) -# --- OPTIONS ---------------------------------------- -option(BUILD_BENCHMARK "Build the benchmarks" OFF) -option(BUILD_EXAMPLES "Build the examples" ON) -option(BUILD_UTILS "Build the utils" OFF) -option( - GENERATE_PYTHON_STUBS - "Generate the Python stubs associated to the Python library" - OFF +get_target_property( + EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF + example-robot-data::example-robot-data + INTERFACE_COMPILE_DEFINITIONS ) -option( - BUILD_WITH_COMMIT_VERSION - "Build libraries by setting specific commit version" - OFF +string( + REPLACE "EXAMPLE_ROBOT_DATA_MODEL_DIR=" + "" + EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES + "${EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF}" +) +string( + REPLACE "\"" + "" + EXAMPLE_ROBOT_DATA_MODEL_DIR + "${EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES}" ) -if(DEFINED BUILD_UNIT_TESTS) - message( - AUTHOR_WARNING - "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\ - If you are manually building Pinocchio from source in an existing build folder,\ - we suggest that you delete your build folder and make a new one." - ) - set(BUILD_TESTING ${BUILD_UNIT_TESTS}) -endif(DEFINED BUILD_UNIT_TESTS) +if(BUILD_WITH_CASADI_SUPPORT) + jrl_find_package(casadi REQUIRED) + # Normalize CasADi link target across versions. + #Prefer imported target (casadi::casadi), then legacy target (casadi) + if(NOT TARGET casadi::casadi AND TARGET casadi) + add_library(casadi::casadi ALIAS casadi) + endif() +endif() -option( - BUILD_ADVANCED_TESTING - "Build the advanced tests (multiprecision, etc.) of Pinocchio" - OFF -) -option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) +if(BUILD_WITH_EXTRA_SUPPORT) + jrl_find_package(Qhull COMPONENTS qhullcpp qhull_r REQUIRED EXPECTED_TARGETS Qhull::qhullcpp Qhull::qhull_r) +endif() -# --- OPTIONAL DEPENDENCIES ------------------------- -option( - BUILD_WITH_URDF_SUPPORT - "Build the library with the URDF format support" - ON -) -option( - BUILD_WITH_SDF_SUPPORT - "Build the library with the SDF format support" - OFF -) -option( - BUILD_WITH_COLLISION_SUPPORT - "Build the library with the collision support (required coal)" - OFF -) -option( - BUILD_WITH_AUTODIFF_SUPPORT - "Build the library with the automatic differentiation support (via CppAD)" - OFF -) -option( - BUILD_WITH_CASADI_SUPPORT - "Build the library with the support of CASADI" - OFF +if( + PINOCCHIO_BUILD_MPFR_TESTING + OR BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT ) -# cppadcodgen don't build well with CL -if(NOT WIN32) - option( - BUILD_WITH_CODEGEN_SUPPORT - "Build the library with the support of code generation (via CppADCodeGen)" - OFF + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/GMP" + ) + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR" ) + jrl_find_package(MPFR REQUIRED EXPECTED_TARGETS MPFR::MPFR) endif() -option( - BUILD_WITH_OPENMP_SUPPORT - "Build the library with the OpenMP support" - OFF -) -cmake_dependent_option( - BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT - "Build the Python interface with Boost.Multiprecision MPFR support" - OFF - BUILD_PYTHON_INTERFACE - OFF -) -cmake_dependent_option( - BUILD_WITH_LIBPYTHON - "Build the library with Python format support" - ON - "BUILD_PYTHON_INTERFACE" - OFF -) -if(APPLE) - option( - BUILD_WITH_ACCELERATE_SUPPORT - "Build Pinocchio with the Accelerate support" - OFF - ) -else(APPLE) - set(BUILD_WITH_ACCELERATE_SUPPORT FALSE) -endif(APPLE) - -option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) -option( - ASSERT_ON_EXCEPTION - "Turns Pinocchio excpetions into asserts for debug purposes" - OFF -) -option( - ENABLE_TEMPLATE_INSTANTIATION - "Template instantiation of the main library" - ON -) +if(PINOCCHIO_BUILD_WITH_TRACY) + # assume it is installed somewhere + jrl_find_package(Tracy REQUIRED EXPECTED_TARGETS Tracy::TracyClient) + set_target_properties( + Tracy::TracyClient + PROPERTIES POSITION_INDEPENDENT_CODE True + ) +endif() -option( - PINOCCHIO_BUILD_WITH_TRACY - "Build with tracy profiler for performance analysis" - OFF -) +if(BUILD_WITH_OPENMP_SUPPORT) + jrl_find_package(OpenMP REQUIRED EXPECTED_TARGETS OpenMP::OpenMP_CXX) +endif() -option( - BUILD_WITH_RTSAN - "Build with the Realtime Sanitizer (clang >=20, linux/mac only)" - OFF -) +if(BUILD_PYTHON_INTERFACE) + jrl_find_python(3.10 REQUIRED COMPONENTS Interpreter Development.Module) + jrl_find_package(Boost CONFIG REQUIRED COMPONENTS python EXPECTED_TARGETS Boost::python) + jrl_find_package(eigenpy CONFIG REQUIRED EXPECTED_TARGETS eigenpy::eigenpy) +endif() -option( - PINOCCHIO_INSTALL_DEPRECATED_HEADERS - "Use and install deprecated headers" - ON -) +if(BUILD_BENCHMARK) + jrl_find_package(benchmark CONFIG REQUIRED) +endif() -# PCH and ccache doesn't play well together so we deactivate -# PCH use by default -option( - PINOCCHIO_BUILD_BINDING_WITH_PCH - "Use PCH to accelerate binding build" - OFF -) -option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" ON) +# ---------------------------------------------------- +# --- FUNCTIONS ------------------------------------- +# ---------------------------------------------------- +macro(add_header_and_template_instantiation_targets name) + add_library(${name}_headers INTERFACE) -set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") -if(BUILD_BENCHMARK OR BUILD_EXAMPLES OR BUILD_TESTING) - # example-robot-data is required - if(EXAMPLE_ROBOT_DATA_MODEL_DIR) - file( - REAL_PATH "${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - EXAMPLE_ROBOT_DATA_MODEL_DIR - EXPAND_TILDE - ) - message( - STATUS - "Using provided example-robot-data at: ${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - elseif( - EXISTS - "${CMAKE_CURRENT_LIST_DIR}/models/example-robot-data/CMakeLists.txt" - ) - set(EXAMPLE_ROBOT_DATA_MODEL_DIR - "${PINOCCHIO_MODEL_DIR}/example-robot-data/robots" - ) - else() - find_package(example-robot-data REQUIRED CONFIG) - get_target_property( - EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF - example-robot-data::example-robot-data - INTERFACE_COMPILE_DEFINITIONS + add_library(${name} INTERFACE) + target_link_libraries(${name} INTERFACE ${name}_headers) + list(APPEND EXPORTED_TARGETS ${name} ${name}_headers) + + if(ENABLE_TEMPLATE_INSTANTIATION) + add_library(${name}_template_instantiation SHARED) + target_sources( + ${name}_template_instantiation + PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} ) - string( - REPLACE "EXAMPLE_ROBOT_DATA_MODEL_DIR=" - "" - EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES - "${EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF}" + + target_link_libraries( + ${name}_template_instantiation + PUBLIC ${name}_headers ) - string( - REPLACE "\"" - "" - EXAMPLE_ROBOT_DATA_MODEL_DIR - "${EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES}" + + target_compile_definitions( + ${name}_template_instantiation + PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION ) - message( - STATUS - "Using system example-robot-data at: ${EXAMPLE_ROBOT_DATA_MODEL_DIR}" + # By default DEFINE_SYMBOL add -D${LIB_NAME}_EXPORTS. Don't use ${LIB_NAME}_EXPORTS define since + # pinocchio/config.hpp use pinocchio_EXPORTS. This allow to use the same DLLAPI define for all + # template instantiation libraries. + set_target_properties( + ${name}_template_instantiation + PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS" ) + jrl_target_set_default_compile_options(${name}_template_instantiation PRIVATE) + jrl_target_enforce_msvc_conformance(${name}_template_instantiation PUBLIC) + target_link_libraries(${name} INTERFACE ${name}_template_instantiation) + + list(APPEND EXPORTED_TARGETS ${name}_template_instantiation) endif() -endif() +endmacro() -if(BUILD_WITH_CODEGEN_SUPPORT) - set(BUILD_WITH_CPPAD_CODEGEN_SUPPORT TRUE) - set(BUILD_WITH_AUTODIFF_SUPPORT ON) -endif() -if(BUILD_WITH_AUTODIFF_SUPPORT) - set(BUILD_WITH_CPPAD_SUPPORT TRUE) -endif() -if(BUILD_WITH_LIBPYTHON) - set(BUILD_WITH_PYTHON_PARSER_SUPPORT TRUE) -endif() +set(PINOCCHIO_CORE_INSTANTIATION_SOURCES + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp +) + +# ---------------------------------------------------- +# --- MAIN LIBRARY ----------------------------------- +# ---------------------------------------------------- +# Target to link against all pinocchio libraries +add_library(pinocchio INTERFACE) +add_library(pinocchio::pinocchio ALIAS pinocchio) +set(EXPORTED_TARGETS pinocchio) + +add_header_and_template_instantiation_targets(pinocchio_default) + +target_compile_features(pinocchio_default_headers INTERFACE cxx_std_17) +jrl_target_generate_config_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio) +jrl_target_generate_warning_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/warning.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_deprecated_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/deprecated.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_tracy_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/tracy.hpp LIBRARY_NAME pinocchio) + +target_compile_definitions( + pinocchio_default_headers + INTERFACE + BOOST_MPL_LIMIT_LIST_SIZE=30 + BOOST_MPL_LIMIT_VECTOR_SIZE=30 + BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + BOOST_FUSION_INVOKE_MAX_ARITY=12 + $ + $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> +) -if(INITIALIZE_WITH_NAN) - message(STATUS "Initialize with NaN all the Eigen entries.") -endif(INITIALIZE_WITH_NAN) +target_link_libraries( + pinocchio_default_headers + INTERFACE Eigen3::Eigen Boost::boost Boost::serialization +) -if(ENABLE_TEMPLATE_INSTANTIATION) - message(STATUS "Template instantiation of the main library") -endif(ENABLE_TEMPLATE_INSTANTIATION) +target_include_directories( + pinocchio_default_headers + INTERFACE + $ + $ +) -macro(TAG_LIBRARY_VERSION target) - set_target_properties(${target} PROPERTIES SOVERSION ${PROJECT_VERSION}) -endmacro(TAG_LIBRARY_VERSION) +# Dependency free headers +# Root, algorithm, common, containers, math, multibody, serialization, spatial, utils +jrl_target_headers(pinocchio_default_headers PUBLIC + HEADERS + include/pinocchio/algorithm/aba-derivatives.hpp + include/pinocchio/algorithm/aba.hpp + include/pinocchio/algorithm/center-of-mass-derivatives.hpp + include/pinocchio/algorithm/center-of-mass.hpp + include/pinocchio/algorithm/centroidal-derivatives.hpp + include/pinocchio/algorithm/centroidal.hpp + include/pinocchio/algorithm/check-base.hpp + include/pinocchio/algorithm/check-data.hpp + include/pinocchio/algorithm/check-model.hpp + include/pinocchio/algorithm/check.hpp + include/pinocchio/algorithm/cholesky.hpp + include/pinocchio/algorithm/compute-all-terms.hpp + include/pinocchio/algorithm/constrained-dynamics-derivatives.hpp + include/pinocchio/algorithm/constrained-dynamics.hpp + include/pinocchio/algorithm/constraint-cholesky-decl.hpp + include/pinocchio/algorithm/constraint-cholesky.hpp + include/pinocchio/algorithm/contact-dynamics.hpp + include/pinocchio/algorithm/contact-inverse-dynamics.hpp + include/pinocchio/algorithm/copy.hpp + include/pinocchio/algorithm/crba.hpp + include/pinocchio/algorithm/default-check.hpp + include/pinocchio/algorithm/delassus-operator.hpp + include/pinocchio/algorithm/delassus.hpp + include/pinocchio/algorithm/diagonal-preconditioner.hpp + include/pinocchio/algorithm/energy.hpp + include/pinocchio/algorithm/frames-derivatives.hpp + include/pinocchio/algorithm/frames.hpp + include/pinocchio/algorithm/fwd.hpp + include/pinocchio/algorithm/geometry.hpp + include/pinocchio/algorithm/impulse-dynamics-derivatives.hpp + include/pinocchio/algorithm/impulse-dynamics.hpp + include/pinocchio/algorithm/jacobian.hpp + include/pinocchio/algorithm/joint-configuration.hpp + include/pinocchio/algorithm/kinematics-derivatives.hpp + include/pinocchio/algorithm/kinematics.hpp + include/pinocchio/algorithm/loop-constrained-aba.hpp + include/pinocchio/algorithm/model.hpp + include/pinocchio/algorithm/preconditioner-base.hpp + include/pinocchio/algorithm/proximal.hpp + include/pinocchio/algorithm/pv.hpp + include/pinocchio/algorithm/regressor.hpp + include/pinocchio/algorithm/rnea-derivatives.hpp + include/pinocchio/algorithm/rnea-second-order-derivatives.hpp + include/pinocchio/algorithm/rnea.hpp + include/pinocchio/algorithm/solvers/admm-solver.hpp + include/pinocchio/algorithm/solvers/anderson-acceleration.hpp + include/pinocchio/algorithm/solvers/constraint-solver-base.hpp + include/pinocchio/algorithm/solvers/constraint-solver-utils.hpp + include/pinocchio/algorithm/solvers/fwd.hpp + include/pinocchio/algorithm/solvers/pgs-solver.hpp + include/pinocchio/algorithm/utils/force.hpp + include/pinocchio/algorithm/utils/motion.hpp + include/pinocchio/common/fwd.hpp + include/pinocchio/common.hpp + include/pinocchio/constraints/fwd.hpp + include/pinocchio/constraints.hpp + include/pinocchio/container/double-entry-container.hpp + include/pinocchio/container/eigen-storage.hpp + include/pinocchio/container/matrix-stack.hpp + include/pinocchio/context.hpp + include/pinocchio/eigen-common.hpp + include/pinocchio/fwd.hpp + include/pinocchio/geometry.hpp + include/pinocchio/geometry/fwd.hpp + include/pinocchio/macros.hpp + include/pinocchio/math/fwd.hpp + include/pinocchio/math/multiprecision-mpfr.hpp + include/pinocchio/math/multiprecision.hpp + include/pinocchio/math.hpp + include/pinocchio/multibody/fwd.hpp + include/pinocchio/multibody/joint/fwd.hpp + include/pinocchio/multibody/joint-motion-subspace.hpp + include/pinocchio/multibody/joint.hpp + include/pinocchio/multibody/liegroup/fwd.hpp + include/pinocchio/multibody/liegroup.hpp + include/pinocchio/multibody/pool/fwd.hpp + include/pinocchio/multibody/pool.hpp + include/pinocchio/multibody/sample-models.hpp + include/pinocchio/multibody/visitor.hpp + include/pinocchio/multibody.hpp + include/pinocchio/serialization/archive.hpp + include/pinocchio/serialization/fwd.hpp + include/pinocchio/serialization/eigen.hpp + include/pinocchio/serialization/serializable.hpp + include/pinocchio/serialization.hpp + include/pinocchio/spatial/fwd.hpp + include/pinocchio/spatial.hpp + include/pinocchio/unsupported.hpp + include/pinocchio/utils/alloca.hpp + include/pinocchio/utils/cast.hpp + include/pinocchio/utils/check.hpp + include/pinocchio/utils/eigen-helpers.hpp + include/pinocchio/utils/file-io.hpp + include/pinocchio/utils/openmp.hpp + include/pinocchio/utils/promote-static-eval.hpp + include/pinocchio/utils/reference.hpp + include/pinocchio/utils/shared-ptr.hpp + include/pinocchio/utils/size-in-bytes.hpp + include/pinocchio/utils/static-if.hpp + include/pinocchio/utils/std-vector.hpp + include/pinocchio/utils/string-generator.hpp + include/pinocchio/utils/string.hpp + include/pinocchio/utils/timer.hpp + include/pinocchio/utils/timer2.hpp + include/pinocchio/utils/version.hpp + BASE_DIRS include +) -# ---------------------------------------------------- -# --- DEPENDENCIES ----------------------------------- -# ---------------------------------------------------- -set(CMAKE_MODULE_PATH - "${JRL_CMAKE_MODULES}/find-external/CppAD/" - ${CMAKE_MODULE_PATH} +jrl_target_headers(pinocchio_default_headers PUBLIC + HEADERS + include/pinocchio/src/visualizers/base-visualizer.hxx + include/pinocchio/src/common/fwd.hxx + include/pinocchio/src/common/model-entity.hxx + include/pinocchio/src/common/data-entity.hxx + include/pinocchio/src/eigen-macros.hxx + include/pinocchio/src/context/generic.hxx + include/pinocchio/src/context/default.hxx + include/pinocchio/src/multibody/data.hxx + include/pinocchio/src/multibody/model-item.hxx + include/pinocchio/src/multibody/joint-motion-subspace-base.hxx + include/pinocchio/src/multibody/force-set.hxx + include/pinocchio/src/multibody/liegroup/vector-space.hxx + include/pinocchio/src/multibody/model.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product.hxx + include/pinocchio/src/multibody/liegroup/liegroup-generic.hxx + include/pinocchio/src/multibody/liegroup/liegroup-base.hxx + include/pinocchio/src/multibody/fwd.hxx + include/pinocchio/src/multibody/joint-motion-subspace-generic.hxx + include/pinocchio/src/multibody/frame.hxx + include/pinocchio/src/multibody/sample-models.hxx + include/pinocchio/src/geometry/fwd.hxx + include/pinocchio/src/geometry/coal.hxx + include/pinocchio/src/geometry/instance-filter.hxx + include/pinocchio/src/geometry/geometry-object.hxx + include/pinocchio/src/geometry/geometry.hxx + include/pinocchio/src/geometry/geometry-object-filter.hxx + include/pinocchio/src/algorithm/delassus-operator-preconditioned.hxx + include/pinocchio/src/algorithm/crba.hxx + include/pinocchio/src/algorithm/kinematics.hxx + include/pinocchio/src/multibody/liegroup/liegroup-algo.hxx + include/pinocchio/src/math/matrix-inverse-code-generated.hxx + include/pinocchio/src/math/block-diagonal-matrix.hxx + include/pinocchio/src/math/quaternion.hxx + include/pinocchio/src/algorithm/contact-dynamics.hxx + include/pinocchio/src/math/matrix-block-element-base.hxx + include/pinocchio/src/math/matrix-inverse.hxx + include/pinocchio/src/math/block-diagonal-matrix-base.hxx + include/pinocchio/src/math/taylor-expansion.hxx + include/pinocchio/src/math/assign-operators.hxx + include/pinocchio/src/math/lanczos-decomposition.hxx + include/pinocchio/src/eigen-ref.hxx + include/pinocchio/src/macros.hxx + include/pinocchio/src/fwd.hxx + include/pinocchio/src/algorithm/regressor.hxx + include/pinocchio/src/algorithm/frames.hxx + include/pinocchio/src/math/alias.hxx + include/pinocchio/src/math/eigenvalues.hxx + include/pinocchio/src/multibody/visitor/joint-unary-visitor.hxx + include/pinocchio/src/multibody/visitor/joint-binary-visitor.hxx + include/pinocchio/src/multibody/visitor/fusion.hxx + include/pinocchio/src/multibody/liegroup/special-orthogonal.hxx + include/pinocchio/src/multibody/liegroup/special-euclidean.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product-variant.hxx + include/pinocchio/src/multibody/liegroup/liegroup-map.hxx + include/pinocchio/src/multibody/liegroup/liegroup-collection.hxx + include/pinocchio/src/multibody/liegroup/liegroup-joint.hxx + include/pinocchio/src/multibody/liegroup/liegroup-variant-visitors.hxx + include/pinocchio/src/multibody/liegroup/fwd.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product-variant-fwd.hxx + include/pinocchio/src/spatial/classic-acceleration.hxx + include/pinocchio/src/spatial/motion-dense.hxx + include/pinocchio/src/spatial/se3-base.hxx + include/pinocchio/src/spatial/cartesian-axis.hxx + include/pinocchio/src/spatial/symmetric3.hxx + include/pinocchio/src/spatial/spatial-axis.hxx + include/pinocchio/src/spatial/log-common.hxx + include/pinocchio/src/spatial/se3-tpl.hxx + include/pinocchio/src/spatial/motion-zero.hxx + include/pinocchio/src/spatial/log.hxx + include/pinocchio/src/spatial/inertia.hxx + include/pinocchio/src/spatial/se3-common.hxx + include/pinocchio/src/algorithm/check-model.hxx + include/pinocchio/src/algorithm/rnea.hxx + include/pinocchio/src/math/matrix-block-element.hxx + include/pinocchio/src/math/matrix-block-type.hxx + include/pinocchio/src/math/comparison-operators.hxx + include/pinocchio/src/math/multiprecision.hxx + include/pinocchio/src/algorithm/joint-configuration.hxx + include/pinocchio/src/algorithm/center-of-mass.hxx + include/pinocchio/src/spatial/se3-tpl-interpolate.hxx + include/pinocchio/src/spatial/force-base.hxx + include/pinocchio/src/algorithm/delassus-operator-cholesky-expression.hxx + include/pinocchio/src/algorithm/constraint-cholesky-decl.hxx + include/pinocchio/src/algorithm/default-check.hxx + include/pinocchio/src/spatial/motion-common.hxx + include/pinocchio/src/algorithm/jacobian.hxx + include/pinocchio/src/algorithm/kinematics-derivatives.hxx + include/pinocchio/src/serialization/symmetric3.hxx + include/pinocchio/src/algorithm/contact-inverse-dynamics.hxx + include/pinocchio/src/algorithm/diagonal-preconditioner.hxx + include/pinocchio/src/math/matrix-block-element-operations.hxx + include/pinocchio/src/math/fwd.hxx + include/pinocchio/src/math/matrix-info.hxx + include/pinocchio/src/spatial/motion-tpl.hxx + include/pinocchio/src/serialization/constraints-data.hxx + include/pinocchio/src/algorithm/rnea-second-order-derivatives.hxx + include/pinocchio/src/math/matrix-block.hxx + include/pinocchio/src/math/eigen-helpers.hxx + include/pinocchio/src/math/matrix-product.hxx + include/pinocchio/src/spatial/motion-ref.hxx + include/pinocchio/src/context.hxx + include/pinocchio/src/eigen-align.hxx + include/pinocchio/src/spatial/fwd.hxx + include/pinocchio/src/algorithm/delassus-operator-rigid-body-visitors.hxx + include/pinocchio/src/math/matrix-block-element-operation.hxx + include/pinocchio/src/container/aligned-vector.hxx + include/pinocchio/src/container/matrix-stack.hxx + include/pinocchio/src/container/double-entry-container.hxx + include/pinocchio/src/container/eigen-storage.hxx + include/pinocchio/src/algorithm/utils/force.hxx + include/pinocchio/src/spatial/act-on-set.hxx + include/pinocchio/src/spatial/force-dense.hxx + include/pinocchio/src/spatial/force-ref.hxx + include/pinocchio/src/spatial/explog-quaternion.hxx + include/pinocchio/src/spatial/force-common.hxx + include/pinocchio/src/spatial/motion-base.hxx + include/pinocchio/src/utils/timer.hxx + include/pinocchio/src/spatial/force-tpl.hxx + include/pinocchio/src/spatial/skew.hxx + include/pinocchio/src/serialization/inertia.hxx + include/pinocchio/src/serialization/vector.hxx + include/pinocchio/src/spatial/explog.hxx + include/pinocchio/src/serialization/force.hxx + include/pinocchio/src/serialization/joints-data.hxx + include/pinocchio/src/algorithm/utils/motion.hxx + include/pinocchio/src/serialization/block-diagonal-matrix.hxx + include/pinocchio/src/serialization/eigen.hxx + include/pinocchio/src/algorithm/constraint-cholesky-def.hxx + include/pinocchio/src/serialization/model.hxx + include/pinocchio/src/serialization/eigen-storage.hxx + include/pinocchio/src/algorithm/impulse-dynamics.hxx + include/pinocchio/src/serialization/motion.hxx + include/pinocchio/src/serialization/se3.hxx + include/pinocchio/src/algorithm/preconditioner-base.hxx + include/pinocchio/src/serialization/static-buffer.hxx + include/pinocchio/src/math/gram-schmidt-orthonormalisation.hxx + include/pinocchio/src/algorithm/constrained-dynamics.hxx + include/pinocchio/src/math/block-diagonal-matrix-inverse.hxx + include/pinocchio/src/algorithm/model.hxx + include/pinocchio/src/algorithm/rnea-derivatives.hxx + include/pinocchio/src/utils/check.hxx + include/pinocchio/src/algorithm/centroidal.hxx + include/pinocchio/src/math/multiprecision-mpfr.hxx + include/pinocchio/src/serialization/frame.hxx + include/pinocchio/src/serialization/double-entry-container.hxx + include/pinocchio/src/algorithm/delassus.hxx + include/pinocchio/src/algorithm/loop-constrained-aba.hxx + include/pinocchio/src/algorithm/fwd.hxx + include/pinocchio/src/math/arithmetic-operators.hxx + include/pinocchio/src/math/tridiagonal-matrix.hxx + include/pinocchio/src/math/block-diagonal-matrix-sum.hxx + include/pinocchio/src/math/tensor.hxx + include/pinocchio/src/serialization/matrix-block-element.hxx + include/pinocchio/src/serialization/fwd.hxx + include/pinocchio/src/algorithm/proximal.hxx + include/pinocchio/src/math/eigenvalues-tridiagonal-matrix.hxx + include/pinocchio/src/math/block-diagonal-matrix-expression.hxx + include/pinocchio/src/utils/promote-static-eval.hxx + include/pinocchio/src/multibody/pool/model.hxx + include/pinocchio/src/serialization/delassus.hxx + include/pinocchio/src/algorithm/pv.hxx + include/pinocchio/src/multibody/pool/fwd.hxx + include/pinocchio/src/math/rpy.hxx + include/pinocchio/src/utils/string.hxx + include/pinocchio/src/serialization/boost-blank.hxx + include/pinocchio/src/algorithm/delassus-operator-sparse.hxx + include/pinocchio/src/math/sincos.hxx + include/pinocchio/src/utils/file-io.hxx + include/pinocchio/src/utils/version.hxx + include/pinocchio/src/serialization/joints-motion-subspace.hxx + include/pinocchio/src/serialization/matrix-stack.hxx + include/pinocchio/src/algorithm/constrained-dynamics-derivatives.hxx + include/pinocchio/src/algorithm/delassus-operator-dense.hxx + include/pinocchio/src/utils/alloca.hxx + include/pinocchio/src/multibody/pool/geometry.hxx + include/pinocchio/src/math/matrix-block-element-plain.hxx + include/pinocchio/src/serialization/geometry.hxx + include/pinocchio/src/algorithm/energy.hxx + include/pinocchio/src/math/rotation.hxx + include/pinocchio/src/utils/string-generator.hxx + include/pinocchio/src/serialization/archive.hxx + include/pinocchio/src/math/triangular-matrix.hxx + include/pinocchio/src/math/matrix.hxx + include/pinocchio/src/math/sign.hxx + include/pinocchio/src/utils/size-in-bytes.hxx + include/pinocchio/src/utils/timer2.hxx + include/pinocchio/src/utils/cast.hxx + include/pinocchio/src/utils/eigen-helpers.hxx + include/pinocchio/src/utils/reference.hxx + include/pinocchio/src/utils/static-if.hxx + include/pinocchio/src/multibody/joint/joint-universal.hxx + include/pinocchio/src/multibody/joint/joint-helical.hxx + include/pinocchio/src/multibody/joint/joint-ellipsoid.hxx + include/pinocchio/src/math/details/matrix-inverse-9x9.hxx + include/pinocchio/src/math/details/matrix-inverse-12x12.hxx + include/pinocchio/src/math/details/matrix-inverse-11x11.hxx + include/pinocchio/src/utils/openmp.hxx + include/pinocchio/src/serialization/joints-motion.hxx + include/pinocchio/src/serialization/constraints-model.hxx + include/pinocchio/src/utils/eigen-fix.hxx + include/pinocchio/src/multibody/joint/joint-composite.hxx + include/pinocchio/src/math/details/matrix-inverse-4x4.hxx + include/pinocchio/src/math/details/matrix-inverse-3x3.hxx + include/pinocchio/src/math/details/matrix-inverse-6x6.hxx + include/pinocchio/src/math/details/matrix-inverse-10x10.hxx + include/pinocchio/src/math/details/matrix-inverse-5x5.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unbounded.hxx + include/pinocchio/src/serialization/data.hxx + include/pinocchio/src/serialization/coal.hxx + include/pinocchio/src/serialization/joints-model.hxx + include/pinocchio/src/utils/std-vector.hxx + include/pinocchio/src/utils/shared-ptr.hxx + include/pinocchio/src/math/details/matrix-inverse-7x7.hxx + include/pinocchio/src/serialization/constraints-set.hxx + include/pinocchio/src/math/details/matrix-inverse-2x2.hxx + include/pinocchio/src/multibody/joint/joint-collection.hxx + include/pinocchio/src/serialization/serializable.hxx + include/pinocchio/src/math/details/matrix-inverse-8x8.hxx + include/pinocchio/src/algorithm/centroidal-derivatives.hxx + include/pinocchio/src/algorithm/delassus-operator-base.hxx + include/pinocchio/src/multibody/joint/joint-spherical.hxx + include/pinocchio/src/math/details/matrix-inverse-1x1.hxx + include/pinocchio/src/serialization/common.hxx + include/pinocchio/src/serialization/csv.hxx + include/pinocchio/src/algorithm/aba-derivatives.hxx + include/pinocchio/src/algorithm/aba.hxx + include/pinocchio/src/serialization/joints-transform.hxx + include/pinocchio/src/algorithm/compute-all-terms.hxx + include/pinocchio/src/algorithm/delassus-operator-rigid-body.hxx + include/pinocchio/src/algorithm/center-of-mass-derivatives.hxx + include/pinocchio/src/algorithm/check-base.hxx + include/pinocchio/src/algorithm/check-data.hxx + include/pinocchio/src/algorithm/impulse-dynamics-derivatives.hxx + include/pinocchio/src/algorithm/copy.hxx + include/pinocchio/src/algorithm/cholesky.hxx + include/pinocchio/src/algorithm/frames-derivatives.hxx + include/pinocchio/src/multibody/joint/joint-spherical-ZYX.hxx + include/pinocchio/src/multibody/joint/joint-planar.hxx + include/pinocchio/src/algorithm/geometry.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unaligned.hxx + include/pinocchio/src/algorithm/solvers/anderson-acceleration.hxx + include/pinocchio/src/algorithm/solvers/constraint-solver-base.hxx + include/pinocchio/src/algorithm/solvers/pgs-solver.hxx + include/pinocchio/src/algorithm/solvers/admm-solver.hxx + include/pinocchio/src/algorithm/solvers/constraint-solver-utils.hxx + include/pinocchio/src/multibody/joint/joint-translation.hxx + include/pinocchio/src/multibody/joint/joint-prismatic-unaligned.hxx + include/pinocchio/src/multibody/joint/joint-mimic.hxx + include/pinocchio/src/multibody/joint/fwd.hxx + include/pinocchio/src/multibody/joint/joint-free-flyer.hxx + include/pinocchio/src/multibody/joint/joint-common-operations.hxx + include/pinocchio/src/multibody/joint/joint-prismatic.hxx + include/pinocchio/src/multibody/joint/joint-generic.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unbounded-unaligned.h + include/pinocchio/src/multibody/joint/joint-helical-unaligned.hxx + include/pinocchio/src/multibody/joint/joint-revolute.hxx + include/pinocchio/src/multibody/joint/joint-data-base.hxx + include/pinocchio/src/multibody/joint/joint-basic-visitors.hxx + include/pinocchio/src/multibody/joint/joint-model-base.hxx + include/pinocchio/src/constraints/constraint-data-base.hxx + include/pinocchio/src/constraints/kinematics-constraint-model-base.hxx + include/pinocchio/src/constraints/baumgarte-corrector-parameters.hxx + include/pinocchio/src/constraints/point-anchor-constraint.hxx + include/pinocchio/src/constraints/constraint-model-common-parameters.hxx + include/pinocchio/src/constraints/constraint-collection-default.hxx + include/pinocchio/src/constraints/visitors/constraint-model-visitor.hxx + include/pinocchio/src/constraints/frame-constraint-data-base.hxx + include/pinocchio/src/constraints/point-constraint-data-base.hxx + include/pinocchio/src/constraints/binary-kinematics-constraint-model-base. + include/pinocchio/src/constraints/constraint-model-base.hxx + include/pinocchio/src/constraints/blank-constraint.hxx + include/pinocchio/src/constraints/constraint-ordering.hxx + include/pinocchio/src/constraints/fwd.hxx + include/pinocchio/src/constraints/jointwise-constraint-model-base.hxx + include/pinocchio/src/constraints/point-constraint-model-base.hxx + include/pinocchio/src/constraints/joint-limit-constraint.hxx + include/pinocchio/src/constraints/sets/second-order-cone-jordan-operation. + include/pinocchio/src/constraints/sets/full-space-cone.hxx + include/pinocchio/src/constraints/sets/orthant-cone.hxx + include/pinocchio/src/constraints/sets/orthant-cone-jordan-operation.hxx + include/pinocchio/src/constraints/sets/coulomb-friction-cone.hxx + include/pinocchio/src/constraints/sets/cone-base.hxx + include/pinocchio/src/constraints/sets/zero-cone-jordan-operation.hxx + include/pinocchio/src/constraints/sets/box-set.hxx + include/pinocchio/src/constraints/sets/zero-cone.hxx + include/pinocchio/src/constraints/sets/set-base.hxx + include/pinocchio/src/constraints/sets/jordan-operation-helper.hxx + include/pinocchio/src/constraints/constraint-data-generic.hxx + include/pinocchio/src/constraints/utils.hxx + include/pinocchio/src/constraints/frame-constraint-model-base.hxx + include/pinocchio/src/constraints/point-contact-constraint.hxx + include/pinocchio/src/constraints/frame-anchor-constraint.hxx + include/pinocchio/src/constraints/joint-friction-constraint.hxx + include/pinocchio/src/constraints/contact-info.hxx + include/pinocchio/src/constraints/constraint-model-generic.hxx + include/pinocchio/src/constraints/rigid-constraint-conversion.hxx + BASE_DIRS include ) -add_project_dependency(Eigen3 REQUIRED) +target_link_libraries(pinocchio INTERFACE pinocchio_default) -if(BUILD_WITH_URDF_SUPPORT) - add_project_dependency(urdfdom_headers REQUIRED) - add_project_dependency(urdfdom REQUIRED) - set(urdfdom_VERSION ${urdfdom_headers_VERSION}) +if(BUILD_WITH_COLLISION_SUPPORT) + add_library(pinocchio_collision SHARED) - if(${urdfdom_VERSION} VERSION_GREATER "0.4.2") - check_minimal_cxx_standard(11 ENFORCE) - message( - STATUS - "Since urdfdom >= 1.0.0, the default C++ standard is C++11. The project is then compiled with C++11 standard." - ) - endif() -endif() + target_sources( + pinocchio_collision + PRIVATE src/collision/collision.cpp src/collision/distance.cpp + ) -if(BUILD_WITH_SDF_SUPPORT) - include(${JRL_CMAKE_MODULES}/sdformat.cmake) - search_for_sdformat(REQUIRED) - if(SDFormat_FOUND) - check_minimal_cxx_standard(11 REQUIRED) - include_directories(${SDFormat_INCLUDE_DIRS}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDFormat_CXX_FLAGS}") - endif() + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/collision/broadphase-callbacks.hpp + include/pinocchio/collision/broadphase-manager-base.hpp + include/pinocchio/collision/broadphase-manager.hpp + include/pinocchio/collision/broadphase.hpp + include/pinocchio/collision/coal-pinocchio-conversions.hpp + include/pinocchio/collision/collision.hpp + include/pinocchio/collision/distance.hpp + include/pinocchio/collision/pool/broadphase-manager.hpp + include/pinocchio/collision/pool/fwd.hpp + include/pinocchio/collision/tree-broadphase-manager.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/src/collision/broadphase-callbacks.hxx + include/pinocchio/src/collision/broadphase-manager.hxx + include/pinocchio/src/collision/broadphase.hxx + include/pinocchio/src/collision/collision.hxx + include/pinocchio/src/collision/distance.hxx + include/pinocchio/src/collision/pool/broadphase-manager.hxx + include/pinocchio/src/collision/pool/fwd.hxx + include/pinocchio/src/collision/tree-broadphase-manager.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_collision + PUBLIC pinocchio_default coal::coal + ) + + target_compile_definitions( + pinocchio_collision + PUBLIC PINOCCHIO_WITH_COLLISION + PUBLIC + PINOCCHIO_WITH_HPP_FCL # DEPRECATED: Setup back compatibility define + ) + + jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_collision PUBLIC) + jrl_target_generate_config_header(pinocchio_collision INTERFACE FILENAME pinocchio/collision/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_collision) + + target_link_libraries(pinocchio INTERFACE pinocchio_collision) + list(APPEND EXPORTED_TARGETS pinocchio_collision) endif() +# handle parsers if(BUILD_WITH_URDF_SUPPORT OR BUILD_WITH_SDF_SUPPORT) set(BUILD_WITH_PARSERS_SUPPORT TRUE) else() set(BUILD_WITH_PARSERS_SUPPORT FALSE) endif() -# -- tracy (optional) -if(PINOCCHIO_BUILD_WITH_TRACY) - # assume it is installed somewhere - add_project_dependency(Tracy REQUIRED) - set_target_properties( - Tracy::TracyClient - PROPERTIES POSITION_INDEPENDENT_CODE True +if(BUILD_WITH_PARSERS_SUPPORT) + add_library(pinocchio_parsers SHARED) + + target_sources( + pinocchio_parsers + PRIVATE + src/parsers/utils/file-explorer.cpp + src/parsers/mjcf/mjcf-graph.cpp + src/parsers/mjcf/mjcf-graph-geom.cpp + src/parsers/graph/model-graph.cpp + src/parsers/graph/model-graph-algo.cpp ) - if(${Tracy_FOUND}) - message(STATUS "Tracy found on your system at ${Tracy_DIR}") - else() - message( - FATAL_ERROR - "Pinocchio support for tracy is enabled, but tracy was not found on your system." - " Install it, or set the option PINOCCHIO_DOWNLOAD_TRACY to ON so we can fetch it." + if(BUILD_WITH_COLLISION_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE src/parsers/graph/model-graph-algo-geometry.cpp ) endif() -endif(PINOCCHIO_BUILD_WITH_TRACY) -if(BUILD_WITH_AUTODIFF_SUPPORT) - # Check first CppADCodeGen - if(BUILD_WITH_CODEGEN_SUPPORT) - add_project_dependency(cppadcg 2.4.1 REQUIRED) - endif(BUILD_WITH_CODEGEN_SUPPORT) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/graph/fwd.hpp + include/pinocchio/parsers/graph.hpp + include/pinocchio/parsers/mjcf.hpp + include/pinocchio/parsers/srdf.hpp + include/pinocchio/parsers/utils.hpp + BASE_DIRS include + ) - add_project_dependency( - cppad 20180000.0 REQUIRED - FIND_EXTERNAL "CppAD" + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/graph/frames.hxx + include/pinocchio/src/parsers/graph/fwd.hxx + include/pinocchio/src/parsers/graph/geometries.hxx + include/pinocchio/src/parsers/graph/graph-visitor.hxx + include/pinocchio/src/parsers/graph/joints.hxx + include/pinocchio/src/parsers/graph/model-configuration-converter.hxx + include/pinocchio/src/parsers/graph/model-graph-algo-geometry.hxx + include/pinocchio/src/parsers/graph/model-graph-algo.hxx + include/pinocchio/src/parsers/graph/model-graph.hxx + include/pinocchio/src/parsers/meshloader-fwd.hxx + include/pinocchio/src/parsers/mjcf/geometry.hxx + include/pinocchio/src/parsers/mjcf/mjcf-graph.hxx + include/pinocchio/src/parsers/mjcf/mjcf.hxx + include/pinocchio/src/parsers/mjcf/model.hxx + include/pinocchio/src/parsers/scalar-model.hxx + include/pinocchio/src/parsers/srdf/srdf.hxx + include/pinocchio/src/parsers/utils/utils.hxx + include/pinocchio/src/parsers/utils/file-explorer.hxx + BASE_DIRS include ) -endif(BUILD_WITH_AUTODIFF_SUPPORT) -if(BUILD_WITH_CASADI_SUPPORT) - add_project_dependency(casadi 3.4.5 REQUIRED) + if(BUILD_WITH_URDF_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE + src/parsers/urdf/model.cpp + src/parsers/urdf/geometry.cpp + src/parsers/urdf/utils.cpp + ) - # Normalize CasADi link target across versions. Prefer imported target (casadi::casadi), then - # legacy target (casadi) - if(NOT TARGET casadi::casadi AND TARGET casadi) - add_library(casadi::casadi ALIAS casadi) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/urdf.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/urdf/geometry.hxx + include/pinocchio/src/parsers/urdf/model.hxx + include/pinocchio/src/parsers/urdf/urdf.hxx + include/pinocchio/src/parsers/urdf/utils.hxx + BASE_DIRS include + ) + target_link_libraries(pinocchio_parsers PUBLIC urdfdom::urdf_parser) + # Expose urdfdom_headers version + string(REPLACE "." ";" _URDFDOM_H_VER "${urdfdom_headers_VERSION}") + list(GET _URDFDOM_H_VER 0 _URDFDOM_H_MAJOR) + list(GET _URDFDOM_H_VER 1 _URDFDOM_H_MINOR) + list(GET _URDFDOM_H_VER 2 _URDFDOM_H_PATCH) + + target_compile_definitions( + pinocchio_parsers + PUBLIC + PINOCCHIO_WITH_URDFDOM + PINOCCHIO_URDFDOM_HEADERS_MAJOR_VERSION=${_URDFDOM_H_MAJOR} + PINOCCHIO_URDFDOM_HEADERS_MINOR_VERSION=${_URDFDOM_H_MINOR} + PINOCCHIO_URDFDOM_HEADERS_PATCH_VERSION=${_URDFDOM_H_PATCH} + ) endif() -endif(BUILD_WITH_CASADI_SUPPORT) -if(BUILD_WITH_OPENMP_SUPPORT) - add_project_dependency(OpenMP REQUIRED) -endif() + if(BUILD_WITH_SDF_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE src/parsers/sdf/model.cpp src/parsers/sdf/geometry.cpp + ) -if(BUILD_WITH_EXTRA_SUPPORT) - add_project_dependency(Qhull COMPONENTS qhullcpp qhull_r REQUIRED) - message(STATUS "Found Qhull.") -endif() + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/sdf.hpp + BASE_DIRS include + ) -set_boost_default_options() -export_boost_default_options() -add_project_dependency(Boost REQUIRED COMPONENTS filesystem serialization) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/sdf/geometry.hxx + include/pinocchio/src/parsers/sdf/model.hxx + include/pinocchio/src/parsers/sdf/urdf.hxx + BASE_DIRS include + ) -if(Boost_VERSION_STRING VERSION_LESS 1.81) - if(BUILD_WITH_URDF_SUPPORT AND "${urdfdom_VERSION}" VERSION_GREATER "0.4.2") - check_minimal_cxx_standard(11 ENFORCE) - message( - STATUS - "Since urdfdom >= 1.0.0, the default C++ standard is C++11. The project is then compiled with C++11 standard." + target_link_libraries(pinocchio_parsers PUBLIC pinocchio_sdformat) + + target_compile_definitions( + pinocchio_parsers + PUBLIC PINOCCHIO_WITH_SDFORMAT ) endif() -else() - # Boost.Math will be C++14 starting in July 2023 (Boost 1.82 release) - check_minimal_cxx_standard(14 ENFORCE) -endif() -if(BUILD_PYTHON_INTERFACE) - message( - STATUS - "The Python bindings of Pinocchio will be compiled along the main library. If you want to disable this feature, please set the option BUILD_PYTHON_INTERFACE to OFF." + target_link_libraries( + pinocchio_parsers + PUBLIC pinocchio_default Boost::filesystem ) - set(PYTHON_COMPONENTS Interpreter Development NumPy) - findpython(REQUIRED) - add_project_dependency(eigenpy 2.7.10 REQUIRED) - if(BUILD_STANDALONE_PYTHON_INTERFACE) - add_project_dependency(${PROJECT_NAME} REQUIRED CONFIG) + if(BUILD_WITH_COLLISION_SUPPORT) + target_link_libraries(pinocchio_parsers PUBLIC pinocchio_collision) endif() - if(BUILD_WITH_URDF_SUPPORT) - # console_bridge is urdfdom dependency. - # - # We bind some enum of this library and then must link against it. - add_project_dependency(console_bridge REQUIRED) - endif() -else() - message( - STATUS - "Pinocchio won't be compiled with its Python bindings. If you want to enable this feature, please set the option BUILD_PYTHON_INTERFACE to ON." - ) -endif() + jrl_target_set_default_compile_options(pinocchio_parsers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_parsers PUBLIC) + jrl_target_generate_config_header(pinocchio_parsers INTERFACE FILENAME pinocchio/parsers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_parsers) -if(BUILD_WITH_COLLISION_SUPPORT) - add_project_dependency(coal REQUIRED) + target_link_libraries(pinocchio INTERFACE pinocchio_parsers) + list(APPEND EXPORTED_TARGETS pinocchio_parsers) endif() -if(BUILD_WITH_ACCELERATE_SUPPORT) - if(NOT ${Eigen3_VERSION} VERSION_GREATER_EQUAL "3.4.90") - message( - FATAL_ERROR - "Your version of Eigen is too low. Should be at least 3.4.90. Current version is ${Eigen3_VERSION}." - ) - endif() +# handle special scalars +if(BUILD_WITH_AUTODIFF_SUPPORT) + add_header_and_template_instantiation_targets(pinocchio_cppad) - set(CMAKE_MODULE_PATH - ${JRL_CMAKE_MODULES}/find-external/Accelerate - ${CMAKE_MODULE_PATH} + jrl_target_headers(pinocchio_cppad_headers PUBLIC + HEADERS + include/pinocchio/autodiff/cppad.hpp + BASE_DIRS include + ) + jrl_target_headers(pinocchio_cppad_headers PUBLIC + HEADERS + include/pinocchio/src/autodiff/cppad/algorithm/aba.hxx + include/pinocchio/src/autodiff/cppad/math/quaternion.hxx + include/pinocchio/src/autodiff/cppad/math/taylor-series-expansion.hxx + include/pinocchio/src/autodiff/cppad/spatial/log.hxx + include/pinocchio/src/autodiff/cppad/spatial/se3-tpl.hxx + include/pinocchio/src/autodiff/cppad/utils/static-if.hxx + BASE_DIRS include ) - # FIND_EXTERNAL "Accelerate". - # - # We don't export yet as there might be an issue on AMR64 platforms. - find_package(Accelerate REQUIRED) - message(STATUS "Build with Accelerate support framework.") - add_definitions(-DPINOCCHIO_WITH_ACCELERATE_SUPPORT) -endif() -if( - PINOCCHIO_BUILD_MPFR_TESTING - OR BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT -) - message(STATUS "Build with MPFR support") - set(CMAKE_MODULE_PATH - "${JRL_CMAKE_MODULES}/find-external/GMP" - "${JRL_CMAKE_MODULES}/find-external/MPFR" - ${CMAKE_MODULE_PATH} - ) - find_package(GMP REQUIRED 6.0.0) - find_package(MPFR REQUIRED 4.0.0) -endif() + target_link_libraries( + pinocchio_cppad_headers + INTERFACE pinocchio_default_headers cppad::cppad + ) -# Sources definition -include(sources.cmake) + target_compile_definitions( + pinocchio_cppad_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE + ) -# Dependency free headers -list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CORE_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CORE_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CORE_GENERATED_PUBLIC_HEADERS} -) + target_compile_definitions( + pinocchio_cppad + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" + ) -# Casadi, cppad and cppadcg are still installed. -# User should link by himself with the right library to include them. -list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CASADI_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CASADI_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CPPAD_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CPPAD_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CPPADCG_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CPPADCG_PRIVATE_HEADERS} -) + if(ENABLE_TEMPLATE_INSTANTIATION) + target_compile_definitions( + pinocchio_cppad_template_instantiation + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" + ) + endif() +endif() -# Header only part + deprecated -if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CORE_DEPRECATED_HEADERS} +if(BUILD_WITH_CODEGEN_SUPPORT) + add_header_and_template_instantiation_targets(pinocchio_cppadcg) + + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/codegen/cppadcg-algo.hpp + include/pinocchio/codegen/cppadcg.hpp + BASE_DIRS include ) - list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CPPADCG_DEPRECATED_HEADERS} + + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/src/codegen/cppadcg/algorithm/code-generator-algo.hxx + include/pinocchio/src/codegen/cppadcg/algorithm/code-generator-base.hxx + include/pinocchio/src/codegen/cppadcg/math/cast.hxx + include/pinocchio/src/codegen/cppadcg/math/taylor-series-expansion.hxx + BASE_DIRS include ) -endif() -# Template instantiation sources -if(ENABLE_TEMPLATE_INSTANTIATION) - list( - APPEND ${PROJECT_NAME}_CORE_SOURCES - ${${PROJECT_NAME}_TEMPLATE_INSTANTIATION_SOURCES} + target_link_libraries( + pinocchio_cppadcg_headers + INTERFACE pinocchio_default_headers cppadcg::cppadcg ) -endif() -# OpenMP sources -if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARALLEL_HEADERS - ${${PROJECT_NAME}_PARALLEL_PUBLIC_HEADERS} - ${${PROJECT_NAME}_PARALLEL_PRIVATE_HEADERS} + target_compile_definitions( + pinocchio_cppadcg_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE + ) + + target_compile_definitions( + pinocchio_cppadcg + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx" ) - # OpenMP + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARALLEL_HEADERS - ${${PROJECT_NAME}_PARALLEL_DEPRECATED_HEADERS} + if(ENABLE_TEMPLATE_INSTANTIATION) + target_compile_definitions( + pinocchio_cppadcg_template_instantiation + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx" ) endif() +endif() - # Bindings - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_PARALLEL_SOURCES} +if(BUILD_WITH_CASADI_SUPPORT) + add_header_and_template_instantiation_targets(pinocchio_casadi) + + jrl_target_headers(pinocchio_casadi_headers PUBLIC + HEADERS + include/pinocchio/autodiff/casadi-algo.hpp + include/pinocchio/autodiff/casadi.hpp + BASE_DIRS include ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_PARALLEL_PUBLIC_HEADERS} + + jrl_target_headers(pinocchio_casadi_headers PUBLIC + HEADERS + include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx + include/pinocchio/src/autodiff/casadi/math/alias.hxx + include/pinocchio/src/autodiff/casadi/math/matrix.hxx + include/pinocchio/src/autodiff/casadi/math/quaternion.hxx + include/pinocchio/src/autodiff/casadi/math/taylor-series-expansion.hxx + include/pinocchio/src/autodiff/casadi/math/triangular-matrix.hxx + include/pinocchio/src/autodiff/casadi/spatial/se3-tpl.hxx + include/pinocchio/src/autodiff/casadi/utils/static-if.hxx + BASE_DIRS include ) -endif() -# Collision sources -if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_PUBLIC_HEADERS} - ${${PROJECT_NAME}_COLLISION_PRIVATE_HEADERS} + target_link_libraries( + pinocchio_casadi_headers + INTERFACE pinocchio_default_headers casadi::casadi + ) + + target_compile_definitions( + pinocchio_casadi + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx" ) if(ENABLE_TEMPLATE_INSTANTIATION) - list( - APPEND ${PROJECT_NAME}_COLLISION_SOURCES - ${${PROJECT_NAME}_COLLISION_TEMPLATE_INSTANTIATION_SOURCES} + target_compile_definitions( + pinocchio_casadi_template_instantiation + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx" ) endif() +endif() - # Collision + OpenMP - if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_PARALLEL_PUBLIC_HEADERS} - ${${PROJECT_NAME}_COLLISION_PARALLEL_PRIVATE_HEADERS} - ) - endif() +if(BUILD_WITH_EXTRA_SUPPORT) + add_library(pinocchio_extra SHARED) - # Collision + Deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_DEPRECATED_HEADERS} - ) - endif() + target_sources(pinocchio_extra PRIVATE src/extra/reachable-workspace.cpp) - # Bindings - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_GRAPH_GEOMETRY_SOURCES} + jrl_target_headers(pinocchio_extra PUBLIC + HEADERS + include/pinocchio/extra/reachable-workspace.hpp + BASE_DIRS include ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_SOURCES} + + jrl_target_headers(pinocchio_extra PUBLIC + HEADERS + include/pinocchio/src/extra/reachable-workspace.hxx + BASE_DIRS include ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PUBLIC_HEADERS} + + target_link_libraries( + pinocchio_extra + PUBLIC pinocchio_default Qhull::qhullcpp Qhull::qhull_r ) - if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PARALLEL_SOURCES} - ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PARALLEL_PUBLIC_HEADERS} - ) - endif() -endif() -# Dependencies free parsers -if(BUILD_WITH_PARSERS_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_PARSERS_PUBLIC_HEADERS} - ${${PROJECT_NAME}_PARSERS_PRIVATE_HEADERS} + target_compile_definitions( + pinocchio_extra + PUBLIC PINOCCHIO_WITH_EXTRA_SUPPORT ) - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_PARSERS_DEPRECATED_HEADERS} - ) - endif() + jrl_target_set_default_compile_options(pinocchio_extra PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_extra PUBLIC) + jrl_target_generate_config_header(pinocchio_extra INTERFACE FILENAME pinocchio/extra/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_extra) - # Collision + parsers sources - if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARSERS_SOURCES - ${${PROJECT_NAME}_GEOMETRY_SOURCES} - ) - endif() + target_link_libraries(pinocchio INTERFACE pinocchio_extra) + list(APPEND EXPORTED_TARGETS pinocchio_extra) endif() -# URDF parser sources -if(BUILD_WITH_URDF_SUPPORT) - list(APPEND ${PROJECT_NAME}_PARSERS_SOURCES ${${PROJECT_NAME}_URDF_SOURCES}) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_URDF_PUBLIC_HEADERS} - ${${PROJECT_NAME}_URDF_PRIVATE_HEADERS} +# Define the visualizers target +if(PINOCCHIO_BUILD_VISUALIZERS) + add_library(pinocchio_visualizers SHARED) + target_sources( + pinocchio_visualizers + PRIVATE src/visualizers/base-visualizer.cpp ) - # URDF parsers + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_URDF_DEPRECATED_HEADERS} - ) - endif() -endif() + jrl_target_headers(pinocchio_visualizers PUBLIC + HEADERS + include/pinocchio/visualizers/base-visualizer.hpp + BASE_DIRS include + ) -# SDF parser sources -if(BUILD_WITH_SDF_SUPPORT) - list(APPEND ${PROJECT_NAME}_PARSERS_SOURCES ${${PROJECT_NAME}_SDF_SOURCES}) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_SDF_PUBLIC_HEADERS} - ${${PROJECT_NAME}_SDF_PRIVATE_HEADERS} + jrl_target_headers(pinocchio_visualizers PUBLIC + HEADERS + include/pinocchio/src/visualizers/base-visualizer.hxx + BASE_DIRS include ) - # SDF parsers + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_SDF_DEPRECATED_HEADERS} + target_link_libraries(pinocchio_visualizers PUBLIC pinocchio_default) + + jrl_target_set_default_compile_options(pinocchio_visualizers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_visualizers PUBLIC) + jrl_target_generate_config_header(pinocchio_visualizers INTERFACE FILENAME pinocchio/visualizers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_visualizers) + + target_link_libraries(pinocchio INTERFACE pinocchio_visualizers) + list(APPEND EXPORTED_TARGETS pinocchio_visualizers) + if(BUILD_WITH_COLLISION_SUPPORT) + target_compile_definitions( + pinocchio_visualizers + PUBLIC PINOCCHIO_WITH_COLLISION ) + target_link_libraries(pinocchio_visualizers PUBLIC coal::coal) endif() endif() -# Python parser sources -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_PARSER_HEADERS - ${${PROJECT_NAME}_PYTHON_PARSER_PUBLIC_HEADERS} +if(PINOCCHIO_BUILD_WITH_TRACY) + add_library(pinocchio_tracy INTERFACE) + target_link_libraries(pinocchio_tracy INTERFACE Tracy::TracyClient) + target_link_libraries(pinocchio_default INTERFACE pinocchio_tracy) + list(APPEND EXPORTED_TARGETS pinocchio_tracy) +endif(PINOCCHIO_BUILD_WITH_TRACY) + +# Define the parallel target +if(BUILD_WITH_OPENMP_SUPPORT) + add_library(pinocchio_parallel INTERFACE) + + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/algorithm/parallel/aba.hpp + include/pinocchio/algorithm/parallel/rnea.hpp + BASE_DIRS include ) -endif() -# Extra sources -if(BUILD_WITH_EXTRA_SUPPORT) - list(APPEND ${PROJECT_NAME}_EXTRA_SOURCES ${${PROJECT_NAME}_EXTRA_SOURCES}) - list( - APPEND ${PROJECT_NAME}_EXTRA_HEADERS - ${${PROJECT_NAME}_EXTRA_PUBLIC_HEADERS} - ${${PROJECT_NAME}_EXTRA_PRIVATE_HEADERS} + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/src/algorithm/parallel/aba.hxx + include/pinocchio/src/algorithm/parallel/rnea.hxx + BASE_DIRS include ) -endif() -list( - APPEND ${PROJECT_NAME}_VISUALIZERS_HEADERS - ${${PROJECT_NAME}_VISUALIZERS_PUBLIC_HEADERS} - ${${PROJECT_NAME}_VISUALIZERS_PRIVATE_HEADERS} -) + target_link_libraries( + pinocchio_parallel + INTERFACE pinocchio_default OpenMP::OpenMP_CXX + ) -# List headers to install -list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_CORE_HEADERS}) + target_link_libraries(pinocchio INTERFACE pinocchio_parallel) + list(APPEND EXPORTED_TARGETS pinocchio_parallel) -if(BUILD_WITH_OPENMP_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_PARALLEL_HEADERS}) -endif() + if(BUILD_WITH_COLLISION_SUPPORT) + add_library(pinocchio_collision_parallel INTERFACE) -if(BUILD_WITH_COLLISION_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_COLLISION_HEADERS}) -endif() + jrl_target_headers(pinocchio_collision_parallel PUBLIC + HEADERS + include/pinocchio/collision/parallel/broadphase.hpp + include/pinocchio/collision/parallel/geometry.hpp + BASE_DIRS include + ) -if(BUILD_WITH_PARSERS_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_PARSERS_HEADERS}) -endif() + jrl_target_headers(pinocchio_collision_parallel PUBLIC + HEADERS + include/pinocchio/src/collision/parallel/broadphase.hxx + include/pinocchio/src/collision/parallel/geometry.hxx + BASE_DIRS include + ) -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_PYTHON_PARSER_HEADERS} - ) + target_link_libraries( + pinocchio_collision_parallel + INTERFACE pinocchio_collision OpenMP::OpenMP_CXX + ) + target_link_libraries(pinocchio INTERFACE pinocchio_collision_parallel) + list(APPEND EXPORTED_TARGETS pinocchio_collision_parallel) + endif() endif() -if(BUILD_WITH_EXTRA_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_EXTRA_HEADERS}) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_SOURCES} +# Header only part + deprecated +if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) + target_include_directories( + pinocchio_default_headers + INTERFACE + $ + $ + ) + jrl_target_headers(pinocchio_default_headers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/math/gram-schmidt-orthonormalisation.hpp + include/pinocchio/deprecated/pinocchio/math/comparison-operators.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-inverse-code-generated.hpp + include/pinocchio/deprecated/pinocchio/container/boost-container-limits.hpp + include/pinocchio/deprecated/pinocchio/container/aligned-vector.hpp + include/pinocchio/deprecated/pinocchio/math/tridiagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-product.hpp + include/pinocchio/deprecated/pinocchio/math/quaternion.hpp + include/pinocchio/deprecated/pinocchio/math/alias.hpp + include/pinocchio/deprecated/pinocchio/math/rotation.hpp + include/pinocchio/deprecated/pinocchio/math/sincos.hpp + include/pinocchio/deprecated/pinocchio/math/sign.hpp + include/pinocchio/deprecated/pinocchio/math/lanczos-decomposition.hpp + include/pinocchio/deprecated/pinocchio/math/matrix.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-block.hpp + include/pinocchio/deprecated/pinocchio/math/taylor-expansion.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-inverse.hpp + include/pinocchio/deprecated/pinocchio/math/rpy.hpp + include/pinocchio/deprecated/pinocchio/math/eigenvalues.hpp + include/pinocchio/deprecated/pinocchio/math/eigenvalues-tridiagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/triangular-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/tensor.hpp + include/pinocchio/deprecated/pinocchio/multibody/model-item.hpp + include/pinocchio/deprecated/pinocchio/multibody/fcl.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry-object.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry-object-filter.hpp + include/pinocchio/deprecated/pinocchio/utils/file-explorer.hpp + include/pinocchio/deprecated/pinocchio/spatial/se3.hpp + include/pinocchio/deprecated/pinocchio/serialization/se3.hpp + include/pinocchio/deprecated/pinocchio/serialization/aligned-vector.hpp + include/pinocchio/deprecated/pinocchio/spatial/inertia.hpp + include/pinocchio/deprecated/pinocchio/serialization/inertia.hpp + include/pinocchio/deprecated/pinocchio/spatial/force.hpp + include/pinocchio/deprecated/pinocchio/serialization/csv.hpp + include/pinocchio/deprecated/pinocchio/spatial/skew.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints.hpp + include/pinocchio/deprecated/pinocchio/spatial/motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/force.hpp + include/pinocchio/deprecated/pinocchio/spatial/cartesian-axis.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-transform.hpp + include/pinocchio/deprecated/pinocchio/spatial/act-on-set.hpp + include/pinocchio/deprecated/pinocchio/serialization/spatial.hpp + include/pinocchio/deprecated/pinocchio/spatial/symmetric3.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-data.hpp + include/pinocchio/deprecated/pinocchio/spatial/classic-acceleration.hpp + include/pinocchio/deprecated/pinocchio/spatial/spatial-axis.hpp + include/pinocchio/deprecated/pinocchio/spatial/explog.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-cholesky.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-info.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-jacobian.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-set.hpp + include/pinocchio/deprecated/pinocchio/serialization/motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/model.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/block-diagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/serialization/delassus.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-motion-subspace.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-model.hpp + include/pinocchio/deprecated/pinocchio/serialization/geometry.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-data.hpp + include/pinocchio/deprecated/pinocchio/serialization/coal.hpp + include/pinocchio/deprecated/pinocchio/serialization/fcl.hpp + include/pinocchio/deprecated/pinocchio/serialization/matrix-block-element.hpp + include/pinocchio/deprecated/pinocchio/serialization/symmetric3.hpp + include/pinocchio/deprecated/pinocchio/serialization/frame.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-model.hpp + include/pinocchio/deprecated/pinocchio/serialization/static-buffer.hpp + include/pinocchio/deprecated/pinocchio/serialization/vector.hpp + include/pinocchio/deprecated/pinocchio/serialization/data.hpp + include/pinocchio/deprecated/pinocchio/multibody/frame.hpp + include/pinocchio/deprecated/pinocchio/multibody/data.hpp + include/pinocchio/deprecated/pinocchio/multibody/coal.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry.hpp + include/pinocchio/deprecated/pinocchio/multibody/model.hpp + include/pinocchio/deprecated/pinocchio/multibody/instance-filter.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-model-base.hp + include/pinocchio/deprecated/pinocchio/multibody/pool/geometry.hpp + include/pinocchio/deprecated/pinocchio/multibody/force-set.hpp + include/pinocchio/deprecated/pinocchio/multibody/pool/model.hpp + include/pinocchio/deprecated/pinocchio/multibody/visitor/fusion.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-model-generic + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-data-generic. + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-data-base.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/coulomb-friction-cone.hp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-base.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-algo.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-variant-visitors.h + include/pinocchio/deprecated/pinocchio/multibody/liegroup/vector-space.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-collection.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/cartesian-product.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-generic.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/special-orthogonal.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-joint.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/cartesian-product-variant.h + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/special-euclidean.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-basic-visitors.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-planar.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-spherical.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-universal.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-common-operations.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-helical-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-free-flyer.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-spherical-ZYX.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-prismatic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-ellipsoid.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-composite.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-translation.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-mimic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-base.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unbounded.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-prismatic-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joints.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-generic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unbounded-unali + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-collection.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-helical.hpp + BASE_DIRS include ) -endif() -list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_VISUALIZERS_PUBLIC_HEADERS} -) + if(BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/collision/fcl-pinocchio-conversions.hpp + BASE_DIRS include + ) + endif() -list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS} -) + if(BUILD_WITH_CODEGEN_SUPPORT) + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/codegen/code-generator-algo.hpp + BASE_DIRS include + ) + endif() -# Define PINOCCHIO_WINDOWS_DLL_PATH environment variable on Windows -function(ADD_WINDOWS_DLL_PATH_TO_TEST TEST_NAME) - if(WIN32) - get_test_property(${TEST_NAME} ENVIRONMENT ENV_VARIABLES) - # TODO don't do this in the future - list( - APPEND ENV_VARIABLES - "PINOCCHIO_WINDOWS_DLL_PATH=$" + if(BUILD_WITH_PARSERS_SUPPORT) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/parsers/graph/joints.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-configuration-converter.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/graph-visitor.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph-algo-geometry.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph-algo.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/frames.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/geometries.hpp + include/pinocchio/deprecated/pinocchio/parsers/mjcf/mjcf-graph.hpp + BASE_DIRS include ) - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" + endif() + + if(BUILD_WITH_URDF_SUPPORT) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/parsers/urdf/utils.hpp + BASE_DIRS include ) endif() -endfunction() -# --- MAIN LIBRARY ------------------------------------------------------------- -if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_subdirectory(src) + if(BUILD_WITH_OPENMP_SUPPORT) + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/algorithm/parallel/omp.hpp + BASE_DIRS include + ) + endif() endif() -# --- BINDINGS ----------------------------------------------------------------- +# ---------------------------------------------------- +# --- UNIT TESTS --------------------------------------- +# ---------------------------------------------------- +if(BUILD_TESTING) + enable_testing() + add_subdirectory(unittest) +endif() + +# ---------------------------------------------------- +# --- BINDINGS --------------------------------------- +# ---------------------------------------------------- if(BUILD_PYTHON_INTERFACE) add_subdirectory(bindings) + list(APPEND EXPORTED_TARGETS pinocchio_pywrap_headers) endif() -# --- EXECUTABLES -------------------------------------------------------------- -add_subdirectory(utils) - -# --- UNIT TESTS --------------------------------------------------------------- -add_subdirectory(unittest) +# ---------------------------------------------------- +# --- BENCHMARK -------------------------------------- +# ---------------------------------------------------- +if(BUILD_BENCHMARK) + add_subdirectory(benchmark) +endif() -# --- CHECK EXAMPLES ----------------------------------------------------------- +# ---------------------------------------------------- +# --- EXAMPLES -------------------------------------- +# ---------------------------------------------------- if(BUILD_EXAMPLES) add_subdirectory(examples) endif() -# --- BENCHMARKS --------------------------------------------------------------- -if(BUILD_BENCHMARK AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_subdirectory(benchmark) -endif() - -# --- PACKAGING ---------------------------------------------------------------- -# Export variables in CMake module and in parent scope for workspace compatibility -# PARENT_SCOPE_ONLY: If set: only export in parent scope -# CONDITION: Condition to setup the variable -# VAR_NAME: Variable name -# VAR_VALUE: Varible value -macro(EXPORT_VARIABLE) - set(options PARENT_SCOPE_ONLY) - set(oneValueArgs CONDITION VAR_NAME VAR_VALUE) - set(multiValueArgs) - cmake_parse_arguments( - ARGS - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - if(${ARGS_CONDITION}) - get_directory_property(has_parent PARENT_DIRECTORY) - if(has_parent) - set(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE} PARENT_SCOPE) - else() - set(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE}) - endif() - if(NOT ${ARGS_PARENT_SCOPE_ONLY}) - string( - APPEND PACKAGE_EXTRA_MACROS - "\nset(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE})" - ) - endif() - endif() -endmacro() - -export_variable(CONDITION PINOCCHIO_BUILD_WITH_TRACY - VAR_NAME PINOCCHIO_USE_TRACY - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_URDF_SUPPORT - VAR_NAME PINOCCHIO_USE_URDFDOM - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_COLLISION_SUPPORT - VAR_NAME PINOCCHIO_USE_COAL - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CPPAD_SUPPORT - VAR_NAME PINOCCHIO_USE_CPPAD - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CPPAD_CODEGEN_SUPPORT - VAR_NAME PINOCCHIO_USE_CPPAD_CODEGEN - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CASADI_SUPPORT - VAR_NAME PINOCCHIO_USE_CASADI - VAR_VALUE ON -) -export_variable(CONDITION BUILD_PYTHON_INTERFACE - VAR_NAME PINOCCHIO_WITH_PYTHON_INTERFACE - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_EXTRA_SUPPORT - VAR_NAME PINOCCHIO_USE_EXTRA - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_PYTHON_PARSER_SUPPORT - VAR_NAME PINOCCHIO_USE_PYTHON_PARSER - VAR_VALUE ON -) -export_variable(CONDITION TRUE - VAR_NAME pinocchio_VERSION - VAR_VALUE ${pinocchio_VERSION} - PARENT_SCOPE_ONLY +# ---------------------------------------------------- +# --- EXPORT ---------------------------------------- +# ---------------------------------------------------- +jrl_add_export_component(NAME pinocchio + TARGETS + ${EXPORTED_TARGETS} ) +jrl_export_package() -setup_project_finalize() +# Print summaries +jrl_print_dependencies_summary() +jrl_print_options_summary() diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index bdef4abfb3..1a7ca9b15c 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -6,154 +6,102 @@ # ---------------------------------------------------- # --- BENCHMARK -------------------------------------- # ---------------------------------------------------- -add_custom_target(${PROJECT_NAME}-benchmarks) - -add_project_private_dependency(benchmark REQUIRED) - -function(ADD_PINOCCHIO_BENCHMARK name) - set(options - PARSERS - COLLISION - PARALLEL - COLLISION_PARALLEL - CPPADCG - CPPAD - PARSERS_OPTIONAL - COLLISION_OPTIONAL - PARALLEL_OPTIONAL - COLLISION_PARALLEL_OPTIONAL - CPPADCG_OPTIONAL - CPPAD_OPTIONAL - ) - set(oneValueArgs) - set(multiValueArgs) - cmake_parse_arguments( - bench - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(bench_name "pinocchio-benchmark-${name}") - add_executable(${bench_name} ${name}.cpp) - - target_compile_definitions( - ${bench_name} - PRIVATE - PINOCCHIO_MODEL_DIR="${PINOCCHIO_MODEL_DIR}" - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" - ) - - target_link_libraries(${bench_name} PRIVATE pinocchio_default) - target_link_libraries(${bench_name} PRIVATE benchmark::benchmark) - - modernize_target_link_libraries( - ${bench_name} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - ) - - set(cppad_special_define OFF) - - if(bench_PARSERS OR (bench_PARSERS_OPTIONAL AND TARGET pinocchio_parsers)) - target_link_libraries(${bench_name} PRIVATE pinocchio_parsers) - endif() - if( - bench_COLLISION - OR (bench_COLLISION_OPTIONAL AND TARGET pinocchio_collision) - ) - target_link_libraries(${bench_name} PRIVATE pinocchio_collision) - endif() - if( - bench_PARALLEL - OR (bench_PARALLEL_OPTIONAL AND TARGET pinocchio_parallel) - ) - target_link_libraries(${bench_name} PRIVATE pinocchio_parallel) - endif() - if( - bench_COLLISION_PARALLEL - OR ( - bench_COLLISION_PARALLEL_OPTIONAL - AND TARGET pinocchio_collision_parallel - ) +add_library(pinocchio-benchmarks-resources INTERFACE) +target_compile_definitions( + pinocchio-benchmarks-resources + INTERFACE + PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" + EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\" +) + +add_custom_target(pinocchio-benchmarks) + +function(pinocchio_add_benchmark benchmark_name) + set(target_name "pinocchio-benchmark-${benchmark_name}") + add_executable(${target_name} ${benchmark_name}.cpp) + + target_link_libraries( + ${target_name} + PRIVATE pinocchio benchmark::benchmark pinocchio-benchmarks-resources ) - target_link_libraries( - ${bench_name} - PRIVATE pinocchio_collision_parallel - ) - endif() - if(bench_CPPADCG OR (bench_CPPADCG_OPTIONAL AND TARGET pinocchio_cppadcg)) - target_link_libraries(${bench_name} PRIVATE pinocchio_cppadcg) - set(cppad_special_define ON) - endif() - if(bench_CPPAD OR (bench_CPPAD_OPTIONAL AND TARGET pinocchio_cppad)) - target_link_libraries(${bench_name} PRIVATE pinocchio_cppad) - set(cppad_special_define ON) - endif() - if(cppad_special_define) - target_compile_definitions( - ${bench_name} - PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - target_link_libraries(${bench_name} PRIVATE ${CMAKE_DL_LIBS}) - endif() + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) - add_dependencies(${PROJECT_NAME}-benchmarks ${bench_name}) + add_dependencies(pinocchio-benchmarks ${target_name}) endfunction() -add_pinocchio_benchmark(spatial-operations) - -# timings -# -add_pinocchio_benchmark(timings PARSERS) -if(BUILD_WITH_CODEGEN_SUPPORT) - add_pinocchio_benchmark(timings-cg PARSERS CPPADCG) -endif() - -if(BUILD_WITH_OPENMP_SUPPORT) - add_pinocchio_benchmark(timings-parallel PARSERS PARALLEL COLLISION_PARALLEL_OPTIONAL) -endif() - -# timings cholesky -# -add_pinocchio_benchmark(timings-cholesky PARSERS) -add_pinocchio_benchmark(timings-loop-constrained-aba PARSERS) - -# timings derivatives -# -add_pinocchio_benchmark(timings-derivatives PARSERS) -if(BUILD_WITH_AUTODIFF_SUPPORT) - # timings-cppad-jit - add_pinocchio_benchmark(timings-cppad-jit CPPAD) -endif() +# modernize_target_link_libraries( +# ${bench_name} +# SCOPE PRIVATE +# TARGETS Boost::filesystem +# LIBRARIES ${Boost_FILESYSTEM_LIBRARY} +# INCLUDE_DIRS ${Boost_INCLUDE_DIRS} +# ) +pinocchio_add_benchmark(spatial-operations) # timings-eigen -add_pinocchio_benchmark(timings-eigen) - +pinocchio_add_benchmark(timings-eigen) # timings-linalg -add_pinocchio_benchmark(timings-linalg-inverse) - -# timings-geometry -# -if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_benchmark(timings-geometry PARSERS COLLISION) -endif() +pinocchio_add_benchmark(timings-linalg-inverse) + +if(BUILD_WITH_PARSERS_SUPPORT) + # timings + pinocchio_add_benchmark(timings) + # timings cholesky + pinocchio_add_benchmark(timings-cholesky) + pinocchio_add_benchmark(timings-loop-constrained-aba) + # timings derivatives + pinocchio_add_benchmark(timings-derivatives) + # timings-jacobian + pinocchio_add_benchmark(timings-jacobian) + # timings-contact-dynamics + pinocchio_add_benchmark(timings-delassus-operations) + pinocchio_add_benchmark(timings-contact-dynamics) + pinocchio_add_benchmark(timings-constrained-dynamics-derivatives) + # timings-impulse-dynamics + pinocchio_add_benchmark(timings-impulse-dynamics) + pinocchio_add_benchmark(timings-impulse-dynamics-derivatives) + + # cppacg + if(BUILD_WITH_CODEGEN_SUPPORT) + macro(pinocchio_add_cppadcg_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries( + pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppadcg + ) + target_compile_definitions( + pinocchio-benchmark-${benchmark_name} + PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + endmacro() + pinocchio_add_cppadcg_benchmark(timings-cg) + endif() -# timings-jacobian -# -add_pinocchio_benchmark(timings-jacobian PARSERS) + # parallel + if(BUILD_WITH_OPENMP_SUPPORT) + pinocchio_add_benchmark(timings-parallel) + endif() -# timings-contact-dynamics -# -add_pinocchio_benchmark(timings-delassus-operations PARSERS) -add_pinocchio_benchmark(timings-contact-dynamics PARSERS) -add_pinocchio_benchmark(timings-constrained-dynamics-derivatives PARSERS) + # collision + if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) + pinocchio_add_benchmark(timings-geometry) + endif() -# timings-impulse-dynamics -# -add_pinocchio_benchmark(timings-impulse-dynamics PARSERS) -add_pinocchio_benchmark(timings-impulse-dynamics-derivatives PARSERS) + #cppad + if(BUILD_WITH_AUTODIFF_SUPPORT) + macro(pinocchio_add_cppad_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries( + pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppad + ) + target_compile_definitions( + pinocchio-benchmark-${benchmark_name} + PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + endmacro() + pinocchio_add_cppad_benchmark(timings-cppad-jit) + endif() +endif() diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt index 7c265eb7aa..71e4be5ac2 100644 --- a/bindings/CMakeLists.txt +++ b/bindings/CMakeLists.txt @@ -3,6 +3,3 @@ # add_subdirectory(python) -if(BUILD_PYTHON_INTERFACE) - set(PYWRAP ${PYWRAP} PARENT_SCOPE) -endif(BUILD_PYTHON_INTERFACE) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index ab5cb488c3..d6d78aa847 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -1,409 +1,440 @@ # # Copyright (c) 2015-2023 CNRS INRIA # Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. -# - -include(${JRL_CMAKE_MODULES}/python-helpers.cmake) -include(${JRL_CMAKE_MODULES}/stubs.cmake) - -# --- PYTHON TARGET --- # -set(PYWRAP ${PROJECT_NAME}_pywrap) -set(PYWRAP ${PYWRAP} PARENT_SCOPE) - -# --- COMPILE WRAPPER -make_directory("${${PROJECT_NAME}_BINARY_DIR}/bindings/python/${PROJECT_NAME}") -set(${PYWRAP}_SOURCES ${${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES}) -set(${PYWRAP}_HEADERS ${${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS}) -function(PINOCCHIO_PYTHON_BINDINGS_SPECIFIC_TYPE scalar_name) - set(scalar_name "${scalar_name}") - set(PYTHON_LIB_NAME "${PYWRAP}_${scalar_name}") - - string(TOUPPER ${scalar_name} upper_scalar_name) - set(EXTRA_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_${upper_scalar_name}_SOURCES} - ) - set(EXTRA_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_${upper_scalar_name}_PUBLIC_HEADERS} +function(pinocchio_add_python_binding scalar_name) + set(target_name pinocchio_pywrap_${scalar_name}) + jrl_boostpy_add_module(${target_name} ${ARGN}) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) + jrl_check_python_module_name(${target_name}) + target_link_libraries( + ${target_name} + PRIVATE eigenpy::eigenpy pinocchio_pywrap_headers ) + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_set_output_directory(${target_name} OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio) - set(${PYTHON_LIB_NAME}_SOURCES ${${PYWRAP}_SOURCES} ${EXTRA_SOURCES}) - set(${PYTHON_LIB_NAME}_HEADERS ${${PYWRAP}_HEADERS} ${EXTRA_HEADERS}) - - add_library( - ${PYTHON_LIB_NAME} - SHARED - ${${PYTHON_LIB_NAME}_SOURCES} - ${${PYTHON_LIB_NAME}_HEADERS} + target_compile_definitions( + ${target_name} + PRIVATE + PINOCCHIO_PYTHON_CONTEXT_FILE="pinocchio/bindings/python/context/${scalar_name}.hpp" + PINOCCHIO_PYTHON_MODULE_NAME=${target_name} ) # Links against accelerate if(BUILD_WITH_ACCELERATE_SUPPORT) - # modernize_target_link_libraries(${PYTHON_LIB_NAME} SCOPE PUBLIC TARGETS Accelerate) - target_link_libraries( - ${PYTHON_LIB_NAME} - PRIVATE "-framework accelerate" - ) - endif(BUILD_WITH_ACCELERATE_SUPPORT) + target_link_libraries(${target_name} PRIVATE "-framework accelerate") + endif() if(BUILD_WITH_OPENMP_SUPPORT) # OpenMP is linked with pinocchio_parallel target target_compile_definitions( - ${PYTHON_LIB_NAME} + ${target_name} PRIVATE -DPINOCCHIO_PYTHON_INTERFACE_WITH_OPENMP ) endif() - add_dependencies(${PROJECT_NAME}-python ${PYTHON_LIB_NAME}) - - # Remove lib prefix for the target and use the right define for DLLAPI definition. - # - # Set inlined function visibility to hidden by default. This avoid bug on OSX where two symbol - # from two different binding (`pinocchio::python::exposeSpecificTypeFeatures`) can be wrongly - # loaded (see https://github.com/stack-of-tasks/pinocchio/issues/2462). - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES - PREFIX "" - DEFINE_SYMBOL "${PYWRAP}_EXPORTS" - CXX_VISIBILITY_PRESET hidden - VISIBILITY_INLINES_HIDDEN ON - ) - - # Do not report: - # - # * -Wconversion as the BOOST_PYTHON_FUNCTION_OVERLOADS implicitly converts. - # * -Wcomment as latex equations have multi-line comments. - # * -Wself-assign-overloaded as bp::self operations trigger this (Clang only). - # * -Xclang=-fno-pch-timestamp to allow ccache to use pch - # (https://ccache.dev/manual/latest.html#_precompiled_headers). - cxx_flags_by_compiler_frontend( - GNU -Wno-conversion -Wno-comment -Wno-self-assign-overloaded -Xclang=-fno-pch-timestamp - MSVC -Xclang=-fno-pch-timestamp - OUTPUT PRIVATE_OPTIONS - FILTER - ) - target_compile_options(${PYTHON_LIB_NAME} PRIVATE ${PRIVATE_OPTIONS}) - - set(PINOCCHIO_PYTHON_CONTEXT_FILE_VALUE - "pinocchio/bindings/python/context/${scalar_name}.hpp" - ) - target_compile_definitions( - ${PYTHON_LIB_NAME} - PRIVATE - PINOCCHIO_PYTHON_CONTEXT_FILE="${PINOCCHIO_PYTHON_CONTEXT_FILE_VALUE}" - PINOCCHIO_PYTHON_MODULE_NAME=${PYTHON_LIB_NAME} - ) - - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES VERSION ${PROJECT_VERSION} - ) - if(BUILD_WITH_COMMIT_VERSION) - tag_library_version(${PYTHON_LIB_NAME}) - endif(BUILD_WITH_COMMIT_VERSION) - add_header_group(${PYTHON_LIB_NAME}_HEADERS) - add_source_group(${PYTHON_LIB_NAME}_SOURCES) - - modernize_target_link_libraries( - ${PYTHON_LIB_NAME} - SCOPE PUBLIC - TARGETS eigenpy::eigenpy - ) - target_link_libraries( - ${PYTHON_LIB_NAME} - PUBLIC ${PROJECT_NAME}::${PROJECT_NAME} - ) if(BUILD_WITH_URDF_SUPPORT) # Link directly against console_bridge since we bind some enums and call # console_bridge::setLogLevel function. - modernize_target_link_libraries( - ${PYTHON_LIB_NAME} - SCOPE PUBLIC - TARGETS console_bridge::console_bridge - LIBRARIES ${console_bridge_LIBRARIES} - INCLUDE_DIRS ${console_bridge_INCLUDE_DIRS} + target_link_libraries( + ${target_name} + PUBLIC console_bridge::console_bridge ) endif() + if(BUILD_WITH_COLLISION_SUPPORT) target_compile_definitions( - ${PYTHON_LIB_NAME} + ${target_name} PRIVATE PINOCCHIO_PYTHON_INTERFACE_WITH_COLLISION_PYTHON_BINDINGS ) endif() - if(WIN32) - target_link_libraries(${PYTHON_LIB_NAME} PUBLIC ${PYTHON_LIBRARY}) - endif() - - set(${PYWRAP}_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) - - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES - PREFIX "" - SUFFIX ${PYTHON_EXT_SUFFIX} - OUTPUT_NAME "${PYTHON_LIB_NAME}" - LIBRARY_OUTPUT_DIRECTORY - "${PROJECT_BINARY_DIR}/bindings/python/${PROJECT_NAME}" - # On Windows, shared library are treat as binary - RUNTIME_OUTPUT_DIRECTORY - "${PROJECT_BINARY_DIR}/bindings/python/${PROJECT_NAME}" - ) - - if(UNIX) - get_relative_rpath(${${PYWRAP}_INSTALL_DIR} ${PYWRAP}_INSTALL_RPATH) - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES INSTALL_RPATH "${${PYWRAP}_INSTALL_RPATH}" - ) - endif() - - install( - TARGETS ${PYTHON_LIB_NAME} - EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION ${PINOCCHIO_PYTHON_INSTALL_DIR} - ) -endfunction() - -function(INSTALL_PYTHON_FILES) - set(options) - set(oneValueArgs MODULE) - set(multiValueArgs FILES) - cmake_parse_arguments( - ARGS - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(SOURCE_PATH ${PROJECT_NAME}) - set(INSTALL_PATH ${PINOCCHIO_PYTHON_INSTALL_DIR}) - if(ARGS_MODULE) - set(SOURCE_PATH ${SOURCE_PATH}/${ARGS_MODULE}) - set(INSTALL_PATH ${INSTALL_PATH}/${ARGS_MODULE}) - endif() - - foreach(f ${ARGS_FILES}) - python_build(${SOURCE_PATH} ${f}) - install(FILES ${SOURCE_PATH}/${f} DESTINATION ${INSTALL_PATH}) - endforeach() -endfunction() - -if(BUILD_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-python) - set_target_properties( - ${PROJECT_NAME}-python - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - python_build_get_target(python_build_target) - add_dependencies(${PROJECT_NAME}-python ${python_build_target}) - - if(IS_ABSOLUTE ${PYTHON_SITELIB}) - set(ABSOLUTE_PYTHON_SITELIB ${PYTHON_SITELIB}) - else() - set(ABSOLUTE_PYTHON_SITELIB ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}) - endif() - set(PINOCCHIO_PYTHON_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) - pinocchio_python_bindings_specific_type(default) # Precompiled headers are used to speed up compilation of the Python bindings. We have also tested # precompiling headers for the main library's `pinocchio_default` target, but the time gain there # was negligible compared to the time gained in the Python bindings. We also precompile headers # for other scalar types as well. if(PINOCCHIO_BUILD_BINDING_WITH_PCH) target_precompile_headers( - ${PYWRAP}_default + ${target_name} PRIVATE ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp ) endif() - set(PYTHON_LIB_NAME "${PYWRAP}_default") - set(STUBGEN_DEPENDENCIES "${PYWRAP}_default") - - if(BUILD_WITH_AUTODIFF_SUPPORT) - pinocchio_python_bindings_specific_type(cppad cppad) - # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. - # This can happen when Pinocchio is build in Debug mode and pycppad is build in Release mode. - # See - # https://coin-or.github.io/CppAD/doc/preprocessor.htm#Documented%20Here.CPPAD_DEBUG_AND_RELEASE. - target_compile_definitions( - ${PYWRAP}_cppad - PRIVATE - PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION - CPPAD_DEBUG_AND_RELEASE - ) - target_include_directories( - ${PYWRAP}_cppad - SYSTEM - PUBLIC $ - ) - target_link_libraries(${PYWRAP}_cppad PUBLIC ${cppad_LIBRARY}) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_cppad") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_cppad - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE cppad FILES __init__.py) - endif(BUILD_WITH_AUTODIFF_SUPPORT) - - if(BUILD_WITH_CODEGEN_SUPPORT) - pinocchio_python_bindings_specific_type(cppadcg cppadcg) +endfunction() - # On osx, use default visiblitiy because of an issue with thread_local storage defined in - # cppad/cg/cg.hpp header (see - # https://github.com/stack-of-tasks/pinocchio/pull/2469#issuecomment-2461845127) - if(APPLE) - set_target_properties( - ${PYWRAP}_cppadcg - PROPERTIES CXX_VISIBILITY_PRESET default - ) - endif() +# Define header interface +add_library(pinocchio_pywrap_headers INTERFACE) +add_library(pinocchio::pinocchio_pywrap_headers ALIAS pinocchio_pywrap_headers) +target_link_libraries(pinocchio_pywrap_headers INTERFACE pinocchio) +target_include_directories( + pinocchio_pywrap_headers + INTERFACE + $ + $ +) + +jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/explog.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/classic-acceleration.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/symmetric3.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/motion.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/force.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/inertia.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/se3.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/contact-info.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraint-cholesky.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraint-solver-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/delassus-operator.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/proximal.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/algorithms.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/baumgarte-corrector-param + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data-inheritan + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model-inherita + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-datas.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-models.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-variant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-box-set.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-coulomb-friction-cone + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-trivial-cones.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pybind11-all.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pybind11.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/constant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/version.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/macros.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/path.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/printable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/dependencies.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/conversions.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/address.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/copyable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/registration.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle-map.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/list.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/eigen.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/comparable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-map.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/cast.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/deprecation.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/keep-alive.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/model-checker.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/namespace.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-aligned-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/cppadcg.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/cppad.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/casadi.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/default.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/mpfr.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/generic.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/fwd.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/serialization/serialization.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/serialization/serializable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/tridiagonal-matrix.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/lanczos-decomposition.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/broadphase-manager-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/geometry-functors.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/tree-broadphase-manager.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/frame.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-derived.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-models.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-variant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-liegroup.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-datas.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/liegroups.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-object.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/urdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/sdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/mjcf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/srdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/model-graph.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/graph/model-configuration-converter.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/extra/extras.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/visualizers/visualizer-visitor.hpp + BASE_DIRS include +) + +set(COMMON_SOURCES + spatial/expose-symmetric3.cpp + spatial/expose-force.cpp + spatial/expose-inertia.cpp + spatial/expose-SE3.cpp + spatial/expose-motion.cpp + spatial/expose-explog.cpp + spatial/expose-skew.cpp + algorithm/expose-impulse-dynamics.cpp + algorithm/expose-model.cpp + algorithm/expose-centroidal.cpp + algorithm/expose-aba.cpp + algorithm/expose-algorithms.cpp + algorithm/expose-com.cpp + algorithm/expose-frames.cpp + algorithm/expose-energy.cpp + algorithm/expose-contact-dynamics.cpp + algorithm/expose-constrained-dynamics-derivatives.cpp + algorithm/expose-rnea-derivatives.cpp + algorithm/expose-kinematics.cpp + algorithm/expose-geometry.cpp + algorithm/expose-aba-derivatives.cpp + algorithm/expose-constraint-solvers.cpp + algorithm/expose-contact-inverse-dynamics.cpp + algorithm/expose-joints.cpp + algorithm/expose-constrained-dynamics.cpp + algorithm/expose-loop-constrained-aba.cpp + algorithm/expose-rnea.cpp + algorithm/expose-contact-jacobian.cpp + algorithm/constraints/expose-cones.cpp + algorithm/constraints/expose-constraints.cpp + algorithm/expose-cholesky.cpp + algorithm/expose-regressor.cpp + algorithm/expose-kinematics-derivatives.cpp + algorithm/expose-cat.cpp + algorithm/expose-frames-derivatives.cpp + algorithm/expose-centroidal-derivatives.cpp + algorithm/expose-jacobian.cpp + algorithm/expose-delassus.cpp + algorithm/expose-impulse-dynamics-derivatives.cpp + algorithm/expose-kinematic-regressor.cpp + algorithm/expose-crba.cpp + algorithm/solvers/expose-admm-solver.cpp + algorithm/solvers/expose-pgs-solver.cpp + utils/version.cpp + utils/dependencies.cpp + utils/conversions.cpp + utils/path.cpp + math/expose-linalg.cpp + math/expose-tridiagonal-matrix.cpp + math/expose-lanczos-decomposition.cpp + math/expose-gram-schmidt-orthonormalisation.cpp + math/expose-rpy.cpp + math/expose-eigen-types.cpp + serialization/serialization.cpp + multibody/expose-model.cpp + multibody/expose-liegroups.cpp + multibody/expose-geometry.cpp + multibody/expose-frame.cpp + multibody/expose-data.cpp + multibody/joint/expose-joints.cpp + multibody/sample-models.cpp + parsers/sdf/model.cpp + parsers/sdf/geometry.cpp + parsers/expose-parsers.cpp + parsers/urdf/console-bridge.cpp + parsers/urdf/model.cpp + parsers/urdf/geometry.cpp + parsers/srdf.cpp + parsers/mjcf/model.cpp + parsers/mjcf/geometry.cpp + parsers/graph/expose-edges.cpp + parsers/graph/expose-frames.cpp + parsers/graph/expose-geometries.cpp + parsers/graph/expose-model-graph-algo.cpp + parsers/graph/expose-model-graph.cpp + parsers/graph/expose-model-configuration-converter.cpp + extra/expose-extras.cpp + module.cpp +) + +if(BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/coal/transform.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/fcl/transform.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/broadphase-manager.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/collision.hpp + BASE_DIRS include + ) + list( + APPEND COMMON_SOURCES + collision/expose-broadphase.cpp + collision/expose-broadphase-callbacks.cpp + collision/expose-collision.cpp + collision/expose-coal.cpp + parsers/graph/expose-model-graph-algo-geometry.cpp + ) +endif() - # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. - target_compile_definitions( - ${PYWRAP}_cppadcg - PRIVATE - PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION - CPPAD_DEBUG_AND_RELEASE - ) - target_include_directories( - ${PYWRAP}_cppadcg - SYSTEM - PUBLIC $ +if(BUILD_WITH_OPENMP_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/pool/model.hpp + BASE_DIRS include + ) + list( + APPEND COMMON_SOURCES + multibody/pool/expose-pool.cpp + algorithm/parallel/aba.cpp + algorithm/parallel/expose-parallel.cpp + algorithm/parallel/rnea.cpp + ) + if(BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/pool/geometry.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/pool/broadphase-manager.hpp + BASE_DIRS include ) - target_link_libraries( - ${PYWRAP}_cppadcg - PUBLIC ${cppadcg_LIBRARY} ${cppad_LIBRARY} + list( + APPEND COMMON_SOURCES + collision/parallel/expose-parallel.cpp + collision/parallel/geometry.cpp + collision/parallel/broadphase.cpp + collision/pool/expose-pool.cpp ) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_cppadcg") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_cppadcg - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE cppadcg FILES __init__.py) - endif(BUILD_WITH_CODEGEN_SUPPORT) - - if(BUILD_WITH_CASADI_SUPPORT) - pinocchio_python_bindings_specific_type(casadi) - target_link_libraries(${PYWRAP}_casadi PUBLIC casadi::casadi) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_casadi") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_casadi - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE casadi FILES __init__.py) - endif(BUILD_WITH_CASADI_SUPPORT) - - if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) - pinocchio_python_bindings_specific_type(mpfr) - - target_link_libraries(${PYWRAP}_mpfr PRIVATE gmp mpfr) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_mpfr") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_mpfr - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE mpfr FILES __init__.py) endif() +endif() - # --- INSTALL SCRIPTS - install_python_files( - FILES __init__.py - deprecated.py - deprecation.py - utils.py - robot_wrapper.py - romeo_wrapper.py - explog.py - shortcuts.py - windows_dll_manager.py +if(BUILD_WITH_EXTRA_SUPPORT) + list( + APPEND COMMON_SOURCES + ${PROJECT_SOURCE_DIR}/bindings/python/extra/expose-reachable-workspace.cpp ) - - # --- INSTALL DERIVATIVE SCRIPTS - install_python_files(MODULE derivative FILES xm.py dcrba.py lambdas.py) - - # --- INSTALL VISUALIZATION SCRIPTS - install_python_files( - MODULE visualize - FILES __init__.py - base_visualizer.py - gepetto_visualizer.py - meshcat_visualizer.py - panda3d_visualizer.py - rviz_visualizer.py - viser_visualizer.py - visualizers.py +endif() + +# default scalar +pinocchio_add_python_binding(default ${COMMON_SOURCES}) +add_library(pinocchio_pywrap ALIAS pinocchio_pywrap_default) + +if(GENERATE_PYTHON_STUBS) + set(STUBGEN_DEPENDENCIES) +endif() + +if(BUILD_WITH_AUTODIFF_SUPPORT) + pinocchio_add_python_binding(cppad ${COMMON_SOURCES}) + # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. + # This can happen when Pinocchio is build in Debug mode and pycppad is build in Release mode. + # See + # https://coin-or.github.io/CppAD/doc/preprocessor.htm#Documented%20Here.CPPAD_DEBUG_AND_RELEASE. + target_compile_definitions( + pinocchio_pywrap_cppad + PRIVATE + PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION + CPPAD_DEBUG_AND_RELEASE ) - - # --- STUBS --- # - if(GENERATE_PYTHON_STUBS) - python_build_get_target(python_build_target_name) - load_stubgen() - # Set PYWRAP and PROJECT_NAME as stubs dependencies. - # - # PROJECT_NAME is mandatory (even if it's a PYWRAP dependency) to find PROJECT_NAME name DLL on - # windows. - generate_stubs( - ${CMAKE_CURRENT_BINARY_DIR} - ${PROJECT_NAME} - ${ABSOLUTE_PYTHON_SITELIB} - ${PYWRAP}_default - ${PROJECT_NAME}::${PROJECT_NAME}_default - ${STUBGEN_DEPENDENCIES} - ${python_build_target_name} - ) - endif(GENERATE_PYTHON_STUBS) - - # --- PACKAGING --- # - - if(DOXYGEN_FOUND AND DOXYGEN_VERSION VERSION_GREATER 1.8.17) - set(DOXYGEN_GENERATE_HTML YES) - set(DOXYGEN_GENERATE_LATEX NO) - set(DOXYGEN_PROJECT_NAME "Pinocchio PyBind11 helpers.") - set(_source_headers_root - "../../include/${PROJECT_NAME}/bindings/python" - ) - doxygen_add_docs( - doc_pybind11 - ${_source_headers_root}/pybind11.hpp - ${_source_headers_root}/pybind11-all.hpp - USE_STAMP_FILE - COMMENT "Generating documentation of the PyBind11 helpers." + target_include_directories( + pinocchio_pywrap_cppad + SYSTEM + PUBLIC $ + ) + target_link_libraries(pinocchio_pywrap_cppad PUBLIC ${cppad_LIBRARY}) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_cppad") +endif() + +if(BUILD_WITH_CODEGEN_SUPPORT) + pinocchio_add_python_binding(cppadcg ${COMMON_SOURCES}) + # On osx, use default visiblitiy because of an issue with thread_local storage defined in + # cppad/cg/cg.hpp header (see + # https://github.com/stack-of-tasks/pinocchio/pull/2469#issuecomment-2461845127) + if(APPLE) + set_target_properties( + pinocchio_pywrap_cppadcg + PROPERTIES CXX_VISIBILITY_PRESET default ) endif() -endif(BUILD_PYTHON_INTERFACE) + # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. + target_compile_definitions( + pinocchio_pywrap_cppadcg + PRIVATE + PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION + CPPAD_DEBUG_AND_RELEASE + ) + target_include_directories( + pinocchio_pywrap_cppadcg + SYSTEM + PUBLIC $ + ) + target_link_libraries( + pinocchio_pywrap_cppadcg + PUBLIC ${cppadcg_LIBRARY} ${cppad_LIBRARY} + ) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_cppadcg") +endif() + +if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_binding(casadi ${COMMON_SOURCES}) + target_link_libraries(pinocchio_pywrap_casadi PUBLIC casadi::casadi) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_casadi") +endif() + +if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/multiprecision/boost/number.hpp + BASE_DIRS include + ) + pinocchio_add_python_binding(mpfr ${COMMON_SOURCES} ${PROJECT_SOURCE_DIR}/bindings/python/extra/mpfr/boost_number.cpp) + target_link_libraries(pinocchio_pywrap_mpfr PRIVATE MPFR::MPFR) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_mpfr") +endif() + +# --- PACKAGING --- # +if(DOXYGEN_FOUND AND DOXYGEN_VERSION VERSION_GREATER 1.8.17) + set(DOXYGEN_GENERATE_HTML YES) + set(DOXYGEN_GENERATE_LATEX NO) + set(DOXYGEN_PROJECT_NAME "Pinocchio PyBind11 helpers.") + set(_source_headers_root "../../include/${PROJECT_NAME}/bindings/python") + doxygen_add_docs( + doc_pybind11 + ${_source_headers_root}/pybind11.hpp + ${_source_headers_root}/pybind11-all.hpp + USE_STAMP_FILE + COMMENT "Generating documentation of the PyBind11 helpers." + ) +endif() + +# Generate python stubs +if(GENERATE_PYTHON_STUBS) + jrl_boostpy_add_stubs( + pinocchio_pywrap_stubs + MODULE pinocchio.pinocchio_pywrap_default + OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib/site-packages + PYTHON_PATH ${CMAKE_BINARY_DIR}/lib/site-packages + DEPENDS pinocchio_pywrap + VERBOSE + ) + if(STUBGEN_DEPENDENCIES) + add_dependencies(pinocchio_pywrap_stubs ${STUBGEN_DEPENDENCIES}) + endif() +endif() + +# Compile and move in build directory all .py file +file(COPY pinocchio DESTINATION ${CMAKE_BINARY_DIR}/lib/site-packages) + +jrl_python_compile_all(DIRECTORY + ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio + VERBOSE +) + +# Install binding in the right location +jrl_python_compute_install_dir(python_install_dir) +install( + TARGETS pinocchio_pywrap_default + DESTINATION ${python_install_dir}/pinocchio +) +install( + DIRECTORY + ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio + ${CMAKE_CURRENT_SOURCE_DIR}/pinocchio + DESTINATION ${python_install_dir} + FILES_MATCHING + PATTERN "*.py" + PATTERN "*.pyc" + PATTERN "*.pyi" + PATTERN "*.typed" +) diff --git a/cmake b/cmake deleted file mode 160000 index 648efca10f..0000000000 --- a/cmake +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 648efca10ffc9081c633e5d23d8b069e89eee341 diff --git a/cmake/find-external/CppAD/Findcppad.cmake b/cmake/find-external/CppAD/Findcppad.cmake new file mode 100644 index 0000000000..a41adbe03e --- /dev/null +++ b/cmake/find-external/CppAD/Findcppad.cmake @@ -0,0 +1,38 @@ +# Copyright 2026 Inria + +find_path(cppad_INCLUDE_DIR NAMES cppad/configure.hpp) +find_library(cppad_LIBRARY NAMES cppad_lib) + +mark_as_advanced(cppad_LIBRARY cppad_INCLUDE_DIR) + +if(cppad_INCLUDE_DIR AND NOT TARGET cppad::cppad) + file(READ "${cppad_INCLUDE_DIR}/cppad/configure.hpp" cppad_configure_hpp) + # Version is stored on the following line: + # `# define CPPAD_PACKAGE_STRING "cppad-20260000.0"` + string( + REGEX MATCH + "#[\t ]+define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([0-9\.]*)\"" + _ + ${cppad_configure_hpp} + ) + set(cppad_VERSION ${CMAKE_MATCH_1}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + cppad + REQUIRED_VARS cppad_LIBRARY cppad_INCLUDE_DIR + VERSION_VAR cppad_VERSION +) + +if(cppad_FOUND AND NOT TARGET cppad::cppad) + add_library(cppad::cppad UNKNOWN IMPORTED) + set_target_properties( + cppad::cppad + PROPERTIES + IMPORTED_LOCATION ${cppad_LIBRARY} + VERSION ${cppad_VERSION} + INCLUDE_DIRECTORIES ${cppad_INCLUDE_DIR} + INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} + ) +endif() diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake new file mode 100644 index 0000000000..5665895c85 --- /dev/null +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -0,0 +1,41 @@ +# Copyright 2026 Inria + +find_path(cppadcg_INCLUDE_DIR NAMES cppad/cg.hpp) + +mark_as_advanced(cppadcg_INCLUDE_DIR) + +if(cppadcg_INCLUDE_DIR AND NOT TARGET cppadcg::cppadcg) + file( + READ "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" + cppadcg_configure_hpp + ) + # Version is stored on the following line: + # `#define CPPAD_CG_VERSION "cppadcg-2.5.0"` + string( + REGEX MATCH "#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([0-9\.]*)\"" + _ + ${cppadcg_configure_hpp} + ) + set(cppadcg_VERSION ${CMAKE_MATCH_1}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + cppadcg + REQUIRED_VARS cppadcg_INCLUDE_DIR + VERSION_VAR cppadcg_VERSION +) + +# cppadcg depend of cppad +find_package(cppad REQUIRED) + +if(cppadcg_FOUND AND NOT TARGET cppadcg::cppadcg) + add_library(cppadcg::cppadcg INTERFACE IMPORTED) + set_target_properties( + cppadcg::cppadcg + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${cppadcg_INCLUDE_DIR} + INTERFACE_VERSION ${cppadcg_VERSION} + INTERFACE_LINK_LIBRARIES cppad::cppad + ) +endif() diff --git a/cmake/find-external/GMP/FindGMP.cmake b/cmake/find-external/GMP/FindGMP.cmake new file mode 100644 index 0000000000..21be17af42 --- /dev/null +++ b/cmake/find-external/GMP/FindGMP.cmake @@ -0,0 +1,53 @@ +# Copyright 2026 Inria + +find_path(GMP_INCLUDE_DIR NAMES gmp.h) +find_library(GMP_LIBRARY NAMES gmp) + +mark_as_advanced(GMP_LIBRARY GMP_INCLUDE_DIR) + +if(GMP_INCLUDE_DIR AND NOT TARGET GMP::GMP) + # Version is stored on the following line: + # `#define __GNU_MP_VERSION 6` + # `#define __GNU_MP_VERSION_MINOR 3` + # `#define __GNU_MP_VERSION_PATCHLEVEL 0` + file(READ ${GMP_INCLUDE_DIR}/gmp.h gmp_h) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) + set(GMP_VERSION_MAJOR ${CMAKE_MATCH_1}) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION_MINOR[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) + set(GMP_VERSION_MINOR ${CMAKE_MATCH_1}) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) + set(GMP_VERSION_MICRO ${CMAKE_MATCH_1}) + set(GMP_VERSION + ${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_MICRO} + ) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + GMP + REQUIRED_VARS GMP_LIBRARY GMP_INCLUDE_DIR + VERSION_VAR GMP_VERSION +) + +if(GMP_FOUND AND NOT TARGET GMP::GMP) + add_library(GMP::GMP UNKNOWN IMPORTED) + set_target_properties( + GMP::GMP + PROPERTIES + IMPORTED_LOCATION ${GMP_LIBRARY} + VERSION ${GMP_VERSION} + INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR} + ) +endif() diff --git a/cmake/find-external/MPFR/FindMPFR.cmake b/cmake/find-external/MPFR/FindMPFR.cmake new file mode 100644 index 0000000000..ace6e1b7e8 --- /dev/null +++ b/cmake/find-external/MPFR/FindMPFR.cmake @@ -0,0 +1,55 @@ +# Copyright 2026 Inria + +find_path(MPFR_INCLUDE NAMES mpfr.h) +find_library(MPFR_LIBRARY mpfr) + +mark_as_advanced(MPFR_LIBRARY MPFR_INCLUDE) + +if(MPFR_INCLUDE AND NOT TARGET MPFR::MPFR) + file(READ "${MPFR_INCLUDE}/mpfr.h" mpfr_h) + + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" + _mpfr_major_version_match + "${mpfr_h}" + ) + set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" + _mpfr_minor_version_match + "${mpfr_h}" + ) + set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" + _mpfr_patchlevel_version_match + "${mpfr_h}" + ) + set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") + + set(MPFR_VERSION + ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION} + ) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + MPFR + REQUIRED_VARS MPFR_LIBRARY MPFR_INCLUDE + VERSION_VAR MPFR_VERSION +) + +# mpfr depend of gmp +find_package(GMP REQUIRED) + +if(MPFR_FOUND AND NOT TARGET MPFR::MPFR) + add_library(MPFR::MPFR UNKNOWN IMPORTED) + set_target_properties( + MPFR::MPFR + PROPERTIES + IMPORTED_LOCATION ${MPFR_LIBRARY} + VERSION ${MPFR_VERSION} + INCLUDE_DIRECTORIES ${MPFR_INCLUDE} + INTERFACE_LINK_LIBRARIES GMP::GMP + ) +endif() diff --git a/cmake/get-jrl-cmakemodules.cmake b/cmake/get-jrl-cmakemodules.cmake new file mode 100644 index 0000000000..1966aeacb9 --- /dev/null +++ b/cmake/get-jrl-cmakemodules.cmake @@ -0,0 +1,53 @@ +# Get jrl-cmakemodules package + +# Option 1: pass -DJRL_CMAKEMODULES_SOURCE_DIR=... to cmake command line +if(JRL_CMAKEMODULES_SOURCE_DIR) + message( + DEBUG + "JRL_CMAKEMODULES_SOURCE_DIR variable set, adding jrl-cmakemodules from source directory: ${JRL_CMAKEMODULES_SOURCE_DIR}" + ) + add_subdirectory(${JRL_CMAKEMODULES_SOURCE_DIR} jrl-cmakemodules) + return() +endif() + +# Option 2: use JRL_CMAKEMODULES_SOURCE_DIR environment variable (pixi might unset it, prefer option 1) +if(ENV{JRL_CMAKEMODULES_SOURCE_DIR}) + message( + DEBUG + "JRL_CMAKEMODULES_SOURCE_DIR environement variable set, adding jrl-cmakemodules from source directory: ${JRL_CMAKEMODULES_SOURCE_DIR}" + ) + add_subdirectory(${JRL_CMAKEMODULES_SOURCE_DIR} jrl-cmakemodules) + return() +endif() + +# Try to look for the installed package +message(DEBUG "Looking for jrl-cmakemodules using find_package().") +find_package(jrl-cmakemodules 1.2.0 CONFIG QUIET) + +# If we have the package, we are done. +if(jrl-cmakemodules_FOUND) + message(DEBUG "Found jrl-cmakemodules package via find_package().") + return() +else() + message(DEBUG "jrl-cmakemodules package not found using find_package().") +endif() + +# Fallback to FetchContent if not found +set(JRL_GIT_REPOSITORY "https://github.com/ahoarau/jrl-cmakemodules.git") +set(JRL_GIT_TAG "jrl-next") + +message( + DEBUG + "Fetching jrl-cmakemodules using FetchContent: + GIT_REPOSITORY: ${JRL_GIT_REPOSITORY} + GIT_TAG : ${JRL_GIT_TAG} +" +) + +include(FetchContent) +FetchContent_Declare( + jrl-cmakemodules + GIT_REPOSITORY ${JRL_GIT_REPOSITORY} + GIT_TAG ${JRL_GIT_TAG} +) +FetchContent_MakeAvailable(jrl-cmakemodules) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0b3421200b..858a486137 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -2,194 +2,210 @@ # Copyright (c) 2015-2024 CNRS INRIA # -# Compute flags outside the macro to avoid recomputing it for each tests -cxx_flags_by_compiler_frontend(MSVC _USE_MATH_DEFINES OUTPUT EXAMPLE_PRIVATE_DEFINITIONS) - -function(ADD_PINOCCHIO_CPP_EXAMPLE EXAMPLE) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(options PARSERS CPPAD CPPADCG CASADI) - set(oneValueArgs) - set(multiValueArgs) - cmake_parse_arguments( - example - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} +add_custom_target(pinocchio-examples) + +function(pinocchio_add_cpp_example example_name) + set(target_name "pinocchio-example-cpp-${example_name}") + pinocchio_add_cpp_test_or_example(${target_name} ${example_name}) + add_dependencies(pinocchio-examples ${target_name}) + + if(MSVC) + target_compile_definitions(${target_name} PRIVATE _USE_MATH_DEFINES) + endif() + if(WIN32) + string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") + set(ENV_VARIABLES + "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" + ) + set_tests_properties( + ${target_name} + PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" ) + endif() + # modernize_target_link_libraries( + # ${EXAMPLE_NAME} + # SCOPE PRIVATE + # TARGETS Boost::filesystem + # LIBRARIES ${Boost_FILESYSTEM_LIBRARY} + # INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + # ) +endfunction() - get_filename_component(EXAMPLE_NAME ${EXAMPLE} NAME) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-cpp-${EXAMPLE_NAME}") - add_unit_test(${EXAMPLE_NAME} "${EXAMPLE}.cpp") - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}) +function(pinocchio_add_python_example example_name) + pinocchio_add_python_test_or_example("${PROJECT_NAME}-example-py-${example_name}" "${example_name}") + # TODO handle add_windows_dll_path_to_test +endfunction() - if(example_PARSERS) - target_link_libraries( - ${EXAMPLE_NAME} - PUBLIC ${PROJECT_NAME}_parsers - ) - endif() +if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) + pinocchio_add_cpp_example(inverse-kinematics) + pinocchio_add_cpp_example(inverse-kinematics-3d) + pinocchio_add_cpp_example(overview-simple) + pinocchio_add_cpp_example(overview-lie) + pinocchio_add_cpp_example(overview-SE3) + pinocchio_add_cpp_example(interpolation-SE3) + + if(BUILD_WITH_PARSERS_SUPPORT) + pinocchio_add_cpp_example(model-graph) + pinocchio_add_cpp_example(model-configuration-converter) + endif() - if(example_CPPAD) - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}_cppad) + if(BUILD_WITH_URDF_SUPPORT) + pinocchio_add_cpp_example(overview-urdf) + pinocchio_add_cpp_example(build-reduced-model) + pinocchio_add_cpp_example(geometry-models) + pinocchio_add_cpp_example(kinematics-derivatives) + pinocchio_add_cpp_example(forward-dynamics-derivatives) + pinocchio_add_cpp_example(inverse-dynamics-derivatives) + if(BUILD_ADVANCED_TESTING) + pinocchio_add_cpp_example(multiprecision) endif() + endif() - if(example_CPPADCG) + if(BUILD_WITH_COLLISION_SUPPORT AND BUILD_WITH_URDF_SUPPORT) + pinocchio_add_cpp_example(collisions) + endif() + + if(BUILD_WITH_CASADI_SUPPORT) + function(pinocchio_add_casadi_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies( + pinocchio-example-cpp-casadi + pinocchio-example-cpp-${name} + ) + target_compile_definitions( + pinocchio-example-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) target_link_libraries( - ${EXAMPLE_NAME} - PUBLIC ${PROJECT_NAME}_cppadcg + pinocchio-example-cpp-${name} + PRIVATE pinocchio_casadi_headers ) - endif() - - if(example_CASADI) - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}_casadi) - endif() + endfunction() - target_compile_definitions( - ${EXAMPLE_NAME} - PRIVATE ${EXAMPLE_PRIVATE_DEFINITIONS} - ) - - modernize_target_link_libraries( - ${EXAMPLE_NAME} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + add_custom_target(pinocchio-example-cpp-casadi) + set_target_properties( + pinocchio-example-cpp-casadi + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) + pinocchio_add_casadi_example(casadi-aba) + pinocchio_add_casadi_example(casadi-crba) + pinocchio_add_casadi_example(casadi-rnea) + endif() - # There is no RPATH in Windows, then we must use the PATH to find the DLL - if(WIN32) - string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") - set(ENV_VARIABLES - "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" + if(BUILD_WITH_AUTODIFF_SUPPORT) + function(pinocchio_add_cppad_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies( + pinocchio-example-cpp-cppad + pinocchio-example-cpp-${name} ) - set_tests_properties( - ${EXAMPLE_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() - if(TARGET example-robot-data::example-robot-data) target_link_libraries( - ${EXAMPLE_NAME} - PRIVATE example-robot-data::example-robot-data + pinocchio-example-cpp-${name} + PRIVATE pinocchio_cppad_headers ) - else() - target_compile_definitions( - ${EXAMPLE_NAME} - PRIVATE - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" - ) - endif() + endfunction() + add_custom_target(pinocchio-example-cpp-cppad) + set_target_properties( + pinocchio-example-cpp-cppad + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + pinocchio_add_cppad_example(autodiff-rnea) endif() -endfunction() -add_pinocchio_cpp_example(inverse-kinematics) -add_pinocchio_cpp_example(inverse-kinematics-3d) -add_pinocchio_cpp_example(overview-simple) -add_pinocchio_cpp_example(overview-lie) -add_pinocchio_cpp_example(overview-SE3) -add_pinocchio_cpp_example(interpolation-SE3) -add_pinocchio_cpp_example(model-graph PARSERS) -add_pinocchio_cpp_example(model-configuration-converter PARSERS) - -if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_cpp_example(overview-urdf PARSERS) - add_pinocchio_cpp_example(build-reduced-model PARSERS) - add_pinocchio_cpp_example(geometry-models PARSERS) - add_pinocchio_cpp_example(kinematics-derivatives PARSERS) - add_pinocchio_cpp_example(forward-dynamics-derivatives PARSERS) - add_pinocchio_cpp_example(inverse-dynamics-derivatives PARSERS) - if(BUILD_ADVANCED_TESTING) - add_pinocchio_cpp_example(multiprecision PARSERS) - endif() -endif() + if(BUILD_WITH_CODEGEN_SUPPORT AND BUILD_WITH_URDF_SUPPORT) + function(pinocchio_add_cppadcg_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies( + pinocchio-example-cpp-cppadcg + pinocchio-example-cpp-${name} + ) + target_compile_definitions( + pinocchio-example-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) -if(BUILD_WITH_COLLISION_SUPPORT) - if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_cpp_example(collisions PARSERS) + target_link_libraries( + pinocchio-example-cpp-${name} + PRIVATE pinocchio_cppadcg_headers + ) + endfunction() + add_custom_target(pinocchio-example-cpp-cppadcg) + set_target_properties( + pinocchio-example-cpp-cppadcg + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + pinocchio_add_cppadcg_example(codegen-rnea) + pinocchio_add_cppadcg_example(codegen-crba) endif() endif() if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_PYTHON_EXAMPLES - inverse-kinematics - inverse-kinematics-3d - overview-simple - kinematics-derivatives - forward-dynamics-derivatives - inverse-dynamics-derivatives - model-graph - model-configuration-converter - ellipsoid-joint-kinematics - admm-constraint-solver - ) + pinocchio_add_python_example(inverse-kinematics) + pinocchio_add_python_example(inverse-kinematics-3d) + pinocchio_add_python_example(overview-simple) + pinocchio_add_python_example(kinematics-derivatives) + pinocchio_add_python_example(forward-dynamics-derivatives) + pinocchio_add_python_example(inverse-dynamics-derivatives) + pinocchio_add_python_example(model-graph) + pinocchio_add_python_example(model-configuration-converter) + pinocchio_add_python_example(ellipsoid-joint-kinematics) + pinocchio_add_python_example(admm-constraint-solver) if(BUILD_WITH_URDF_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - overview-urdf - gepetto-viewer - build-reduced-model - robot-wrapper-viewer - geometry-models - constraint-cholesky - ) + pinocchio_add_python_example(overview-urdf) + pinocchio_add_python_example(gepetto-viewer) + pinocchio_add_python_example(build-reduced-model) + pinocchio_add_python_example(robot-wrapper-viewer) + pinocchio_add_python_example(geometry-models) + pinocchio_add_python_example(constraint-cholesky) + if(BUILD_ADVANCED_TESTING) # Set as advanced testing because it need a new # example_robot_data release (> 4.4) # and because computation is long in Debug - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - g1-constraint-simulation - ) + + pinocchio_add_python_example(g1-constraint-simulation) endif() endif() + if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_example(quadrotor-ocp) + endif() + + if(BUILD_WITH_AUTODIFF_SUPPORT) + pinocchio_add_python_example(autodiff-rnea) + endif() + + if(BUILD_WITH_CODEGEN_SUPPORT) + pinocchio_add_python_example(codegen-rnea) + endif() + if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - sample-model-viewer - display-shapes - simulation-pendulum - simulation-closed-kinematic-chains - simulation-lcaba - model-graph-geometry - ) + pinocchio_add_python_example(sample-model-viewer) + pinocchio_add_python_example(display-shapes) + pinocchio_add_python_example(simulation-pendulum) + pinocchio_add_python_example(simulation-closed-kinematic-chains) + pinocchio_add_python_example(simulation-lcaba) + pinocchio_add_python_example(model-graph-geometry) + if(BUILD_WITH_URDF_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - meshcat-viewer - meshcat-viewer-dae - viser-viewer - collisions - collision-with-point-clouds - append-urdf-model-with-another-model - simulation-contact-dynamics - # talos-simulation - static-contact-dynamics - ) + pinocchio_add_python_example(meshcat-viewer) + pinocchio_add_python_example(meshcat-viewer-dae) + pinocchio_add_python_example(viser-viewer) + pinocchio_add_python_example(collisions) + pinocchio_add_python_example(collision-with-point-clouds) + pinocchio_add_python_example(append-urdf-model-with-another-model) + pinocchio_add_python_example(simulation-contact-dynamics) + #pinocchio_add_python_example(talos-simulation) + pinocchio_add_python_example(static-contact-dynamics) + endif() + + if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_example(cartpole) endif() endif() if(BUILD_WITH_OPENMP_SUPPORT) - list(APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES run-algo-in-parallel) + pinocchio_add_python_example(run-algo-in-parallel) endif() - - foreach(EXAMPLE ${${PROJECT_NAME}_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test("${EXAMPLE_NAME}" "examples/${EXAMPLE}.py" "bindings/python") - get_test_property(${EXAMPLE_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${EXAMPLE_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() endif() - -add_subdirectory(casadi) -add_subdirectory(cppad) -add_subdirectory(codegen) diff --git a/examples/cppad/autodiff-rnea.cpp b/examples/autodiff-rnea.cpp similarity index 100% rename from examples/cppad/autodiff-rnea.cpp rename to examples/autodiff-rnea.cpp diff --git a/examples/cppad/autodiff-rnea.py b/examples/autodiff-rnea.py similarity index 100% rename from examples/cppad/autodiff-rnea.py rename to examples/autodiff-rnea.py diff --git a/examples/casadi/cartpole.py b/examples/cartpole.py similarity index 100% rename from examples/casadi/cartpole.py rename to examples/cartpole.py diff --git a/examples/casadi/casadi-aba.cpp b/examples/casadi-aba.cpp similarity index 100% rename from examples/casadi/casadi-aba.cpp rename to examples/casadi-aba.cpp diff --git a/examples/casadi/casadi-crba.cpp b/examples/casadi-crba.cpp similarity index 100% rename from examples/casadi/casadi-crba.cpp rename to examples/casadi-crba.cpp diff --git a/examples/casadi/casadi-rnea.cpp b/examples/casadi-rnea.cpp similarity index 100% rename from examples/casadi/casadi-rnea.cpp rename to examples/casadi-rnea.cpp diff --git a/examples/casadi/CMakeLists.txt b/examples/casadi/CMakeLists.txt deleted file mode 100644 index 63be3ca4e5..0000000000 --- a/examples/casadi/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright (c) 2025 INRIA -# - -function(ADD_PINOCCHIO_CPP_CASADI_EXAMPLE EXAMPLE) - add_pinocchio_cpp_example(${EXAMPLE} CASADI) -endfunction() - -if(BUILD_WITH_CASADI_SUPPORT) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_pinocchio_cpp_casadi_example(casadi-aba) - add_pinocchio_cpp_casadi_example(casadi-crba) - add_pinocchio_cpp_casadi_example(casadi-rnea) - endif() - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES quadrotor-ocp) - if(BUILD_WITH_COLLISION_SUPPORT) - list(APPEND ${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES cartpole) - endif() - - foreach(EXAMPLE ${${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-casadi-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/casadi/${EXAMPLE}.py" "bindings/python") - get_test_property(${EXAMPLE_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${EXAMPLE_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/codegen/codegen-crba.cpp b/examples/codegen-crba.cpp similarity index 100% rename from examples/codegen/codegen-crba.cpp rename to examples/codegen-crba.cpp diff --git a/examples/codegen/codegen-rnea.cpp b/examples/codegen-rnea.cpp similarity index 100% rename from examples/codegen/codegen-rnea.cpp rename to examples/codegen-rnea.cpp diff --git a/examples/codegen/codegen-rnea.py b/examples/codegen-rnea.py similarity index 100% rename from examples/codegen/codegen-rnea.py rename to examples/codegen-rnea.py diff --git a/examples/codegen/CMakeLists.txt b/examples/codegen/CMakeLists.txt deleted file mode 100644 index 4a3787f917..0000000000 --- a/examples/codegen/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2020-2023 INRIA -# - -if(cppadcg_FOUND AND BUILD_WITH_CODEGEN_SUPPORT AND BUILD_WITH_URDF_SUPPORT) - function(ADD_PINOCCHIO_CPP_CODEGEN_EXAMPLE EXAMPLE) - add_pinocchio_cpp_example( - ${EXAMPLE} - CPPADCG - PARSERS - ) - target_link_libraries( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC ${CMAKE_DL_LIBS} - ) - target_compile_definitions( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - endfunction() - - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_pinocchio_cpp_codegen_example(codegen-crba) - add_pinocchio_cpp_codegen_example(codegen-rnea) - endif() - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_CODEGEN_PYTHON_EXAMPLES codegen-rnea) - - foreach(EXAMPLE ${${PROJECT_NAME}_CODEGEN_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/codegen/${EXAMPLE}.py" "bindings/python") - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/cppad/CMakeLists.txt b/examples/cppad/CMakeLists.txt deleted file mode 100644 index 27c95888bb..0000000000 --- a/examples/cppad/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2022 INRIA -# - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - function(ADD_PINOCCHIO_CPP_AUTODIFF_EXAMPLE EXAMPLE) - include_directories(SYSTEM ${cppadcg_INCLUDE_DIR}) - add_pinocchio_cpp_example(${EXAMPLE} CPPAD) - target_link_libraries( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC ${CMAKE_DL_LIBS} - ) - endfunction() - - add_pinocchio_cpp_autodiff_example(autodiff-rnea) - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_AUTODIFF_PYTHON_EXAMPLES autodiff-rnea) - - foreach(EXAMPLE ${${PROJECT_NAME}_AUTODIFF_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/cppad/${EXAMPLE}.py" "bindings/python") - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/casadi/quadrotor-ocp.py b/examples/quadrotor-ocp.py similarity index 100% rename from examples/casadi/quadrotor-ocp.py rename to examples/quadrotor-ocp.py diff --git a/examples/casadi/simulation-pendulum-variational.ipynb b/examples/simulation-pendulum-variational.ipynb similarity index 100% rename from examples/casadi/simulation-pendulum-variational.ipynb rename to examples/simulation-pendulum-variational.ipynb diff --git a/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx b/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx index ca2fed4df4..bda459b4b4 100644 --- a/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx +++ b/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx @@ -86,17 +86,18 @@ namespace pinocchio return file.good(); } - void compileLib() + void compileLib( + const std::string & compiler_path = "/user/bin/gcc", + const std::string & compile_options = "-Ofast") { - std::string compile_command = - "clang -fPIC -shared -Ofast -DNDEBUG " + filename + ".c -o " + libname + ".so"; + std::string compile_command = compiler_path + " -x c -fPIC -shared -DNDEBUG " + filename + + ".c -o " + libname + ".so " + compile_options; #ifdef __APPLE__ compile_command += " -isysroot " "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/" "Developer/SDKs/MacOSX.sdk"; #endif - const int flag = system(compile_command.c_str()); if (flag != 0) { @@ -104,10 +105,14 @@ namespace pinocchio } } - void loadLib(const bool generate_if_not_exist = true) + void loadLib( + const bool generate_if_not_exist = true, + const std::string & compiler_path = "/usr/bin/gcc", + const std::string & compile_options = "-Ofast") + { if (!existLib() && generate_if_not_exist) - compileLib(); + compileLib(compiler_path, compile_options); fun = ::casadi::external(fun_name, "./" + libname + ".so"); if (build_jacobian) diff --git a/models/example-robot-data b/models/example-robot-data deleted file mode 160000 index cdd6a3f938..0000000000 --- a/models/example-robot-data +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cdd6a3f938778cb6aed07a12a179125b700b1d04 diff --git a/pixi.toml b/pixi.toml index 95cf768f04..9930c75627 100644 --- a/pixi.toml +++ b/pixi.toml @@ -12,6 +12,8 @@ preview = ["pixi-build"] ccache = ">=4.9.1" cxx-compiler = ">=1.7.0" cmake = ">=3.10" +jrl-cmakemodules = ">=2.0.0" +example-robot-data = ">=5.0.0" ninja = ">=1.11" pkg-config = ">=0.29.2" doxygen = ">=1.12.0" @@ -77,6 +79,8 @@ extra-args = [ [package.build-dependencies] pkg-config = ">=0.29.2" +jrl-cmakemodules = ">=2.0.0" +example-robot-data = ">=5.0.0" [package.host-dependencies] libboost-devel = ">=1.80.0" diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 4ae98a10c2..7cc34f3f0b 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -4,513 +4,48 @@ # Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. # -# --- MACROS ------------------------------------------------------------------ -# --- MACROS ------------------------------------------------------------------ -# --- MACROS ------------------------------------------------------------------ - -function(ADD_TEST_CFLAGS target) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - get_cpp_test_name(${target} ${CMAKE_CURRENT_SOURCE_DIR} test_name) - foreach(ARG ${ARGN}) - set_property( - TARGET ${test_name} - APPEND_STRING - PROPERTY COMPILE_FLAGS "${ARG} " - ) - endforeach() - endif() -endfunction() - -set(PINOCCHIO_UNIT_TEST_HEADERS - ${PROJECT_SOURCE_DIR}/unittest/constraints/init_constraints.hpp - ${PROJECT_SOURCE_DIR}/unittest/constraints/jacobians-checker.hpp -) - -# Compute flags outside the macro to avoid recomputing it for each tests -cxx_flags_by_compiler_frontend(MSVC _USE_MATH_DEFINES OUTPUT TEST_PRIVATE_DEFINITIONS) - -function(GET_CPP_TEST_NAME name src_dir full_test_name) - string(REPLACE "${PINOCCHIO_UNIT_TEST_DIR}" "" prefix_name "${src_dir}") - string(REGEX REPLACE "[/]" "-" prefix_name "${prefix_name}-") - - set(${full_test_name} - "${PROJECT_NAME}-test-cpp${prefix_name}${name}" - PARENT_SCOPE +add_library(pinocchio-tests-resources INTERFACE) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization-data) +target_compile_definitions( + pinocchio-tests-resources + INTERFACE + TEST_SERIALIZATION_FOLDER=\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\" + PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" +) + +add_custom_target(pinocchio-tests) + +# ---------------------------------------------------- +# --- MACROS ---------------------------------------- +# ---------------------------------------------------- + +function(pinocchio_add_cpp_test_or_example target_name file_name) + add_executable(${target_name} ${file_name}.cpp) + target_link_libraries( + ${target_name} + PRIVATE + Boost::unit_test_framework + pinocchio + pinocchio-tests-resources + example-robot-data::example-robot-data ) -endfunction() - -set(PINOCCHIO_UNIT_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - -function(ADD_PINOCCHIO_UNIT_TEST name) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(options - HEADER_ONLY - PARSERS - EXTRA - COLLISION - CPPAD - PARALLEL - VISUALIZERS - PYTHON_PARSER - PARSERS_OPTIONAL - EXTRA_OPTIONAL - COLLISION_OPTIONAL - PARALLEL_OPTIONAL - ) - set(oneValueArgs) - set(multiValueArgs PACKAGES) - cmake_parse_arguments( - unit_test - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(PKGS ${unit_test_PACKAGES}) - - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_unit_test(${TEST_NAME} ${name}.cpp) - - set(MODULE_NAME "${NAME}Test") - string(REPLACE "-" "_" MODULE_NAME ${MODULE_NAME}) - target_compile_definitions( - ${TEST_NAME} - PRIVATE - ${TEST_PRIVATE_DEFINITIONS} - BOOST_TEST_DYN_LINK - BOOST_TEST_MODULE=${MODULE_NAME} - PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" - ) - - # There is no RPATH in Windows, then we must use the PATH to find the DLL - if(WIN32) - string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") - set(ENV_VARIABLES - "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" - ) - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() - - set_target_properties(${TEST_NAME} PROPERTIES LINKER_LANGUAGE CXX) - target_include_directories( - ${TEST_NAME} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ) - - if(unit_test_HEADER_ONLY) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_headers) - else() - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_default) - endif() - - if( - unit_test_PARSERS - OR (unit_test_PARSERS_OPTIONAL AND TARGET ${PROJECT_NAME}_parsers) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_parsers) - endif() - - if( - unit_test_PARALLEL - OR (unit_test_PARALLEL_OPTIONAL AND TARGET ${PROJECT_NAME}_parallel) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_parallel) - endif() - - if( - unit_test_COLLISION - OR (unit_test_COLLISION_OPTIONAL AND TARGET ${PROJECT_NAME}_collision) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_collision) - if( - unit_test_PARALLE - OR ( - unit_test_PARALLEL_OPTIONAL - AND TARGET ${PROJECT_NAME}_parallel - ) - ) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_collision_parallel - ) - endif() - endif() - if(unit_test_CPPAD) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_cppad) - endif() + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) - if( - unit_test_EXTRA - OR (unit_test_EXTRA_OPTIONAL AND TARGET ${PROJECT_NAME}_extra) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_extra) - endif() - - if(unit_test_VISUALIZERS) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_visualizers - ) - endif() - - if(unit_test_PYTHON_PARSER) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_python_parser - ) - add_windows_dll_path_to_test(${TEST_NAME}) - get_test_property(${TEST_NAME} ENVIRONMENT ENV_VARIABLES) - compute_pythonpath(PYTHON_ENV_VARIABLES "bindings/python") - list(APPEND ENV_VARIABLES ${PYTHON_ENV_VARIABLES}) - if(WIN32) - # This line is mandatory because of Github action. The test run well on Windows + Conda. - # This hide something wrong. Maybe the test is linking against the wrong Python library or - # call the wrong interpreter. - get_filename_component(_PYTHONHOME ${PYTHON_EXECUTABLE} PATH) - list(APPEND ENV_VARIABLES "PYTHONHOME=${_PYTHONHOME}") - endif() - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() - - modernize_target_link_libraries( - ${TEST_NAME} - SCOPE PRIVATE - TARGETS Boost::unit_test_framework - LIBRARIES ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} - ) - - modernize_target_link_libraries( - ${TEST_NAME} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - ) - - if(PKGS) - target_link_libraries(${TEST_NAME} PRIVATE ${PKGS}) - endif() - if(TARGET example-robot-data::example-robot-data) - target_link_libraries( - ${TEST_NAME} - PRIVATE example-robot-data::example-robot-data - ) - else() - target_compile_definitions( - ${TEST_NAME} - PRIVATE - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" - ) - endif() - endif() + add_test(NAME ${target_name} COMMAND ${target_name}) endfunction() -macro(ADD_PINOCCHIO_PARALLEL_UNIT_TEST NAME) - if(BUILD_WITH_OPENMP_SUPPORT) - add_pinocchio_unit_test(${ARGV} PARALLEL) - endif() -endmacro() - -# Find Boost.UnitTestFramework -find_package(Boost COMPONENTS unit_test_framework) - -# Header only -add_pinocchio_unit_test(alloca HEADER_ONLY) -add_pinocchio_unit_test(double-entry-container HEADER_ONLY) -add_pinocchio_unit_test(macros HEADER_ONLY) -add_pinocchio_unit_test(reference HEADER_ONLY) -add_pinocchio_unit_test(eigen-storage HEADER_ONLY) -add_pinocchio_unit_test(matrix-stack HEADER_ONLY) -add_pinocchio_unit_test(size-in-bytes HEADER_ONLY) - -# Math components -add_pinocchio_unit_test(eigen-basic-op HEADER_ONLY) -add_pinocchio_unit_test(matrix HEADER_ONLY) -add_pinocchio_unit_test(block-diagonal-matrix HEADER_ONLY) -add_pinocchio_unit_test(matrix-block-element HEADER_ONLY) -add_pinocchio_unit_test(eigen-tensor HEADER_ONLY) -add_pinocchio_unit_test(sincos HEADER_ONLY) -add_pinocchio_unit_test(quaternion HEADER_ONLY) -add_pinocchio_unit_test(rpy HEADER_ONLY) -add_pinocchio_unit_test(rotation HEADER_ONLY) -add_pinocchio_unit_test(vector HEADER_ONLY) -add_pinocchio_unit_test(matrix-inverse HEADER_ONLY) -add_pinocchio_unit_test(matrix-product HEADER_ONLY) -add_pinocchio_unit_test(eigenvalues HEADER_ONLY) -add_pinocchio_unit_test(tridiagonal-matrix HEADER_ONLY) -add_pinocchio_unit_test(lanczos-decomposition HEADER_ONLY) -add_pinocchio_unit_test(gram-schmidt-orthonormalisation HEADER_ONLY) -add_pinocchio_unit_test(promote-static-eval HEADER_ONLY) - -# Derivatives algo -add_pinocchio_unit_test(kinematics-derivatives) -add_pinocchio_unit_test(frames-derivatives) -add_pinocchio_unit_test(rnea-derivatives) -add_pinocchio_unit_test(aba-derivatives) -add_pinocchio_unit_test(centroidal-derivatives) -add_pinocchio_unit_test(center-of-mass-derivatives) -add_pinocchio_unit_test(constrained-dynamics-derivatives) - -# if(BUILD_WITH_SDF_SUPPORT) -# add_pinocchio_unit_test(contact-dynamics-derivatives PARSERS) -# else() -add_pinocchio_unit_test(contact-dynamics-derivatives) -# endif() -add_pinocchio_unit_test(impulse-dynamics-derivatives) -add_pinocchio_unit_test(rnea-second-order-derivatives) - -# # Pinocchio features -add_pinocchio_unit_test(spatial) -add_pinocchio_unit_test(symmetric) -add_pinocchio_unit_test(aba) -add_pinocchio_parallel_unit_test(parallel-aba) -add_pinocchio_unit_test(rnea) -add_pinocchio_parallel_unit_test(parallel-rnea) -add_pinocchio_unit_test(crba) -add_pinocchio_unit_test(centroidal) -add_pinocchio_unit_test(com) -add_pinocchio_unit_test(joint-jacobian) -add_pinocchio_unit_test(cholesky) -add_pinocchio_unit_test(constrained-dynamics) -add_pinocchio_unit_test(constraint-variants) -add_pinocchio_unit_test(contact-models) -add_pinocchio_unit_test(point-anchor-constraint) -add_pinocchio_unit_test(point-contact-constraint) -add_pinocchio_unit_test(frame-anchor-constraint) -add_pinocchio_unit_test(rigid-constraint-conversion) -add_pinocchio_unit_test(joint-friction-constraint) -add_pinocchio_unit_test(joint-limit-constraint) -add_pinocchio_unit_test(constraint-jacobian) -add_pinocchio_unit_test(contact-dynamics) -add_pinocchio_unit_test(contact-inverse-dynamics) -add_pinocchio_unit_test(closed-loop-dynamics) -add_pinocchio_unit_test(loop-constrained-aba) -add_pinocchio_unit_test(impulse-dynamics) -add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) -add_pinocchio_unit_test(kinematics) -add_pinocchio_unit_test(delassus) -add_pinocchio_unit_test(delassus-operations) -add_pinocchio_unit_test(delassus-operator-dense) -# delassus-operator-preconditioned is broken and unused -#add_pinocchio_unit_test(delassus-operator-preconditioned) -add_pinocchio_unit_test(delassus-operator-rigid-body) -add_pinocchio_unit_test(preconditioner) -add_pinocchio_unit_test(pv-solver) -add_pinocchio_parallel_unit_test(openmp-exception) - -add_pinocchio_unit_test( - mjcf - PARSERS - COLLISION_OPTIONAL -) - -if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_unit_test( - urdf - PARSERS - COLLISION_OPTIONAL - ) - - add_pinocchio_unit_test(value PARSERS) - if(BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_unit_test(geometry-object COLLISION) - add_pinocchio_unit_test( - geometry-model - PARSERS - COLLISION - ) - add_pinocchio_unit_test( - geometry-algorithms - PARSERS - COLLISION - ) - add_pinocchio_unit_test( - broadphase - PARSERS - COLLISION - ) - add_pinocchio_unit_test( - tree-broadphase - PARSERS - COLLISION - ) - add_pinocchio_parallel_unit_test(parallel-geometry PARSERS COLLISION) - add_pinocchio_unit_test( - srdf - PARSERS - COLLISION - ) - endif() -endif() - -if(BUILD_WITH_SDF_SUPPORT) - add_pinocchio_unit_test(sdf PARSERS) -endif() - -if(BUILD_WITH_EXTRA_SUPPORT) - add_pinocchio_unit_test( - reachable-workspace - PARSERS - EXTRA - COLLISION_OPTIONAL - ) -endif() - -if(PINOCCHIO_BUILD_VISUALIZERS) - add_pinocchio_unit_test(visualizer VISUALIZERS) -endif() +function(pinocchio_add_cpp_test name) + set(test_name "pinocchio-test-cpp-${name}") + pinocchio_add_cpp_test_or_example(${test_name} ${name}) + add_dependencies(pinocchio-tests ${test_name}) +endfunction() -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - add_pinocchio_unit_test(python_parser PYTHON_PARSER) -endif() +# CPP tests +add_subdirectory(cpp) +# Python tests if(BUILD_PYTHON_INTERFACE) add_subdirectory(python) endif() - -# Test over the joints -add_pinocchio_unit_test(all-joints) -add_pinocchio_unit_test(joint-revolute) -add_pinocchio_unit_test(joint-prismatic) -add_pinocchio_unit_test(joint-planar) -add_pinocchio_unit_test(joint-free-flyer) -add_pinocchio_unit_test(joint-spherical) -add_pinocchio_unit_test(joint-ellipsoid) -add_pinocchio_unit_test(joint-translation) -add_pinocchio_unit_test(joint-generic) -add_pinocchio_unit_test(joint-composite) -add_pinocchio_unit_test(joint-mimic) -add_pinocchio_unit_test(joint-helical) -add_pinocchio_unit_test(joint-universal) -add_pinocchio_unit_test(joint-visitors) - -# Main corpus -add_pinocchio_unit_test(model COLLISION_OPTIONAL) -add_pinocchio_unit_test(data) -add_pinocchio_unit_test(joint-motion-subspace) -add_pinocchio_unit_test(compute-all-terms) -add_pinocchio_unit_test(energy) -add_pinocchio_unit_test(frames) -if(NOT MSVC AND NOT MSVC_VERSION) - add_pinocchio_unit_test(joint-configurations) -endif() -add_pinocchio_unit_test(explog) -add_pinocchio_unit_test(finite-differences) -add_pinocchio_unit_test(visitor) -add_pinocchio_unit_test(algo-check) -add_pinocchio_unit_test(model-graph PARSERS) -add_pinocchio_unit_test(model-configuration-converter PARSERS) - -# Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally -cxx_flags_by_compiler_frontend( - GNU -Wno-maybe-uninitialized -Wuse-after-free=0 - OUTPUT LIEGROUPS_OPTIONS - FILTER -) -add_pinocchio_unit_test(liegroups) -add_test_cflags(liegroups ${LIEGROUPS_OPTIONS}) - -add_pinocchio_unit_test(cartesian-product-liegroups) -add_pinocchio_unit_test(regressor) -add_pinocchio_unit_test(version) -add_pinocchio_unit_test(copy) -add_pinocchio_unit_test(constraint-cholesky) -add_pinocchio_unit_test(classic-acceleration) -add_pinocchio_unit_test(box-set) -add_pinocchio_unit_test(full-space-cone) -add_pinocchio_unit_test(zero-cone) -add_pinocchio_unit_test(orthant-cone) -add_pinocchio_unit_test(coulomb-friction-cone) - -# Solvers -add_pinocchio_unit_test(pgs-solver) -add_pinocchio_unit_test(admm-solver) - -# Symmetric cones jordan operations -add_pinocchio_unit_test(second-order-cone-jordan-operation) -add_pinocchio_unit_test(orthant-cone-jordan-operation) - -# Serialization -make_directory("${CMAKE_CURRENT_BINARY_DIR}/serialization-data") -add_pinocchio_unit_test(serialization) -add_test_cflags( - serialization - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-math) -add_test_cflags( - serialization-math - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-multibody COLLISION_OPTIONAL) -add_test_cflags( - serialization-multibody - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-multibody-joint) -add_test_cflags( - serialization-multibody-joint - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-algorithm) -add_test_cflags( - serialization-algorithm - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-constraints) -add_test_cflags( - serialization-constraints - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) - -add_pinocchio_unit_test(csv) -add_test_cflags( - csv "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) - -add_subdirectory(algorithm) - -# Multiprecision arithmetic -if(BUILD_ADVANCED_TESTING) - add_pinocchio_unit_test(multiprecision) - if(PINOCCHIO_BUILD_MPFR_TESTING) - add_pinocchio_unit_test(multiprecision-mpfr PACKAGES mpfr gmp) - endif() -endif() - -if(BUILD_WITH_AUTODIFF_SUPPORT) - add_subdirectory(cppad) -endif() - -if(BUILD_WITH_CODEGEN_SUPPORT) - add_subdirectory(cppadcg) -endif() - -if(BUILD_WITH_CASADI_SUPPORT) - add_subdirectory(casadi) -endif() - -if(BUILD_WITH_RTSAN) - add_pinocchio_unit_test(dynamic-allocations) - get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) - target_compile_options(${test_name} PRIVATE -fsanitize=realtime) - target_link_options(${test_name} PRIVATE -fsanitize=realtime) - # On osx-arm64 mutex are called to initialize some static variables. - # We use a suppression file to make this test pass. - if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") - set_tests_properties( - ${test_name} - PROPERTIES - ENVIRONMENT_MODIFICATION - "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" - ) - endif() -endif() diff --git a/unittest/algorithm/CMakeLists.txt b/unittest/algorithm/CMakeLists.txt deleted file mode 100644 index 512d2b1553..0000000000 --- a/unittest/algorithm/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(utils) diff --git a/unittest/algorithm/utils/CMakeLists.txt b/unittest/algorithm/utils/CMakeLists.txt deleted file mode 100644 index 220bc47f37..0000000000 --- a/unittest/algorithm/utils/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_pinocchio_unit_test(motion) -add_pinocchio_unit_test(force) diff --git a/unittest/casadi/CMakeLists.txt b/unittest/casadi/CMakeLists.txt deleted file mode 100644 index af768cb502..0000000000 --- a/unittest/casadi/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021 INRIA -# - -macro(ADD_CASADI_UNIT_TEST name) - add_pinocchio_unit_test(${name} PACKAGES casadi::casadi) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 3000) - add_dependencies(${PROJECT_NAME}-test-casadi ${TEST_NAME}) -endmacro() - -if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-test-casadi) - set_target_properties( - ${PROJECT_NAME}-test-casadi - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_casadi_unit_test(basic) - add_casadi_unit_test(spatial) - add_casadi_unit_test(explog) - add_casadi_unit_test(joints) - add_casadi_unit_test(algorithms) - if(BUILD_ADVANCED_TESTING) - add_casadi_unit_test(aba) - add_casadi_unit_test(constraint-dynamics-derivatives) - add_casadi_unit_test(constraint-dynamics) - add_casadi_unit_test(aba-derivatives) - endif() - add_casadi_unit_test(integrate-derivatives) - add_casadi_unit_test(rnea-derivatives) -endif() diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt new file mode 100644 index 0000000000..5c341cf960 --- /dev/null +++ b/unittest/cpp/CMakeLists.txt @@ -0,0 +1,341 @@ +# CPP tests +# Header only +pinocchio_add_cpp_test(alloca) +pinocchio_add_cpp_test(double-entry-container) +pinocchio_add_cpp_test(macros) +pinocchio_add_cpp_test(reference) +pinocchio_add_cpp_test(eigen-storage) +pinocchio_add_cpp_test(matrix-stack) +pinocchio_add_cpp_test(size-in-bytes) + +# Math components +pinocchio_add_cpp_test(eigen-basic-op) +pinocchio_add_cpp_test(matrix) +pinocchio_add_cpp_test(block-diagonal-matrix) +pinocchio_add_cpp_test(matrix-block-element) +pinocchio_add_cpp_test(eigen-tensor) +pinocchio_add_cpp_test(sincos) +pinocchio_add_cpp_test(quaternion) +pinocchio_add_cpp_test(rpy) +pinocchio_add_cpp_test(rotation) +pinocchio_add_cpp_test(vector) +pinocchio_add_cpp_test(matrix-inverse) +pinocchio_add_cpp_test(matrix-product) +pinocchio_add_cpp_test(eigenvalues) +pinocchio_add_cpp_test(tridiagonal-matrix) +pinocchio_add_cpp_test(lanczos-decomposition) +pinocchio_add_cpp_test(gram-schmidt-orthonormalisation) +pinocchio_add_cpp_test(promote-static-eval) + +# Derivatives algo +pinocchio_add_cpp_test(kinematics-derivatives) +pinocchio_add_cpp_test(frames-derivatives) +pinocchio_add_cpp_test(rnea-derivatives) +pinocchio_add_cpp_test(aba-derivatives) +pinocchio_add_cpp_test(centroidal-derivatives) +pinocchio_add_cpp_test(center-of-mass-derivatives) +pinocchio_add_cpp_test(constrained-dynamics-derivatives) +pinocchio_add_cpp_test(contact-dynamics-derivatives) +pinocchio_add_cpp_test(impulse-dynamics-derivatives) +pinocchio_add_cpp_test(rnea-second-order-derivatives) + +# # Pinocchio features +pinocchio_add_cpp_test(spatial) +pinocchio_add_cpp_test(symmetric) +pinocchio_add_cpp_test(aba) +pinocchio_add_cpp_test(rnea) +pinocchio_add_cpp_test(crba) +pinocchio_add_cpp_test(centroidal) +pinocchio_add_cpp_test(com) +pinocchio_add_cpp_test(joint-jacobian) +pinocchio_add_cpp_test(cholesky) +pinocchio_add_cpp_test(constrained-dynamics) +pinocchio_add_cpp_test(constraint-variants) +pinocchio_add_cpp_test(contact-models) +pinocchio_add_cpp_test(point-anchor-constraint) +pinocchio_add_cpp_test(point-contact-constraint) +pinocchio_add_cpp_test(frame-anchor-constraint) +pinocchio_add_cpp_test(rigid-constraint-conversion) +pinocchio_add_cpp_test(joint-friction-constraint) +pinocchio_add_cpp_test(joint-limit-constraint) +pinocchio_add_cpp_test(constraint-jacobian) +pinocchio_add_cpp_test(contact-dynamics) +pinocchio_add_cpp_test(contact-inverse-dynamics) +pinocchio_add_cpp_test(closed-loop-dynamics) +pinocchio_add_cpp_test(loop-constrained-aba) +pinocchio_add_cpp_test(impulse-dynamics) +pinocchio_add_cpp_test(sample-models) +pinocchio_add_cpp_test(kinematics) +pinocchio_add_cpp_test(delassus) +pinocchio_add_cpp_test(delassus-operations) +pinocchio_add_cpp_test(delassus-operator-dense) +# delassus-operator-preconditioned is broken and unused +#pinocchio_add_cpp_test(delassus-operator-preconditioned) +pinocchio_add_cpp_test(delassus-operator-rigid-body) +pinocchio_add_cpp_test(preconditioner) +pinocchio_add_cpp_test(pv-solver) + +# parsers +if(BUILD_WITH_URDF_SUPPORT) + pinocchio_add_cpp_test(urdf) + pinocchio_add_cpp_test(value) + if(BUILD_WITH_COLLISION_SUPPORT) + pinocchio_add_cpp_test(geometry-object) + pinocchio_add_cpp_test( + geometry-model + ) + pinocchio_add_cpp_test( + geometry-algorithms + ) + pinocchio_add_cpp_test( + broadphase + ) + pinocchio_add_cpp_test( + tree-broadphase + ) + pinocchio_add_cpp_test( + srdf + ) + endif() +endif() + +if(BUILD_WITH_SDF_SUPPORT) + pinocchio_add_cpp_test(sdf) +endif() + +if(BUILD_WITH_PARSERS_SUPPORT) + pinocchio_add_cpp_test(mjcf) + pinocchio_add_cpp_test(model-graph) + pinocchio_add_cpp_test(model-configuration-converter) +endif() + +if(BUILD_WITH_EXTRA_SUPPORT) + pinocchio_add_cpp_test( + reachable-workspace + ) +endif() + +if(PINOCCHIO_BUILD_VISUALIZERS) + pinocchio_add_cpp_test(visualizer) +endif() + +if(BUILD_WITH_PYTHON_PARSER_SUPPORT) + pinocchio_add_cpp_test(python_parser PYTHON_PARSER) +endif() + +# Test over the joints +pinocchio_add_cpp_test(all-joints) +pinocchio_add_cpp_test(joint-revolute) +pinocchio_add_cpp_test(joint-prismatic) +pinocchio_add_cpp_test(joint-planar) +pinocchio_add_cpp_test(joint-free-flyer) +pinocchio_add_cpp_test(joint-spherical) +pinocchio_add_cpp_test(joint-ellipsoid) +pinocchio_add_cpp_test(joint-translation) +pinocchio_add_cpp_test(joint-generic) +pinocchio_add_cpp_test(joint-composite) +pinocchio_add_cpp_test(joint-mimic) +pinocchio_add_cpp_test(joint-helical) +pinocchio_add_cpp_test(joint-universal) +pinocchio_add_cpp_test(joint-visitors) + +# Main corpus +pinocchio_add_cpp_test(model) +pinocchio_add_cpp_test(data) +pinocchio_add_cpp_test(joint-motion-subspace) +pinocchio_add_cpp_test(compute-all-terms) +pinocchio_add_cpp_test(energy) +pinocchio_add_cpp_test(frames) +if(NOT MSVC AND NOT MSVC_VERSION) + pinocchio_add_cpp_test(joint-configurations) +endif() +pinocchio_add_cpp_test(explog) +pinocchio_add_cpp_test(finite-differences) +pinocchio_add_cpp_test(visitor) +pinocchio_add_cpp_test(algo-check) + +# Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally +pinocchio_add_cpp_test(liegroups) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options( + pinocchio-test-cpp-liegroups + PRIVATE -Wno-maybe-uninitialized -Wuse-after-free=0 + ) +endif() + +pinocchio_add_cpp_test(cartesian-product-liegroups) +pinocchio_add_cpp_test(regressor) +pinocchio_add_cpp_test(version) +pinocchio_add_cpp_test(copy) +pinocchio_add_cpp_test(constraint-cholesky) +pinocchio_add_cpp_test(classic-acceleration) +pinocchio_add_cpp_test(box-set) +pinocchio_add_cpp_test(full-space-cone) +pinocchio_add_cpp_test(zero-cone) +pinocchio_add_cpp_test(orthant-cone) +pinocchio_add_cpp_test(coulomb-friction-cone) + +# Solvers +pinocchio_add_cpp_test(pgs-solver) +pinocchio_add_cpp_test(admm-solver) + +# Symmetric cones jordan operations +pinocchio_add_cpp_test(second-order-cone-jordan-operation) +pinocchio_add_cpp_test(orthant-cone-jordan-operation) + +# Serialization +pinocchio_add_cpp_test(serialization) +pinocchio_add_cpp_test(serialization-math) +pinocchio_add_cpp_test(serialization-multibody) +pinocchio_add_cpp_test(serialization-multibody-joint) +pinocchio_add_cpp_test(serialization-algorithm) +pinocchio_add_cpp_test(serialization-constraints) +pinocchio_add_cpp_test(csv) + +# algorithm +pinocchio_add_cpp_test(algorithm-utils-motion) +pinocchio_add_cpp_test(algorithm-utils-force) + +# Multiprecision arithmetic +if(BUILD_ADVANCED_TESTING) + pinocchio_add_cpp_test(multiprecision) + if(PINOCCHIO_BUILD_MPFR_TESTING) + pinocchio_add_cpp_test(multiprecision-mpfr) + target_link_libraries( + pinocchio-test-cpp-multiprecision-mpfr + PRIVATE MPFR::MPFR + ) + endif() +endif() + +# special scalars +if(BUILD_WITH_AUTODIFF_SUPPORT) + macro(ADD_CPPAD_UNIT_TEST name) + pinocchio_add_cpp_test(${name}) + add_dependencies(pinocchio-test-cpp-cppad pinocchio-test-cpp-${name}) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_cppad_headers + ) + endmacro() + + if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-cpp-cppad) + set_target_properties( + pinocchio-test-cpp-cppad + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + add_cppad_unit_test(cppad-basic) + add_cppad_unit_test(cppad-spatial) + add_cppad_unit_test(cppad-joints) + add_cppad_unit_test(cppad-algorithms) + add_cppad_unit_test(cppad-derivatives) + add_cppad_unit_test(cppad-joint-configurations) + endif() +endif() + +if(BUILD_WITH_CODEGEN_SUPPORT) + macro(ADD_CPPADCG_UNIT_TEST name) + pinocchio_add_cpp_test(${name}) + add_dependencies(pinocchio-test-cpp-cppadcg pinocchio-test-cpp-${name}) + target_compile_definitions( + pinocchio-test-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_cppadcg_headers + ) + endmacro() + if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-cpp-cppadcg) + set_target_properties( + pinocchio-test-cpp-cppadcg + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + add_cppadcg_unit_test(cppadcg-basic) + if(BUILD_ADVANCED_TESTING) + add_cppadcg_unit_test(cppadcg-algorithms) + add_cppadcg_unit_test(cppadcg-joint-configurations) + add_cppadcg_unit_test(cppadcg-contact-dynamics) + endif() + endif() +endif() + +if(BUILD_WITH_CASADI_SUPPORT) + macro(ADD_CASADI_UNIT_TEST name) + pinocchio_add_cpp_test(${name}) + add_dependencies(pinocchio-test-cpp-casadi pinocchio-test-cpp-${name}) + target_compile_definitions( + pinocchio-test-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_casadi_headers + ) + endmacro() + + if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-cpp-casadi) + set_target_properties( + pinocchio-test-cpp-casadi + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + + add_casadi_unit_test(casadi-basic) + add_casadi_unit_test(casadi-spatial) + add_casadi_unit_test(casadi-explog) + add_casadi_unit_test(casadi-joints) + add_casadi_unit_test(casadi-algorithms) + if(BUILD_ADVANCED_TESTING) + add_casadi_unit_test(casadi-aba) + add_casadi_unit_test(casadi-constraint-dynamics-derivatives) + add_casadi_unit_test(casadi-constraint-dynamics) + add_casadi_unit_test(casadi-aba-derivatives) + endif() + add_casadi_unit_test(casadi-integrate-derivatives) + add_casadi_unit_test(casadi-rnea-derivatives) + endif() +endif() + +# rtsan +if(BUILD_WITH_RTSAN) + pinocchio_add_cpp_test(dynamic-allocations) + target_compile_options( + pinocchio-test-cpp-dynamic-allocations + PRIVATE -fsanitize=realtime + ) + target_link_options( + pinocchio-test-cpp-dynamic-allocations + PRIVATE -fsanitize=realtime + ) + # On osx-arm64 mutex are called to initialize some static variables. + # We use a suppression file to make this test pass. + if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + set_tests_properties( + pinocchio-test-cpp-dynamic-allocations + PROPERTIES + ENVIRONMENT_MODIFICATION + "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" + ) + endif() +endif() + +if(BUILD_WITH_OPENMP_SUPPORT) + macro(add_pinocchio_parallel_unit_test name) + pinocchio_add_cpp_test(${name}) + target_link_libraries( + pinocchio-test-cpp-${name} + PUBLIC pinocchio_parallel + ) + endmacro() + + add_pinocchio_parallel_unit_test(parallel-aba) + add_pinocchio_parallel_unit_test(openmp-exception) + add_pinocchio_parallel_unit_test(parallel-rnea) + + if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) + add_pinocchio_parallel_unit_test(parallel-geometry) + endif() +endif() diff --git a/unittest/aba-derivatives.cpp b/unittest/cpp/aba-derivatives.cpp similarity index 99% rename from unittest/aba-derivatives.cpp rename to unittest/cpp/aba-derivatives.cpp index b73a9ce9c8..706b23f0f7 100644 --- a/unittest/aba-derivatives.cpp +++ b/unittest/cpp/aba-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2020 CNRS INRIA // +#define BOOST_TEST_MODULE aba_derivatives + #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/kinematics-derivatives.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/aba-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba_derivatives) { @@ -535,5 +536,3 @@ BOOST_AUTO_TEST_CASE(test_optimized_aba_derivatives_fext) BOOST_CHECK(aba_partial_dtau.isApprox(aba_partial_dtau_ref)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/aba.cpp b/unittest/cpp/aba.cpp similarity index 99% rename from unittest/aba.cpp rename to unittest/cpp/aba.cpp index b021cc57f0..4ece96de91 100644 --- a/unittest/aba.cpp +++ b/unittest/cpp/aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2021 CNRS INRIA // +#define BOOST_TEST_MODULE aba + #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template void test_joint_methods(const pinocchio::JointModelBase & jmodel) @@ -381,5 +382,3 @@ BOOST_AUTO_TEST_CASE(test_roto_inertia_effects) BOOST_CHECK((data.Minv * data_ref.M).isIdentity()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/admm-solver.cpp b/unittest/cpp/admm-solver.cpp similarity index 99% rename from unittest/admm-solver.cpp rename to unittest/cpp/admm-solver.cpp index 38d90e4c3f..19d8d97121 100644 --- a/unittest/admm-solver.cpp +++ b/unittest/cpp/admm-solver.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE admm_solver + #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/constraints.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include +#include + using namespace pinocchio; template @@ -133,8 +136,6 @@ struct TestBoxTpl std::size_t n_iter; }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(ball) { Model model; @@ -1459,5 +1460,3 @@ BOOST_AUTO_TEST_CASE(test_copy_result) result_copy.x.setZero(); BOOST_CHECK(result_assigned.x.isApprox(expected_x)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algo-check.cpp b/unittest/cpp/algo-check.cpp similarity index 95% rename from unittest/algo-check.cpp rename to unittest/cpp/algo-check.cpp index 1f8a54428e..a4fbcd5d56 100644 --- a/unittest/algo-check.cpp +++ b/unittest/cpp/algo-check.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2022 CNRS INRIA // +#define BOOST_TEST_MODULE algo_check + #include #include #include "pinocchio/multibody/sample-models.hpp" @@ -12,9 +14,10 @@ using namespace pinocchio; -#include #include +#include + // Dummy checker. struct Check1 : public AlgorithmCheckerBase { @@ -24,8 +27,6 @@ struct Check1 : public AlgorithmCheckerBase } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_check) { using namespace boost::fusion; @@ -56,5 +57,3 @@ BOOST_AUTO_TEST_CASE(test_check) BOOST_CHECK(!model_mimic.check(MimicChecker())); BOOST_CHECK(model_mimic.check(data_mimic)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algorithm/utils/force.cpp b/unittest/cpp/algorithm-utils-force.cpp similarity index 96% rename from unittest/algorithm/utils/force.cpp rename to unittest/cpp/algorithm-utils-force.cpp index eb767682f9..348f6f8042 100644 --- a/unittest/algorithm/utils/force.cpp +++ b/unittest/cpp/algorithm-utils-force.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE algorithm_utils_force + #include #include @@ -9,8 +11,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_force) { using namespace pinocchio; @@ -58,5 +58,3 @@ BOOST_AUTO_TEST_CASE(test_force) changeReferenceFrame(placement, f_sol_w, WORLD, LOCAL_WORLD_ALIGNED).isApprox(f_in)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algorithm/utils/motion.cpp b/unittest/cpp/algorithm-utils-motion.cpp similarity index 96% rename from unittest/algorithm/utils/motion.cpp rename to unittest/cpp/algorithm-utils-motion.cpp index fe3d8c2255..e986df8ccf 100644 --- a/unittest/algorithm/utils/motion.cpp +++ b/unittest/cpp/algorithm-utils-motion.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE algorithm_utils_motion + #include #include @@ -11,8 +13,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_motion) { using namespace pinocchio; @@ -60,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_motion) changeReferenceFrame(placement, m_sol_w, WORLD, LOCAL_WORLD_ALIGNED).isApprox(m_in)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/all-joints.cpp b/unittest/cpp/all-joints.cpp similarity index 98% rename from unittest/all-joints.cpp rename to unittest/cpp/all-joints.cpp index bcd9e4386d..69326baa7d 100644 --- a/unittest/all-joints.cpp +++ b/unittest/cpp/all-joints.cpp @@ -3,12 +3,15 @@ // Copyright(c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE all_joints + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include +#include + using namespace pinocchio; template @@ -177,8 +180,6 @@ struct init> } }; -BOOST_AUTO_TEST_SUITE(joint_model_base_test) - template struct TestJointModel { @@ -218,7 +219,7 @@ struct TestJointModelTransform : TestJointModel } }; -BOOST_AUTO_TEST_CASE(isEqual) +BOOST_AUTO_TEST_CASE(all_joints_isEqual) { typedef JointCollectionDefault::JointModelVariant JointModelVariant; boost::mpl::for_each(TestJointModelIsEqual()); @@ -276,7 +277,7 @@ struct TestJointModelCast : TestJointModel } }; -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(all_joints_cast) { typedef JointCollectionDefault::JointModelVariant JointModelVariant; boost::mpl::for_each(TestJointModelCast()); @@ -310,5 +311,3 @@ BOOST_AUTO_TEST_CASE(test_disp) TestJointModelDisp()(JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/alloca.cpp b/unittest/cpp/alloca.cpp similarity index 95% rename from unittest/alloca.cpp rename to unittest/cpp/alloca.cpp index 070b3d8682..402424c2ae 100644 --- a/unittest/alloca.cpp +++ b/unittest/cpp/alloca.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE alloca + #include #include "pinocchio/eigen-common.hpp" #include "pinocchio/utils/alloca.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template typename PINOCCHIO_EIGEN_PLAIN_TYPE(MatrixLikeInput) @@ -51,5 +52,3 @@ BOOST_AUTO_TEST_CASE(macro) BOOST_CHECK(map.cols() == cols); BOOST_CHECK(map.isZero(0.)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/block-diagonal-matrix.cpp b/unittest/cpp/block-diagonal-matrix.cpp similarity index 99% rename from unittest/block-diagonal-matrix.cpp rename to unittest/cpp/block-diagonal-matrix.cpp index 5b7a0462c4..454da3b31d 100644 --- a/unittest/block-diagonal-matrix.cpp +++ b/unittest/cpp/block-diagonal-matrix.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE block_diagonal_matrix + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; typedef Eigen::Matrix M11; @@ -703,5 +704,3 @@ BOOST_AUTO_TEST_CASE(test_nested_block_diagonal_copy) bdm_copy.blocks()[1].nested_blocks()[0].map.data() != bdm.blocks()[1].nested_blocks()[0].map.data()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/box-set.cpp b/unittest/cpp/box-set.cpp similarity index 97% rename from unittest/box-set.cpp rename to unittest/cpp/box-set.cpp index c874872765..8c94e58a10 100644 --- a/unittest/box-set.cpp +++ b/unittest/cpp/box-set.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE box_set + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -82,5 +83,3 @@ BOOST_AUTO_TEST_CASE(test_scaled_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/broadphase.cpp b/unittest/cpp/broadphase.cpp similarity index 98% rename from unittest/broadphase.cpp rename to unittest/cpp/broadphase.cpp index add50e9b72..58065b9146 100644 --- a/unittest/broadphase.cpp +++ b/unittest/cpp/broadphase.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE broadphase + #include #include "pinocchio/algorithm/geometry.hpp" @@ -16,12 +18,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_broadphase_with_empty_models) { Model model; @@ -170,5 +171,3 @@ BOOST_AUTO_TEST_CASE(test_collisions) == computeCollisions(model, data, geom_model, geom_data, q_rand)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cartesian-product-liegroups.cpp b/unittest/cpp/cartesian-product-liegroups.cpp similarity index 98% rename from unittest/cartesian-product-liegroups.cpp rename to unittest/cpp/cartesian-product-liegroups.cpp index 14f65b0471..d3193da6ca 100644 --- a/unittest/cartesian-product-liegroups.cpp +++ b/unittest/cpp/cartesian-product-liegroups.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE cartesian_product_liegroups + #include "pinocchio/multibody/liegroup.hpp" #include -#include #include #include +#include + using namespace pinocchio; namespace pinocchio @@ -129,8 +132,6 @@ struct TestCartesianProduct } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_cartesian_product_with_liegroup_variant) { boost::mpl::for_each( @@ -162,5 +163,3 @@ BOOST_AUTO_TEST_CASE(test_cartesian_product_vs_cartesian_product_variant) TestCartesianProduct::test( cartesian_product_ref, cartesian_product); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/aba-derivatives.cpp b/unittest/cpp/casadi-aba-derivatives.cpp similarity index 94% rename from unittest/casadi/aba-derivatives.cpp rename to unittest/cpp/casadi-aba-derivatives.cpp index 8875e42770..8231756bc8 100644 --- a/unittest/casadi/aba-derivatives.cpp +++ b/unittest/cpp/casadi-aba-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_aba_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -13,10 +15,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) { @@ -43,7 +44,7 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) pinocchio::casadi::AutoDiffABADerivatives ad_casadi(model); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); @@ -52,5 +53,3 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) BOOST_CHECK(ad_casadi.ddq_dv.isApprox(data.ddq_dv)); BOOST_CHECK(ad_casadi.ddq_dtau.isApprox(data.Minv)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/aba.cpp b/unittest/cpp/casadi-aba.cpp similarity index 98% rename from unittest/casadi/aba.cpp rename to unittest/cpp/casadi-aba.cpp index d852348f69..1904943d58 100644 --- a/unittest/casadi/aba.cpp +++ b/unittest/cpp/casadi-aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_aba + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -14,10 +16,9 @@ #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba) { @@ -208,7 +209,7 @@ BOOST_AUTO_TEST_CASE(test_aba_casadi_algo) << "\n"; std::cout << "Number of operations in the ABA derivs function = " << ad_casadi.getFunDerivsOperationCount() << "\n"; - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); ad_casadi.evalJacobian(q, v, tau); @@ -217,5 +218,3 @@ BOOST_AUTO_TEST_CASE(test_aba_casadi_algo) BOOST_CHECK(ad_casadi.ddq_dv.isApprox(data.ddq_dv)); BOOST_CHECK(ad_casadi.ddq_dtau.isApprox(data.Minv)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/algorithms.cpp b/unittest/cpp/casadi-algorithms.cpp similarity index 99% rename from unittest/casadi/algorithms.cpp rename to unittest/cpp/casadi-algorithms.cpp index a2fc1b965c..4b71630ae7 100644 --- a/unittest/casadi/algorithms.cpp +++ b/unittest/cpp/casadi-algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2021 INRIA // +#define BOOST_TEST_MODULE casadi_algorithms + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/multibody.hpp" @@ -17,12 +19,11 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "casadi-utils.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jacobian) { @@ -683,5 +684,3 @@ BOOST_AUTO_TEST_CASE(test_kinetic_energy) jac_fd = fd_hess_ambda(q2, q2); std::cout << jac_fd << '\n'; } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/basic.cpp b/unittest/cpp/casadi-basic.cpp similarity index 98% rename from unittest/casadi/basic.cpp rename to unittest/cpp/casadi-basic.cpp index 9be872c2e3..880145505d 100644 --- a/unittest/casadi/basic.cpp +++ b/unittest/cpp/casadi-basic.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_basic + #include #include @@ -9,13 +11,11 @@ #include -#include - #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -158,5 +158,3 @@ BOOST_AUTO_TEST_CASE(test_max) casadi::SX max_x_0 = pinocchio::math::max(x, 0.); casadi::SX max_0_y = pinocchio::math::max(0., y); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/constraint-dynamics-derivatives.cpp b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp similarity index 96% rename from unittest/casadi/constraint-dynamics-derivatives.cpp rename to unittest/cpp/casadi-constraint-dynamics-derivatives.cpp index 8c1ae63d1f..d800da4cf9 100644 --- a/unittest/casadi/constraint-dynamics-derivatives.cpp +++ b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_constraint_dynamics_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) { @@ -62,7 +63,7 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) pinocchio::casadi::AutoDiffConstraintDynamicsDerivatives ad_casadi(model, contact_models); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); BOOST_CHECK(ad_casadi.ddq.isApprox(data.ddq, 1e1 * prec)); @@ -74,5 +75,3 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) BOOST_CHECK(ad_casadi.dlambda_dv.isApprox(data.dlambda_dv, 1e1 * prec)); BOOST_CHECK(ad_casadi.dlambda_dtau.isApprox(data.dlambda_dtau, 1e1 * prec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/constraint-dynamics.cpp b/unittest/cpp/casadi-constraint-dynamics.cpp similarity index 96% rename from unittest/casadi/constraint-dynamics.cpp rename to unittest/cpp/casadi-constraint-dynamics.cpp index 974541a892..d3df6c913f 100644 --- a/unittest/casadi/constraint-dynamics.cpp +++ b/unittest/cpp/casadi-constraint-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_constraint_dynamics + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) { @@ -62,7 +63,7 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) pinocchio::computeConstraintDynamicsDerivatives(model, data, contact_models, contact_data); pinocchio::casadi::AutoDiffConstraintDynamics ad_casadi(model, contact_models); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); BOOST_CHECK(ad_casadi.ddq.isApprox(data.ddq, 1e2 * prec)); @@ -76,5 +77,3 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) BOOST_CHECK(ad_casadi.dlambda_dv.isApprox(data.dlambda_dv, 1e2 * prec)); BOOST_CHECK(ad_casadi.dlambda_dtau.isApprox(data.dlambda_dtau, 1e2 * prec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/explog.cpp b/unittest/cpp/casadi-explog.cpp similarity index 98% rename from unittest/casadi/explog.cpp rename to unittest/cpp/casadi-explog.cpp index 11681e2b2e..50f6268a4e 100644 --- a/unittest/casadi/explog.cpp +++ b/unittest/cpp/casadi-explog.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021 INRIA // +#define BOOST_TEST_MODULE casadi_explog + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -11,10 +13,9 @@ #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_squaredDistance) { @@ -182,5 +183,3 @@ BOOST_AUTO_TEST_CASE(test_Jlog6) std::cout << hess_cdM_eval(DMVector{M0_dm, M1_dm})[0]; std::cout << hess_cdM_eval(DMVector{M2_dm, M2_dm})[0]; } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/integrate-derivatives.cpp b/unittest/cpp/casadi-integrate-derivatives.cpp similarity index 97% rename from unittest/casadi/integrate-derivatives.cpp rename to unittest/cpp/casadi-integrate-derivatives.cpp index 8172423a7d..2b3ed312b1 100644 --- a/unittest/casadi/integrate-derivatives.cpp +++ b/unittest/cpp/casadi-integrate-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_integrate_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_integrate) { @@ -75,5 +76,3 @@ BOOST_AUTO_TEST_CASE(test_integrate) BOOST_CHECK(q_plus.isApprox(q_int_vec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/joints.cpp b/unittest/cpp/casadi-joints.cpp similarity index 99% rename from unittest/casadi/joints.cpp rename to unittest/cpp/casadi-joints.cpp index 515d55f2e8..1ef18a4429 100644 --- a/unittest/casadi/joints.cpp +++ b/unittest/cpp/casadi-joints.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_joints + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jointRX_motion_space) { @@ -535,5 +536,3 @@ BOOST_AUTO_TEST_CASE(test_all_joints) TestADOnJoints()(pinocchio::JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/rnea-derivatives.cpp b/unittest/cpp/casadi-rnea-derivatives.cpp similarity index 99% rename from unittest/casadi/rnea-derivatives.cpp rename to unittest/cpp/casadi-rnea-derivatives.cpp index 042bc30c31..bd69349242 100644 --- a/unittest/casadi/rnea-derivatives.cpp +++ b/unittest/cpp/casadi-rnea-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE casadi_rnea_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives) { @@ -176,5 +177,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_derivatives) static_cast>(dtau_da_res_direct).data(), model.nv, model.nv); BOOST_CHECK(dtau_da_ref.isApprox(dtau_da_res_direct_map)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/spatial.cpp b/unittest/cpp/casadi-spatial.cpp similarity index 98% rename from unittest/casadi/spatial.cpp rename to unittest/cpp/casadi-spatial.cpp index 4c78cbbdbb..1f23514317 100644 --- a/unittest/casadi/spatial.cpp +++ b/unittest/cpp/casadi-spatial.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE casadi_spatial + #include #include @@ -11,12 +13,10 @@ #include -#include - #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_se3) { @@ -152,5 +152,3 @@ BOOST_AUTO_TEST_CASE(test_log3_firstorder_derivatives) BOOST_CHECK(grad0 == grad0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/casadi-utils.hpp b/unittest/cpp/casadi-utils.hpp similarity index 100% rename from unittest/casadi/casadi-utils.hpp rename to unittest/cpp/casadi-utils.hpp diff --git a/unittest/center-of-mass-derivatives.cpp b/unittest/cpp/center-of-mass-derivatives.cpp similarity index 96% rename from unittest/center-of-mass-derivatives.cpp rename to unittest/cpp/center-of-mass-derivatives.cpp index 3cbbe9b148..7cca014b85 100644 --- a/unittest/center-of-mass-derivatives.cpp +++ b/unittest/cpp/center-of-mass-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2021 CNRS INRIA // +#define BOOST_TEST_MODULE center_of_mass_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/center-of-mass.hpp" @@ -9,10 +11,9 @@ #include "pinocchio/algorithm/compute-all-terms.hpp" #include "pinocchio/algorithm/center-of-mass-derivatives.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_vcom) { @@ -67,5 +68,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_vcom) BOOST_CHECK(dvcom_dq.isApprox(dvcom_dqn, sqrt(alpha))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/centroidal-derivatives.cpp b/unittest/cpp/centroidal-derivatives.cpp similarity index 99% rename from unittest/centroidal-derivatives.cpp rename to unittest/cpp/centroidal-derivatives.cpp index b2a88aac5d..5118dd23e6 100644 --- a/unittest/centroidal-derivatives.cpp +++ b/unittest/cpp/centroidal-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2021 INRIA // +#define BOOST_TEST_MODULE centroidal_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,9 +13,10 @@ #include "pinocchio/algorithm/aba-derivatives.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -43,8 +46,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_centroidal_derivatives) { pinocchio::Model model; @@ -275,5 +276,3 @@ BOOST_AUTO_TEST_CASE(test_retrieve_centroidal_derivatives_fromABA) BOOST_CHECK(dhdot_dv.isApprox(dhdot_dv_ref)); BOOST_CHECK(dhdot_da.isApprox(dhdot_da_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/centroidal.cpp b/unittest/cpp/centroidal.cpp similarity index 99% rename from unittest/centroidal.cpp rename to unittest/cpp/centroidal.cpp index d4f445028c..889e60312e 100644 --- a/unittest/centroidal.cpp +++ b/unittest/cpp/centroidal.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE centroidal + #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/centroidal.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,11 +13,12 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -45,8 +48,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_ccrba) { pinocchio::Model model; @@ -436,5 +437,3 @@ BOOST_AUTO_TEST_CASE(test_computeCentroidalMomentum_computeCentroidalMomentumTim BOOST_CHECK(data.dhg.isApprox(dhg_ref, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cholesky.cpp b/unittest/cpp/cholesky.cpp similarity index 99% rename from unittest/cholesky.cpp rename to unittest/cpp/cholesky.cpp index 9d640c8549..badc5e5fd1 100644 --- a/unittest/cholesky.cpp +++ b/unittest/cpp/cholesky.cpp @@ -9,6 +9,8 @@ * */ +#define BOOST_TEST_MODULE cholesky + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" @@ -19,10 +21,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_cholesky) { @@ -278,5 +279,3 @@ BOOST_AUTO_TEST_CASE(test_Minv_from_cholesky) cholesky::computeMinv(model, data_bis); BOOST_CHECK(data_bis.Minv.isApprox(Minv_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/classic-acceleration.cpp b/unittest/cpp/classic-acceleration.cpp similarity index 98% rename from unittest/classic-acceleration.cpp rename to unittest/cpp/classic-acceleration.cpp index fb3bb5563d..2841f320a8 100644 --- a/unittest/classic-acceleration.cpp +++ b/unittest/cpp/classic-acceleration.cpp @@ -2,16 +2,17 @@ // Copyright(c) 2019 INRIA // +#define BOOST_TEST_MODULE classic_acceleration + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_classic_acceleration) { @@ -138,5 +139,3 @@ BOOST_AUTO_TEST_CASE(test_classic_acceleration_with_placement) BOOST_CHECK(classic_acc_B_other_signature.isApprox(classic_acc_B)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/closed-loop-dynamics.cpp b/unittest/cpp/closed-loop-dynamics.cpp similarity index 98% rename from unittest/closed-loop-dynamics.cpp rename to unittest/cpp/closed-loop-dynamics.cpp index e0f9f24cbe..037ee0917a 100644 --- a/unittest/closed-loop-dynamics.cpp +++ b/unittest/cpp/closed-loop-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2022 INRIA // +#define BOOST_TEST_MODULE closed_loop_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/contact-dynamics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace Eigen; @@ -141,5 +142,3 @@ BOOST_AUTO_TEST_CASE(closed_loop_constraint_6D_LOCAL) BOOST_CHECK( constraint_acceleration_error_ref.isApprox(constraint_acceleration_error_fd, math::sqrt(dt))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/com.cpp b/unittest/cpp/com.cpp similarity index 99% rename from unittest/com.cpp rename to unittest/cpp/com.cpp index 27450be783..174eaed54d 100644 --- a/unittest/com.cpp +++ b/unittest/cpp/com.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE com + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/center-of-mass.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_com) { @@ -283,5 +284,3 @@ BOOST_AUTO_TEST_CASE(test_subtree_com_jacobian) BOOST_CHECK(Jcom3.isApprox(Jcom1)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/compute-all-terms.cpp b/unittest/cpp/compute-all-terms.cpp similarity index 97% rename from unittest/compute-all-terms.cpp rename to unittest/cpp/compute-all-terms.cpp index 30472d0bf5..75d6fe044f 100644 --- a/unittest/compute-all-terms.cpp +++ b/unittest/cpp/compute-all-terms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2021 CNRS INRIA // +#define BOOST_TEST_MODULE compute_all_terms + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -16,8 +18,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - void run_test(const Model & model, const Eigen::VectorXd & q, const Eigen::VectorXd & v) { pinocchio::Data data(model); @@ -95,5 +95,3 @@ BOOST_AUTO_TEST_CASE(test_against_algo) run_test(model, q, v); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constrained-dynamics-derivatives.cpp b/unittest/cpp/constrained-dynamics-derivatives.cpp similarity index 99% rename from unittest/constrained-dynamics-derivatives.cpp rename to unittest/cpp/constrained-dynamics-derivatives.cpp index f222aa920b..5ce9a3cfae 100644 --- a/unittest/constrained-dynamics-derivatives.cpp +++ b/unittest/cpp/constrained-dynamics-derivatives.cpp @@ -1,7 +1,10 @@ // + // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE constrained_dynamics_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +14,9 @@ #include "pinocchio/algorithm/contact-dynamics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace Eigen; using namespace pinocchio; @@ -346,5 +348,3 @@ BOOST_AUTO_TEST_CASE(test_FD_with_contact_varying_gamma) BOOST_CHECK(dlambda_dq_anal.isApprox(dlambda_dq, std::sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constrained-dynamics.cpp b/unittest/cpp/constrained-dynamics.cpp similarity index 99% rename from unittest/constrained-dynamics.cpp rename to unittest/cpp/constrained-dynamics.cpp index 477c01bffb..0be8ed1e03 100644 --- a/unittest/constrained-dynamics.cpp +++ b/unittest/cpp/constrained-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2023 INRIA // +#define BOOST_TEST_MODULE constrained_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -20,9 +22,10 @@ #include -#include #include +#include + #define KP 0 #define KD 0 @@ -76,8 +79,6 @@ pinocchio::Motion computeAcceleration( return res; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - // BOOST_AUTO_TEST_CASE(contact_models) // { // using namespace pinocchio; @@ -1849,5 +1850,3 @@ BOOST_AUTO_TEST_CASE(test_contact_ABA_3D) BOOST_CHECK(prox_settings2.iter == 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-cholesky.cpp b/unittest/cpp/constraint-cholesky.cpp similarity index 99% rename from unittest/constraint-cholesky.cpp rename to unittest/cpp/constraint-cholesky.cpp index a212502ffb..d6bf94a1af 100644 --- a/unittest/constraint-cholesky.cpp +++ b/unittest/cpp/constraint-cholesky.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE constraint_cholesky + #include "pinocchio/math.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -13,9 +15,10 @@ #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + namespace pinocchio { @@ -107,8 +110,6 @@ namespace pinocchio } // namespace cholesky } // namespace pinocchio -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(UDUt_solver) { const Eigen::Index size = 100; @@ -2163,5 +2164,3 @@ BOOST_AUTO_TEST_CASE(constraint_cholesky_check_resize) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-jacobian.cpp b/unittest/cpp/constraint-jacobian.cpp similarity index 98% rename from unittest/constraint-jacobian.cpp rename to unittest/cpp/constraint-jacobian.cpp index 7a3e19bce0..bb9e2b216b 100644 --- a/unittest/constraint-jacobian.cpp +++ b/unittest/cpp/constraint-jacobian.cpp @@ -2,20 +2,21 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE constraint_jacobian + #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_jacobian_operations) { @@ -116,5 +117,3 @@ BOOST_AUTO_TEST_CASE(constraint_jacobian_operations) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-variants.cpp b/unittest/cpp/constraint-variants.cpp similarity index 98% rename from unittest/constraint-variants.cpp rename to unittest/cpp/constraint-variants.cpp index 38314d7280..e3d7dda061 100644 --- a/unittest/constraint-variants.cpp +++ b/unittest/cpp/constraint-variants.cpp @@ -2,20 +2,21 @@ // Copyright (c) 2023-2024 INRIA // +#define BOOST_TEST_MODULE constraint_variants + #include "pinocchio/multibody.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "constraints/init_constraints.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_variants) { Model model; @@ -145,5 +146,3 @@ BOOST_AUTO_TEST_CASE(constraint_visitors) BOOST_CHECK(output_matrix2 == output_matrix_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraints/init_constraints.hpp b/unittest/cpp/constraints/init_constraints.hpp similarity index 100% rename from unittest/constraints/init_constraints.hpp rename to unittest/cpp/constraints/init_constraints.hpp diff --git a/unittest/constraints/jacobians-checker.hpp b/unittest/cpp/constraints/jacobians-checker.hpp similarity index 100% rename from unittest/constraints/jacobians-checker.hpp rename to unittest/cpp/constraints/jacobians-checker.hpp diff --git a/unittest/contact-dynamics-derivatives.cpp b/unittest/cpp/contact-dynamics-derivatives.cpp similarity index 99% rename from unittest/contact-dynamics-derivatives.cpp rename to unittest/cpp/contact-dynamics-derivatives.cpp index 88ef0d944a..a78049caec 100644 --- a/unittest/contact-dynamics-derivatives.cpp +++ b/unittest/cpp/contact-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2025 INRIA // +#define BOOST_TEST_MODULE contact_dynamics_derivatives + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/frames.hpp" @@ -17,20 +19,20 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #ifdef PINOCCHIO_WITH_SDFORMAT #include "pinocchio/parsers/sdf.hpp" + #include "pinocchio/parsers/srdf.hpp" #endif // PINOCCHIO_WITH_SDFORMAT +#include + #define KP 10. #define KD 2 * math::sqrt(KP) -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - using namespace Eigen; using namespace pinocchio; @@ -2643,5 +2645,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_dynamics_derivatives_cassie_proximal) } #endif // PINOCCHIO_WITH_SDFORMAT - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-dynamics.cpp b/unittest/cpp/contact-dynamics.cpp similarity index 99% rename from unittest/contact-dynamics.cpp rename to unittest/cpp/contact-dynamics.cpp index 2379fa075c..8d92a672dd 100644 --- a/unittest/contact-dynamics.cpp +++ b/unittest/cpp/contact-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE contact_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_FD) { @@ -371,5 +372,3 @@ BOOST_AUTO_TEST_CASE(timings_fd_llt) } timer.toc(std::cout, NBT); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-inverse-dynamics.cpp b/unittest/cpp/contact-inverse-dynamics.cpp similarity index 98% rename from unittest/contact-inverse-dynamics.cpp rename to unittest/cpp/contact-inverse-dynamics.cpp index 481cefb680..b22dcdb690 100644 --- a/unittest/contact-inverse-dynamics.cpp +++ b/unittest/cpp/contact-inverse-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE contact_inverse_dynamics + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -71,8 +73,6 @@ void makeIsotropic( } } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_contact_inverse_dynamics_3D) { #ifdef NDEBUG @@ -178,5 +178,3 @@ BOOST_AUTO_TEST_CASE(test_contact_inverse_dynamics_3D) BOOST_CHECK(std::abs(constraint_velocity_projected.dot(x_sol)) <= 1e-10); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-models.cpp b/unittest/cpp/contact-models.cpp similarity index 99% rename from unittest/contact-models.cpp rename to unittest/cpp/contact-models.cpp index b220711fa5..41a9f6cf31 100644 --- a/unittest/contact-models.cpp +++ b/unittest/cpp/contact-models.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2024 INRIA // +#define BOOST_TEST_MODULE contact_models + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -10,9 +12,10 @@ #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -41,8 +44,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(contact_models) { pinocchio::Model model; @@ -500,5 +501,3 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) BOOST_CHECK(J_clm_LWA.isApprox(J_clm_LWA_sparse)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/copy.cpp b/unittest/cpp/copy.cpp similarity index 96% rename from unittest/copy.cpp rename to unittest/cpp/copy.cpp index 2d91f846dc..3785f890b4 100644 --- a/unittest/copy.cpp +++ b/unittest/cpp/copy.cpp @@ -2,16 +2,17 @@ // Copyright(c) 2018-2020 CNRS INRIA // +#define BOOST_TEST_MODULE copy + #include "pinocchio/algorithm/copy.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_data_copy) { @@ -59,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_data_copy) BOOST_CHECK(data.a_gf[i] == data_ref.a_gf[i]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/coulomb-friction-cone.cpp b/unittest/cpp/coulomb-friction-cone.cpp similarity index 98% rename from unittest/coulomb-friction-cone.cpp rename to unittest/cpp/coulomb-friction-cone.cpp index 23707285a9..de95c81d2b 100644 --- a/unittest/coulomb-friction-cone.cpp +++ b/unittest/cpp/coulomb-friction-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2022-2024 INRIA // +#define BOOST_TEST_MODULE coulomb_friction_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; Eigen::Vector3d positiveRandomScaling() { @@ -122,5 +123,3 @@ BOOST_AUTO_TEST_CASE(test_weighted_projection) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/algorithms.cpp b/unittest/cpp/cppad-algorithms.cpp similarity index 99% rename from unittest/cppad/algorithms.cpp rename to unittest/cpp/cppad-algorithms.cpp index 69703cf0e0..0cc814b0b5 100644 --- a/unittest/cppad/algorithms.cpp +++ b/unittest/cpp/cppad-algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2022 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_algorithms + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" @@ -16,17 +18,16 @@ #include -#include #include +#include + #ifdef _WIN32 #define DLL_EXT ".dll" #else #define DLL_EXT ".so" #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_mass_matrix) { using CppAD::AD; @@ -409,5 +410,3 @@ BOOST_AUTO_TEST_CASE(test_JSIM_jit) BOOST_CHECK(M.isApprox(data.M)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/basic.cpp b/unittest/cpp/cppad-basic.cpp similarity index 98% rename from unittest/cppad/basic.cpp rename to unittest/cpp/cppad-basic.cpp index 497d319ead..42f516ed02 100644 --- a/unittest/cppad/basic.cpp +++ b/unittest/cpp/cppad-basic.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_basic + #include "pinocchio/autodiff/cppad.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_example1_cppad) { @@ -251,5 +252,3 @@ BOOST_AUTO_TEST_CASE(test_atan2) pinocchio::math::atan2(y, x); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/derivatives.cpp b/unittest/cpp/cppad-derivatives.cpp similarity index 99% rename from unittest/cppad/derivatives.cpp rename to unittest/cpp/cppad-derivatives.cpp index 68c8ab8af6..df0706a76b 100644 --- a/unittest/cppad/derivatives.cpp +++ b/unittest/cpp/cppad-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_derivatives + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" @@ -14,10 +16,9 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives) { @@ -277,5 +278,3 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives) BOOST_CHECK(ddq_dtau_mat.isApprox(data.Minv)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/joint-configurations.cpp b/unittest/cpp/cppad-joint-configurations.cpp similarity index 97% rename from unittest/cppad/joint-configurations.cpp rename to unittest/cpp/cppad-joint-configurations.cpp index 260d27437d..20b34ea701 100644 --- a/unittest/cppad/joint-configurations.cpp +++ b/unittest/cpp/cppad-joint-configurations.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_joint_configurations + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" -#include "../utils/model-generator.hpp" +#include "utils/model-generator.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_joint_configuration) { @@ -144,5 +145,3 @@ BOOST_AUTO_TEST_CASE(test_joint_configuration) BOOST_CHECK(results_J1[0].isIdentity()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/joints.cpp b/unittest/cpp/cppad-joints.cpp similarity index 99% rename from unittest/cppad/joints.cpp rename to unittest/cpp/cppad-joints.cpp index df04a2fe84..7e04d281d9 100644 --- a/unittest/cppad/joints.cpp +++ b/unittest/cpp/cppad-joints.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_joints + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jointRX_motion_space) { @@ -309,5 +310,3 @@ BOOST_AUTO_TEST_CASE(test_all_joints) TestADOnJoints()(pinocchio::JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/spatial.cpp b/unittest/cpp/cppad-spatial.cpp similarity index 99% rename from unittest/cppad/spatial.cpp rename to unittest/cpp/cppad-spatial.cpp index a1ada830c8..6be3a7d846 100644 --- a/unittest/cppad/spatial.cpp +++ b/unittest/cpp/cppad-spatial.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppad_spatial + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/spatial.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template Eigen::Matrix @@ -277,5 +278,3 @@ BOOST_AUTO_TEST_CASE(test_explog) BOOST_CHECK(Jlog6.isApprox(Jlog6_analytic)); BOOST_CHECK(Jlog6_fd.isApprox(Jlog6, pinocchio::math::sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/algorithms.cpp b/unittest/cpp/cppadcg-algorithms.cpp similarity index 99% rename from unittest/cppadcg/algorithms.cpp rename to unittest/cpp/cppadcg-algorithms.cpp index a323fbb0e0..e483e75fb6 100644 --- a/unittest/cppadcg/algorithms.cpp +++ b/unittest/cpp/cppadcg-algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppadcg_algorithms + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/multibody.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_crba_code_generation) { @@ -238,5 +239,3 @@ BOOST_AUTO_TEST_CASE(test_crba_code_generation_pointer) BOOST_CHECK(jac.middleCols(nq + nv, nv).isApprox(data.M)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/basic.cpp b/unittest/cpp/cppadcg-basic.cpp similarity index 98% rename from unittest/cppadcg/basic.cpp rename to unittest/cpp/cppadcg-basic.cpp index cde394a510..43cd2eb033 100644 --- a/unittest/cppadcg/basic.cpp +++ b/unittest/cpp/cppadcg-basic.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE cppadcg_basic + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/multibody.hpp" @@ -9,10 +11,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_simple_cppadcg) { @@ -227,5 +228,3 @@ BOOST_AUTO_TEST_CASE(test_dynamic_link) BOOST_CHECK( Eigen::Map(jac.data()).isApprox(Eigen::Map(jac_ref.data()))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/contact-dynamics.cpp b/unittest/cpp/cppadcg-contact-dynamics.cpp similarity index 96% rename from unittest/cppadcg/contact-dynamics.cpp rename to unittest/cpp/cppadcg-contact-dynamics.cpp index 59ba96cf9a..7f4b98fee8 100644 --- a/unittest/cppadcg/contact-dynamics.cpp +++ b/unittest/cpp/cppadcg-contact-dynamics.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2021 INRIA // +#define BOOST_TEST_MODULE cppadcg_contact_dynamics + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_constraint_dynamics_code_generation) { @@ -59,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_dynamics_code_generation) BOOST_CHECK(data.ddq.isApprox(cg_constraintDynamics.ddq)); BOOST_CHECK(data.lambda_c.isApprox(cg_constraintDynamics.lambda_c)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/joint-configurations.cpp b/unittest/cpp/cppadcg-joint-configurations.cpp similarity index 96% rename from unittest/cppadcg/joint-configurations.cpp rename to unittest/cpp/cppadcg-joint-configurations.cpp index f01693dc84..d5a7bf82d4 100644 --- a/unittest/cppadcg/joint-configurations.cpp +++ b/unittest/cpp/cppadcg-joint-configurations.cpp @@ -2,22 +2,23 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE cppadcg_joint_configurations + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" #include "pinocchio/multibody.hpp" -#include "../utils/model-generator.hpp" +#include "utils/model-generator.hpp" -#include #include +#include + using namespace pinocchio; bool DELETE_CODEGEN_LIBS_AFTER_TEST = false; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_joint_configuration_code_generation) { typedef double Scalar; @@ -90,5 +91,3 @@ BOOST_AUTO_TEST_CASE(test_joint_configuration_code_generation) std::remove("cg_dDifference_eval_.dylib"); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/crba.cpp b/unittest/cpp/crba.cpp similarity index 99% rename from unittest/crba.cpp rename to unittest/cpp/crba.cpp index 2865a4935d..50a68a32be 100644 --- a/unittest/crba.cpp +++ b/unittest/cpp/crba.cpp @@ -10,6 +10,8 @@ * */ +#define BOOST_TEST_MODULE crba + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -21,11 +23,12 @@ #include -#include #include #include "utils/model-generator.hpp" +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -55,8 +58,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_crba) { pinocchio::Model model; @@ -244,5 +245,3 @@ BOOST_AUTO_TEST_CASE(test_crba_malloc) } #endif - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/csv.cpp b/unittest/cpp/csv.cpp similarity index 85% rename from unittest/csv.cpp rename to unittest/cpp/csv.cpp index b5a8eddc48..e0faf45a3e 100644 --- a/unittest/csv.cpp +++ b/unittest/cpp/csv.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE csv + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -19,5 +20,3 @@ BOOST_AUTO_TEST_CASE(test_random_matrix) const Eigen::MatrixXd matrix = Eigen::MatrixXd::Random(mat_size, mat_size); toCSVfile(TEST_SERIALIZATION_FOLDER "/test.csv", matrix); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/data.cpp b/unittest/cpp/data.cpp similarity index 98% rename from unittest/data.cpp rename to unittest/cpp/data.cpp index e35899a107..58b0e614db 100644 --- a/unittest/data.cpp +++ b/unittest/cpp/data.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE data + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/check.hpp" -#include #include #include "utils/model-generator.hpp" -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_empty_model) { @@ -188,5 +189,3 @@ BOOST_AUTO_TEST_CASE(test_mimic_subtree) Data data_man_mimic(man_mimic); BOOST_CHECK(data_man_mimic.mimic_subtree_joint[0] == 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operations.cpp b/unittest/cpp/delassus-operations.cpp similarity index 99% rename from unittest/delassus-operations.cpp rename to unittest/cpp/delassus-operations.cpp index da2be6dd26..f4331911bd 100644 --- a/unittest/delassus-operations.cpp +++ b/unittest/cpp/delassus-operations.cpp @@ -2,11 +2,12 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE delassus_operations + #include #include // to avoid C99 warnings -#include #include #include @@ -14,7 +15,7 @@ #include "utils.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace pinocchio::unittest; @@ -833,5 +834,3 @@ BOOST_AUTO_TEST_CASE(delassus_cholesky_expression_unsafe) expected_mat += compliance.asDiagonal(); BOOST_CHECK(res.isApprox(expected_mat * rhs, 1e-6)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-dense.cpp b/unittest/cpp/delassus-operator-dense.cpp similarity index 99% rename from unittest/delassus-operator-dense.cpp rename to unittest/cpp/delassus-operator-dense.cpp index f3b33f9b8a..7751b8191e 100644 --- a/unittest/delassus-operator-dense.cpp +++ b/unittest/cpp/delassus-operator-dense.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE delassus_operator_dense + #include #include #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -228,5 +229,3 @@ BOOST_AUTO_TEST_CASE(test_copy) delassus.updateCompliance(compliance); BOOST_CHECK(!delassus_assigned.getCompliance().isApprox(compliance)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-preconditioned.cpp b/unittest/cpp/delassus-operator-preconditioned.cpp similarity index 98% rename from unittest/delassus-operator-preconditioned.cpp rename to unittest/cpp/delassus-operator-preconditioned.cpp index a48373d6ba..ee06ad5c54 100644 --- a/unittest/delassus-operator-preconditioned.cpp +++ b/unittest/cpp/delassus-operator-preconditioned.cpp @@ -1,10 +1,11 @@ +#define BOOST_TEST_MODULE delassus_operator_preconditioned + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -86,5 +87,3 @@ BOOST_AUTO_TEST_CASE(delassus_dense_preconditioned) Eigen::VectorXd res_apply2 = damped_preconditioned_compliant_matrix * rhs; BOOST_CHECK(res.isApprox(res_apply2)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-rigid-body.cpp b/unittest/cpp/delassus-operator-rigid-body.cpp similarity index 99% rename from unittest/delassus-operator-rigid-body.cpp rename to unittest/cpp/delassus-operator-rigid-body.cpp index cc5e8e8581..c38f52edb0 100644 --- a/unittest/delassus-operator-rigid-body.cpp +++ b/unittest/cpp/delassus-operator-rigid-body.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE delassus_operator_rigid_body + #include #include @@ -18,9 +20,10 @@ #include "utils/model-generator.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -40,8 +43,6 @@ const DelassusAccessor & access(const Delassus & delassus) return static_cast &>(delassus); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(default_constructor_shared_ptr) { typedef PointContactConstraintModelTpl ConstraintModel; @@ -1633,5 +1634,3 @@ BOOST_AUTO_TEST_CASE(test_copy) delassus.updateCompliance(compliance_value); BOOST_CHECK(access(delassus_assigned).m_compliance.isConstant(new_compliance_value, 0)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus.cpp b/unittest/cpp/delassus.cpp similarity index 99% rename from unittest/delassus.cpp rename to unittest/cpp/delassus.cpp index 67e4cf7bb2..4f7a0da48a 100644 --- a/unittest/delassus.cpp +++ b/unittest/cpp/delassus.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2023 KU Leuven // +#define BOOST_TEST_MODULE delassus + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -12,9 +14,10 @@ #include "pinocchio/algorithm/delassus.hpp" #include "pinocchio/algorithm/compute-all-terms.hpp" -#include #include +#include + namespace pinocchio { template @@ -55,7 +58,6 @@ namespace pinocchio using namespace pinocchio; double mu = 1e-4; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) BOOST_AUTO_TEST_CASE(contact_6D) { @@ -870,5 +872,3 @@ BOOST_AUTO_TEST_CASE(contact_3D_6D_ancestor_6D4) -H_inverse.topLeftCorner(constraint_chol.constraintDim(), constraint_chol.constraintDim()), 1e-7)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/double-entry-container.cpp b/unittest/cpp/double-entry-container.cpp similarity index 98% rename from unittest/double-entry-container.cpp rename to unittest/cpp/double-entry-container.cpp index d76a5814d5..66bccd51b0 100644 --- a/unittest/double-entry-container.cpp +++ b/unittest/cpp/double-entry-container.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE double_entry_container + #include "pinocchio/container/double-entry-container.hpp" #include "pinocchio/container/matrix-stack.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_all_std_vector) { @@ -147,5 +148,3 @@ BOOST_AUTO_TEST_CASE(test_all_matrix_stack) BOOST_CHECK(container.values()[size_t(id)].isConstant(double(id), double(0))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/dynamic-allocations.cpp b/unittest/cpp/dynamic-allocations.cpp similarity index 99% rename from unittest/dynamic-allocations.cpp rename to unittest/cpp/dynamic-allocations.cpp index af274c25b4..1c1b84d3fa 100644 --- a/unittest/dynamic-allocations.cpp +++ b/unittest/cpp/dynamic-allocations.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE dynamic_allocations + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -30,16 +32,15 @@ #include "pinocchio/algorithm/impulse-dynamics-derivatives.hpp" #include "pinocchio/algorithm/regressor.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -using namespace pinocchio; #include +using namespace pinocchio; + #if !(defined(__has_feature) && __has_feature(realtime_sanitizer)) #error "rtsan not enabled. Please enable rtsan with -fsanitize=realtime" #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - bool hasMimicJoints(const Model & model) { return !model.mimicked_joints.empty(); @@ -577,5 +578,3 @@ BOOST_AUTO_TEST_CASE(dynamic_allocations_spatial_operations) log6(M); }(); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-basic-op.cpp b/unittest/cpp/eigen-basic-op.cpp similarity index 96% rename from unittest/eigen-basic-op.cpp rename to unittest/cpp/eigen-basic-op.cpp index 7818f18d70..13cbae2e32 100644 --- a/unittest/eigen-basic-op.cpp +++ b/unittest/cpp/eigen-basic-op.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE eigen_basic_op + #include "pinocchio/utils/std-vector.hpp" #include "pinocchio/math.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_matrix_matrix_product) { @@ -85,5 +86,3 @@ BOOST_AUTO_TEST_CASE(test_eigen_helpers_on_std_vector) BOOST_CHECK(val.isIdentity(0)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-storage.cpp b/unittest/cpp/eigen-storage.cpp similarity index 98% rename from unittest/eigen-storage.cpp rename to unittest/cpp/eigen-storage.cpp index f1c677196a..43b14dcca9 100644 --- a/unittest/eigen-storage.cpp +++ b/unittest/cpp/eigen-storage.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE eigen_storage + #include "pinocchio/container/eigen-storage.hpp" -#include #include +#include + using namespace pinocchio; typedef internal::EigenStorageTpl EigenStorageMatrix; typedef internal::EigenStorageTpl EigenStorageRowMatrix; typedef internal::EigenStorageTpl EigenStorageVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(eigen_storage_default) { EigenStorageMatrix storage_matrix; @@ -66,7 +67,7 @@ BOOST_AUTO_TEST_CASE(eigen_storage_matrix) BOOST_CHECK(storage.const_map().topLeftCorner(rows, cols).isOnes(0.)); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(eigen_storage_cast) { const Eigen::Index rows = 10, cols = 20; @@ -154,5 +155,3 @@ BOOST_AUTO_TEST_CASE(eigen_storage_vector) // storage.conservativeResize(1,new_size); // will not pass } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-tensor.cpp b/unittest/cpp/eigen-tensor.cpp similarity index 95% rename from unittest/eigen-tensor.cpp rename to unittest/cpp/eigen-tensor.cpp index 42eb255c21..032b7d9726 100644 --- a/unittest/eigen-tensor.cpp +++ b/unittest/cpp/eigen-tensor.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE eigen_tensor + #include "pinocchio/math.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_emulate_tensors) { @@ -53,5 +54,3 @@ BOOST_AUTO_TEST_CASE(test_emulate_tensors) for (std::size_t i = 0; i < rank; ++i) BOOST_CHECK(tensor1.dimension(i) == new_dims[i]); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigenvalues.cpp b/unittest/cpp/eigenvalues.cpp similarity index 97% rename from unittest/eigenvalues.cpp rename to unittest/cpp/eigenvalues.cpp index 0d8951d19d..fc4f1d6874 100644 --- a/unittest/eigenvalues.cpp +++ b/unittest/cpp/eigenvalues.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE eigenvalues + #include #include -#include #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -76,5 +77,3 @@ BOOST_AUTO_TEST_CASE(test_random_matrix) BOOST_CHECK(test_eigen_vec); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/energy.cpp b/unittest/cpp/energy.cpp similarity index 98% rename from unittest/energy.cpp rename to unittest/cpp/energy.cpp index 6af6554df4..08da109353 100644 --- a/unittest/energy.cpp +++ b/unittest/cpp/energy.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE energy + #include "pinocchio/algorithm/energy.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,11 +13,10 @@ #include "pinocchio/multibody/sample-models.hpp" #include -#include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinetic_energy) { @@ -189,5 +190,3 @@ BOOST_AUTO_TEST_CASE(test_against_rnea) BOOST_CHECK(tau_fd.isApprox(tau_ref, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/explog.cpp b/unittest/cpp/explog.cpp similarity index 99% rename from unittest/explog.cpp rename to unittest/cpp/explog.cpp index e12c08cfe1..ab9b0f6468 100644 --- a/unittest/explog.cpp +++ b/unittest/cpp/explog.cpp @@ -3,15 +3,15 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE explog + #include "pinocchio/spatial.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - -BOOST_AUTO_TEST_CASE(exp) +BOOST_AUTO_TEST_CASE(explog_exp) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(renorm_rotation) } } -BOOST_AUTO_TEST_CASE(log) +BOOST_AUTO_TEST_CASE(explog_log) { SE3 M(SE3::Identity()); Motion v(Motion::Random()); @@ -634,5 +634,3 @@ BOOST_AUTO_TEST_CASE(test_Jlog6_robustness) BOOST_CHECK(res.isIdentity()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/finite-differences.cpp b/unittest/cpp/finite-differences.cpp similarity index 99% rename from unittest/finite-differences.cpp rename to unittest/cpp/finite-differences.cpp index 9e0770e2cf..3c9841dc0d 100644 --- a/unittest/finite-differences.cpp +++ b/unittest/cpp/finite-differences.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2019 CNRS INRIA // +#define BOOST_TEST_MODULE finite_differences + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/jacobian.hpp" #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -279,8 +282,6 @@ struct FiniteDiffJoint } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_S_finit_diff) { boost::mpl::for_each(FiniteDiffJoint()); @@ -309,5 +310,3 @@ BOOST_AUTO_TEST_CASE(test_jacobian_vs_finit_diff) Jrh_finite_diff = finiteDiffJacobian(model, data, q, idx); BOOST_CHECK(Jrh_finite_diff.isApprox(Jrh, sqrt(1e-8))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frame-anchor-constraint.cpp b/unittest/cpp/frame-anchor-constraint.cpp similarity index 99% rename from unittest/frame-anchor-constraint.cpp rename to unittest/cpp/frame-anchor-constraint.cpp index fb1b24462f..550f555a9c 100644 --- a/unittest/frame-anchor-constraint.cpp +++ b/unittest/cpp/frame-anchor-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE frame_anchor_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -18,9 +20,10 @@ #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -49,8 +52,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { Model model; @@ -546,7 +547,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(frame_anchor_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -789,5 +790,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frames-derivatives.cpp b/unittest/cpp/frames-derivatives.cpp similarity index 99% rename from unittest/frames-derivatives.cpp rename to unittest/cpp/frames-derivatives.cpp index e3056a548e..4f4551d7a6 100644 --- a/unittest/frames-derivatives.cpp +++ b/unittest/cpp/frames-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE frames_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/algorithm/frames-derivatives.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_frames_derivatives_velocity) { @@ -466,5 +467,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_acceleration) BOOST_CHECK(a_partial_dv_local_other.isApprox(a_partial_dv_local)); BOOST_CHECK(a_partial_da_local_other.isApprox(a_partial_da_local)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frames.cpp b/unittest/cpp/frames.cpp similarity index 99% rename from unittest/frames.cpp rename to unittest/cpp/frames.cpp index 265805e2db..97b8c7c8ee 100644 --- a/unittest/frames.cpp +++ b/unittest/cpp/frames.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2024 CNRS INRIA // +#define BOOST_TEST_MODULE frames + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -14,19 +16,18 @@ #include -#include #include #include "utils/model-generator.hpp" +#include + template inline bool isFinite(const Eigen::MatrixBase & x) { return ((x - x).array() == (x - x).array()).all(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(frame_basic) { using namespace pinocchio; @@ -52,7 +53,7 @@ BOOST_AUTO_TEST_CASE(frame_basic) BOOST_CHECK(frame1 == frame2); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(frames_cast) { using namespace pinocchio; Frame frame("toto", 0, 0, SE3::Random(), OP_FRAME); @@ -718,4 +719,3 @@ BOOST_AUTO_TEST_CASE(test_supported_inertia_and_force) Force force_free(data_free.f[joint_id]); BOOST_CHECK(force_fix.isApprox(force_free)); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/full-space-cone.cpp b/unittest/cpp/full-space-cone.cpp similarity index 93% rename from unittest/full-space-cone.cpp rename to unittest/cpp/full-space-cone.cpp index 46dccbecf1..0daff340a8 100644 --- a/unittest/full-space-cone.cpp +++ b/unittest/cpp/full-space-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE full_space_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -37,5 +38,3 @@ BOOST_AUTO_TEST_CASE(test_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/fusion.cpp b/unittest/cpp/fusion.cpp similarity index 98% rename from unittest/fusion.cpp rename to unittest/cpp/fusion.cpp index ab35c2f054..8358a5c01e 100644 --- a/unittest/fusion.cpp +++ b/unittest/cpp/fusion.cpp @@ -7,11 +7,12 @@ // #include "pinocchio/multibody/joint.hpp" // #include "pinocchio/multibody/model.hpp" +#define BOOST_TEST_MODULE fusion + #include #include "pinocchio/tools/timer.hpp" -#include #include struct TestObj @@ -137,6 +138,8 @@ typedef boost::variant CRTPVariant; #include #include +#include + namespace bf = boost::fusion; struct Launcher : public boost::static_visitor @@ -208,8 +211,6 @@ namespace boost } // namespace fusion } // namespace boost -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_fusion) { CRTPDerived d; @@ -235,5 +236,3 @@ BOOST_AUTO_TEST_CASE(test_fusion) bf::vector arg2 = bf::append2(boost::ref(i), boost::ref(k), arg); // bf::push_front(bf::push_front(arg1,boost::ref(k)),boost::ref(j)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-algorithms.cpp b/unittest/cpp/geometry-algorithms.cpp similarity index 99% rename from unittest/geometry-algorithms.cpp rename to unittest/cpp/geometry-algorithms.cpp index 3edb10989e..d65220e503 100644 --- a/unittest/geometry-algorithms.cpp +++ b/unittest/cpp/geometry-algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE geometry_algorithms + #include #include "pinocchio/multibody.hpp" @@ -15,6 +17,7 @@ #include #include + #include using namespace pinocchio; @@ -30,8 +33,6 @@ GeometryPositionsMap_t fillPinocchioGeometryPositions( std::vector getBodiesList(); -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_simple_boxes) { using namespace pinocchio; @@ -346,5 +347,3 @@ BOOST_AUTO_TEST_CASE(test_compute_body_radius) BOOST_CHECK(radius >= 0.); } #endif // if defined(PINOCCHIO_WITH_URDFDOM) - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-model.cpp b/unittest/cpp/geometry-model.cpp similarity index 99% rename from unittest/geometry-model.cpp rename to unittest/cpp/geometry-model.cpp index 5d65d731cb..828c0aaa8f 100644 --- a/unittest/geometry-model.cpp +++ b/unittest/cpp/geometry-model.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE geometry_model + #include "pinocchio/multibody.hpp" #include "pinocchio/geometry.hpp" #include "pinocchio/parsers/urdf.hpp" #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(manage_collision_pairs) { std::string filename = @@ -212,5 +213,3 @@ BOOST_AUTO_TEST_CASE(test_clone) BOOST_CHECK(geom_model_clone != geom_model); BOOST_CHECK(geom_model_copy == geom_model); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-object.cpp b/unittest/cpp/geometry-object.cpp similarity index 89% rename from unittest/geometry-object.cpp rename to unittest/cpp/geometry-object.cpp index a7168f8a85..2360e19f9d 100644 --- a/unittest/geometry-object.cpp +++ b/unittest/cpp/geometry-object.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE geometry_object + #include "pinocchio/geometry.hpp" #include @@ -10,8 +12,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_clone) { coal::Sphere * sphere_ptr = new coal::Sphere(0.5); @@ -24,5 +24,3 @@ BOOST_AUTO_TEST_CASE(test_clone) sphere_ptr->radius = 1.; BOOST_CHECK(geom_obj_clone != geom_obj); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/gram-schmidt-orthonormalisation.cpp b/unittest/cpp/gram-schmidt-orthonormalisation.cpp similarity index 95% rename from unittest/gram-schmidt-orthonormalisation.cpp rename to unittest/cpp/gram-schmidt-orthonormalisation.cpp index f5a4b7c87c..965b607138 100644 --- a/unittest/gram-schmidt-orthonormalisation.cpp +++ b/unittest/cpp/gram-schmidt-orthonormalisation.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE gram_schmidt_orthonormalisation + #include #include #include // to avoid C99 warnings -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -54,5 +55,3 @@ BOOST_AUTO_TEST_CASE(test_orthonormalization) BOOST_CHECK(isOrthonormal(mat, prec)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/impulse-dynamics-derivatives.cpp b/unittest/cpp/impulse-dynamics-derivatives.cpp similarity index 99% rename from unittest/impulse-dynamics-derivatives.cpp rename to unittest/cpp/impulse-dynamics-derivatives.cpp index ea8e7e6932..3ee2fca865 100644 --- a/unittest/impulse-dynamics-derivatives.cpp +++ b/unittest/cpp/impulse-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2021 CNRS INRIA // +#define BOOST_TEST_MODULE impulse_dynamics_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/impulse-dynamics-derivatives.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace Eigen; using namespace pinocchio; @@ -351,5 +352,3 @@ BOOST_AUTO_TEST_CASE(test_impulse_dynamics_derivatives_LOCAL_WORLD_ALIGNED_fd) Eigen::MatrixXd::Identity(model.nv, model.nv) + data.ddq_dv, sqrt(alpha))); BOOST_CHECK(impulse_partial_dv_fd.isApprox(data.dlambda_dv, sqrt(alpha))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/impulse-dynamics.cpp b/unittest/cpp/impulse-dynamics.cpp similarity index 99% rename from unittest/impulse-dynamics.cpp rename to unittest/cpp/impulse-dynamics.cpp index fe1bd44ee2..6209b8a932 100644 --- a/unittest/impulse-dynamics.cpp +++ b/unittest/cpp/impulse-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE impulse_dynamics + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -12,10 +14,9 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_sparse_impulse_dynamics_empty) { @@ -456,5 +457,3 @@ BOOST_AUTO_TEST_CASE(test_sparse_impulse_dynamics_in_contact_6D_3D) constraint_id += cmodel.residualSize(); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-composite.cpp b/unittest/cpp/joint-composite.cpp similarity index 99% rename from unittest/joint-composite.cpp rename to unittest/cpp/joint-composite.cpp index d58d39d15e..44910f3ca3 100644 --- a/unittest/joint-composite.cpp +++ b/unittest/cpp/joint-composite.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2016 CNRS // +#define BOOST_TEST_MODULE joint_composite + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -206,8 +209,6 @@ struct TestJointComposite } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_basic) { typedef boost::variant< @@ -354,5 +355,3 @@ BOOST_AUTO_TEST_CASE(checkJointNames) BOOST_CHECK(jmodel_composite.getJointId("penultinum_joint") == 1); BOOST_CHECK_THROW(jmodel_composite.getJointId("wrong_name"), std::invalid_argument); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-configurations.cpp b/unittest/cpp/joint-configurations.cpp similarity index 99% rename from unittest/joint-configurations.cpp rename to unittest/cpp/joint-configurations.cpp index da16172b40..f349150077 100644 --- a/unittest/joint-configurations.cpp +++ b/unittest/cpp/joint-configurations.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_configurations + #include "utils/model-generator.hpp" #include "pinocchio/math.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(integration_test) { @@ -549,5 +550,3 @@ BOOST_AUTO_TEST_CASE(integrateCoeffWiseJacobian_test) } BOOST_CHECK(jac.isApprox(jac_fd, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-ellipsoid.cpp b/unittest/cpp/joint-ellipsoid.cpp similarity index 99% rename from unittest/joint-ellipsoid.cpp rename to unittest/cpp/joint-ellipsoid.cpp index 5336e3628a..579832e018 100644 --- a/unittest/joint-ellipsoid.cpp +++ b/unittest/cpp/joint-ellipsoid.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE joint_ellipsoid + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/joint.hpp" @@ -222,8 +224,6 @@ SE3::Vector3 computeTranslationAccelerations( return a; } -BOOST_AUTO_TEST_SUITE(JointEllipsoid) - /// @brief Test the rotationnal equivalence between JointModelEllipsoid and JointModelSphericalZYX BOOST_AUTO_TEST_CASE(vsSphericalZYX) { @@ -555,5 +555,3 @@ BOOST_AUTO_TEST_CASE(testBiaisVsSdotTimesVelocity) BOOST_CHECK(jdata.c.toVector().isApprox(Sdot * v, 1e-12)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-free-flyer.cpp b/unittest/cpp/joint-free-flyer.cpp similarity index 79% rename from unittest/joint-free-flyer.cpp rename to unittest/cpp/joint-free-flyer.cpp index c35f0cd702..54e7ae2ea8 100644 --- a/unittest/joint-free-flyer.cpp +++ b/unittest/cpp/joint-free-flyer.cpp @@ -3,15 +3,15 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_free_flyer + #include "pinocchio/multibody/joint.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(JointFreeFlyer) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_free_flyer_spatial) { Motion v(Motion::Random()); @@ -20,5 +20,3 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(Sv == v); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-friction-constraint.cpp b/unittest/cpp/joint-friction-constraint.cpp similarity index 99% rename from unittest/joint-friction-constraint.cpp rename to unittest/cpp/joint-friction-constraint.cpp index 0b9b21c2d8..609d885895 100644 --- a/unittest/joint-friction-constraint.cpp +++ b/unittest/cpp/joint-friction-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE joint_friction_constraint + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,15 +13,14 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; typedef JointFrictionConstraintModel::EigenIndexVector EigenIndexVector; typedef JointFrictionConstraintModel::BooleanVector BooleanVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_empty_constructor) { pinocchio::Model model; @@ -90,7 +91,7 @@ BOOST_AUTO_TEST_CASE(constraint_constructor) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_friction_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-generic.cpp b/unittest/cpp/joint-generic.cpp similarity index 99% rename from unittest/joint-generic.cpp rename to unittest/cpp/joint-generic.cpp index 1c8a751bcc..3060f3b519 100644 --- a/unittest/joint-generic.cpp +++ b/unittest/cpp/joint-generic.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2016-2019 CNRS INRIA // +#define BOOST_TEST_MODULE joint_generic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" #include "pinocchio/multibody.hpp" #include -#include #include +#include + using namespace pinocchio; template @@ -385,8 +388,6 @@ namespace pinocchio } // namespace pinocchio -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_joint_from_joint_composite) { typedef JointCollectionDefault JointCollection; @@ -428,7 +429,7 @@ BOOST_AUTO_TEST_CASE(test_empty_model) BOOST_CHECK(jmodel.idx_v() == -1); } -BOOST_AUTO_TEST_CASE(isEqual) +BOOST_AUTO_TEST_CASE(joint_generic_isEqual) { JointModelRX joint_revolutex; JointModelRY joint_revolutey; @@ -448,7 +449,7 @@ BOOST_AUTO_TEST_CASE(isEqual) BOOST_CHECK(jmodely != jmodelx); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_generic_cast) { JointModelRX joint_revolutex; @@ -508,5 +509,3 @@ BOOST_AUTO_TEST_CASE(test_operator_equal) { boost::mpl::for_each(TestJointOperatorEqual()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-helical.cpp b/unittest/cpp/joint-helical.cpp similarity index 98% rename from unittest/joint-helical.cpp rename to unittest/cpp/joint-helical.cpp index 4990488b6e..2f32d0e218 100644 --- a/unittest/joint-helical.cpp +++ b/unittest/cpp/joint-helical.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 CNRS INRIA // +#define BOOST_TEST_MODULE joint_helical + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -28,8 +30,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointHelical) - BOOST_AUTO_TEST_CASE(vsPXRX) { typedef SE3::Vector3 Vector3; @@ -127,7 +127,7 @@ BOOST_AUTO_TEST_CASE(vsPXRX) BOOST_CHECK(v_body_hx.isApprox(v_body_PXRX)); } -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(helical_spatial) { typedef TransformHelicalTpl TransformX; typedef TransformHelicalTpl TransformY; @@ -188,9 +188,6 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mh_z).isApprox(v.cross(mh_dense_z))); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointHelicalUnaligned) BOOST_AUTO_TEST_CASE(vsHX) { @@ -271,5 +268,3 @@ BOOST_AUTO_TEST_CASE(vsHX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-jacobian.cpp b/unittest/cpp/joint-jacobian.cpp similarity index 99% rename from unittest/joint-jacobian.cpp rename to unittest/cpp/joint-jacobian.cpp index fbdc992137..dde018764f 100644 --- a/unittest/joint-jacobian.cpp +++ b/unittest/cpp/joint-jacobian.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_jacobian + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -13,10 +15,11 @@ #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include #include "utils/model-generator.hpp" +#include + template inline bool isFinite(const Eigen::MatrixBase & x) { @@ -72,8 +75,6 @@ void test_jacobian_impl(const pinocchio::Model & model, pinocchio::JointIndex jo BOOST_CHECK(data_fk.J.isApprox(data.J)); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_jacobian) { pinocchio::Model model; @@ -345,5 +346,3 @@ BOOST_AUTO_TEST_CASE(test_timings) timer.toc(std::cout, NBT); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-limit-constraint.cpp b/unittest/cpp/joint-limit-constraint.cpp similarity index 99% rename from unittest/joint-limit-constraint.cpp rename to unittest/cpp/joint-limit-constraint.cpp index 90625dbc2a..9aece05d87 100644 --- a/unittest/joint-limit-constraint.cpp +++ b/unittest/cpp/joint-limit-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE joint_limit_constraint + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -13,16 +15,15 @@ #include -#include #include +#include + // TODO: refacto using namespace pinocchio; typedef JointLimitConstraintModel::EigenIndexVector EigenIndexVector; typedef JointLimitConstraintModel::BooleanVector BooleanVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_empty_constructor) { Model model; @@ -146,7 +147,7 @@ BOOST_AUTO_TEST_CASE(constraint_constructor) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_limit_constraint_cast) { Model model; buildModelWithAllJoints(model); @@ -653,5 +654,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance.size() < compliance_full_ref.size()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-mimic.cpp b/unittest/cpp/joint-mimic.cpp similarity index 99% rename from unittest/joint-mimic.cpp rename to unittest/cpp/joint-mimic.cpp index bd488ed9e5..8d5f17ad20 100644 --- a/unittest/joint-mimic.cpp +++ b/unittest/cpp/joint-mimic.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE joint_mimic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; typedef Eigen::Matrix Matrix6x; @@ -279,4 +280,3 @@ BOOST_AUTO_TEST_CASE(test_joint_generic_cast) BOOST_CHECK(jmodel_generic.id() == jmodel.id()); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-motion-subspace.cpp b/unittest/cpp/joint-motion-subspace.cpp similarity index 99% rename from unittest/joint-motion-subspace.cpp rename to unittest/cpp/joint-motion-subspace.cpp index 5316418ee6..4bc2525c66 100644 --- a/unittest/joint-motion-subspace.cpp +++ b/unittest/cpp/joint-motion-subspace.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE joint_motion_subspace + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_ForceSet) { @@ -427,5 +428,3 @@ BOOST_AUTO_TEST_CASE(test_joint_constraint_operations) typedef JointCollectionDefault::JointModelVariant Variant; boost::mpl::for_each(TestJointConstraint()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-planar.cpp b/unittest/cpp/joint-planar.cpp similarity index 98% rename from unittest/joint-planar.cpp rename to unittest/cpp/joint-planar.cpp index 86a555958a..2299de0673 100644 --- a/unittest/joint-planar.cpp +++ b/unittest/cpp/joint-planar.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_planar + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,9 +31,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointPlanar) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_planar_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -139,5 +139,3 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) BOOST_CHECK(jacobian_planar.isApprox(jacobian_expected)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-prismatic.cpp b/unittest/cpp/joint-prismatic.cpp similarity index 97% rename from unittest/joint-prismatic.cpp rename to unittest/cpp/joint-prismatic.cpp index 88e678d398..7d57cf2f3a 100644 --- a/unittest/joint-prismatic.cpp +++ b/unittest/cpp/joint-prismatic.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_prismatic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,9 +31,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointPrismatic) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(prismatic_spatial) { typedef TransformPrismaticTpl TransformX; typedef TransformPrismaticTpl TransformY; @@ -213,11 +213,7 @@ BOOST_AUTO_TEST_CASE(test_crba) BOOST_CHECK(M_expected.isApprox(data.M, 1e-10)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointPrismaticUnaligned) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(prismatic_unaligned_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -311,5 +307,3 @@ BOOST_AUTO_TEST_CASE(vsPX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-revolute.cpp b/unittest/cpp/joint-revolute.cpp similarity index 96% rename from unittest/joint-revolute.cpp rename to unittest/cpp/joint-revolute.cpp index 0caea809ff..dc81d489e0 100644 --- a/unittest/joint-revolute.cpp +++ b/unittest/cpp/joint-revolute.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_revolute + #include "pinocchio/math.hpp" #include "pinocchio/multibody/joint.hpp" @@ -31,9 +33,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointRevoluteUnaligned) - -BOOST_AUTO_TEST_CASE(vsRX) +BOOST_AUTO_TEST_CASE(revolute_unaligned_vsRX) { using namespace pinocchio; typedef SE3::Vector3 Vector3; @@ -112,9 +112,6 @@ BOOST_AUTO_TEST_CASE(vsRX) BOOST_CHECK(jacobianRX.isApprox(jacobianRevoluteUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnboundedUnaligned) BOOST_AUTO_TEST_CASE(vsRUX) { @@ -203,11 +200,7 @@ BOOST_AUTO_TEST_CASE(vsRUX) BOOST_CHECK(jacobianRUX.isApprox(jacobianRevoluteUnboundedUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnbounded) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_unbounded_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -237,7 +230,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp_z).isApprox(v.cross(mp_dense_z))); } -BOOST_AUTO_TEST_CASE(vsRX) +BOOST_AUTO_TEST_CASE(revolute_unbounded_vsRX) { typedef SE3::Vector3 Vector3; typedef SE3::Matrix3 Matrix3; @@ -336,11 +329,8 @@ BOOST_AUTO_TEST_CASE(tangent_map) BOOST_CHECK(mat_block2.rows() == 1); BOOST_CHECK(mat_block2.cols() == 1); } -BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(JointRevolute) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_spatial) { typedef TransformRevoluteTpl TransformX; typedef TransformRevoluteTpl TransformY; @@ -402,11 +392,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp_z).isApprox(v.cross(mp_dense_z))); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnaligned) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_unaligned_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -419,5 +405,3 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-spherical.cpp b/unittest/cpp/joint-spherical.cpp similarity index 97% rename from unittest/joint-spherical.cpp rename to unittest/cpp/joint-spherical.cpp index 0e38391180..e5aa08ccbe 100644 --- a/unittest/joint-spherical.cpp +++ b/unittest/cpp/joint-spherical.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_spherical + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,9 +31,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointSpherical) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(spherical_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } -BOOST_AUTO_TEST_CASE(vsFreeFlyer) +BOOST_AUTO_TEST_CASE(spherical_vsFreeFlyer) { using namespace pinocchio; typedef SE3::Vector3 Vector3; @@ -137,11 +137,8 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) BOOST_CHECK(jacobian_planar.isApprox(jacobian_expected)); } -BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(JointSphericalZYX) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(spherical_zyx_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -155,7 +152,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } -BOOST_AUTO_TEST_CASE(vsFreeFlyer) +BOOST_AUTO_TEST_CASE(spherical_zyx_vsFreeFlyer) { // WARNIG : Dynamic algorithm's results cannot be compared to FreeFlyer's ones because // of the representation of the rotation and the ConstraintSubspace difference. @@ -291,5 +288,3 @@ BOOST_AUTO_TEST_CASE(test_crba) BOOST_CHECK(M_expected.isApprox(data.M, 1e-10)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-translation.cpp b/unittest/cpp/joint-translation.cpp similarity index 98% rename from unittest/joint-translation.cpp rename to unittest/cpp/joint-translation.cpp index cf50ace84f..a71fa3932b 100644 --- a/unittest/joint-translation.cpp +++ b/unittest/cpp/joint-translation.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_translation + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -30,9 +32,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointTranslation) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_translation_spatial) { typedef TransformTranslationTpl TransformTranslation; typedef SE3::Vector3 Vector3; @@ -148,5 +148,3 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) jacobian_expected << jacobian_ff.col(0), jacobian_ff.col(1), jacobian_ff.col(2); BOOST_CHECK(jacobian_translation.isApprox(jacobian_expected)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-universal.cpp b/unittest/cpp/joint-universal.cpp similarity index 99% rename from unittest/joint-universal.cpp rename to unittest/cpp/joint-universal.cpp index 2c903a6d0a..c7b7da4360 100644 --- a/unittest/joint-universal.cpp +++ b/unittest/cpp/joint-universal.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2023 INRIA // +#define BOOST_TEST_MODULE joint_universal + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,8 +31,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointUniversal) - BOOST_AUTO_TEST_CASE(vsRXRY) { typedef SE3::Vector3 Vector3; @@ -207,5 +207,3 @@ BOOST_AUTO_TEST_CASE(vsRandomAxis) BOOST_CHECK(jacobianUniversal.isApprox(jacobianRandomAxis)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-visitors.cpp b/unittest/cpp/joint-visitors.cpp similarity index 90% rename from unittest/joint-visitors.cpp rename to unittest/cpp/joint-visitors.cpp index ff6d30d2d2..8a8823a4fa 100644 --- a/unittest/joint-visitors.cpp +++ b/unittest/cpp/joint-visitors.cpp @@ -1,13 +1,15 @@ // // Copyright (c) 2024-2025 INRIA // + +#define BOOST_TEST_MODULE joint_visitors + #include "pinocchio/multibody/joint.hpp" -#include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_check_joint_type) { @@ -21,5 +23,3 @@ BOOST_AUTO_TEST_CASE(test_check_joint_type) BOOST_CHECK(check_joint_type_within_sequence(jmodel_rx) == true); BOOST_CHECK(check_joint_type_within_sequence(jmodel_px) == false); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/kinematics-derivatives.cpp b/unittest/cpp/kinematics-derivatives.cpp similarity index 99% rename from unittest/kinematics-derivatives.cpp rename to unittest/cpp/kinematics-derivatives.cpp index 815a1d97d5..9dd9599c91 100644 --- a/unittest/kinematics-derivatives.cpp +++ b/unittest/cpp/kinematics-derivatives.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2018-2026 INRIA // +#define BOOST_TEST_MODULE kinematics_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/frames.hpp" @@ -10,9 +12,10 @@ #include "pinocchio/algorithm/kinematics-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include +#include + template bool isZero( const Eigen::Tensor & tensor3, @@ -32,8 +35,6 @@ bool isZero( return is_zero; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_all) { using namespace Eigen; @@ -1231,5 +1232,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_hessians_joint_0) getJointKinematicHessian(model, data, joint_id, LOCAL_WORLD_ALIGNED); isZero(kinematic_hessian_lwa, 0.); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/kinematics.cpp b/unittest/cpp/kinematics.cpp similarity index 99% rename from unittest/kinematics.cpp rename to unittest/cpp/kinematics.cpp index bc66680e11..3abe3c6067 100644 --- a/unittest/kinematics.cpp +++ b/unittest/cpp/kinematics.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE kinematics + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematics_constant_vector_input) { @@ -365,5 +366,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_mimic) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/lanczos-decomposition.cpp b/unittest/cpp/lanczos-decomposition.cpp similarity index 99% rename from unittest/lanczos-decomposition.cpp rename to unittest/cpp/lanczos-decomposition.cpp index 84db5045f6..a42146b7b9 100644 --- a/unittest/lanczos-decomposition.cpp +++ b/unittest/cpp/lanczos-decomposition.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE lanczos_decomposition + #include "pinocchio/math.hpp" #include "pinocchio/constraints.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/diagonal-preconditioner.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(test_delassus_preconditioned) checkDecomposition(lanczos_decomposition, matrix_preconditioned); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/liegroups.cpp b/unittest/cpp/liegroups.cpp similarity index 99% rename from unittest/liegroups.cpp rename to unittest/cpp/liegroups.cpp index aca9b531d1..35baa5582b 100644 --- a/unittest/liegroups.cpp +++ b/unittest/cpp/liegroups.cpp @@ -2,17 +2,20 @@ // Authors: Joseph Mirabel (joseph.mirabel@laas.fr) // +#define BOOST_TEST_MODULE liegroups + #include #include "pinocchio/multibody/liegroup.hpp" #include "pinocchio/multibody/joint.hpp" -#include #include #include #include +#include + #define EIGEN_VECTOR_IS_APPROX(Va, Vb, precision) \ BOOST_CHECK_MESSAGE( \ (Va).isApprox(Vb, precision), "check " #Va ".isApprox(" #Vb ") failed " \ @@ -658,8 +661,6 @@ struct LieGroup_TangentMap } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_all) { typedef boost::variant< @@ -697,7 +698,7 @@ BOOST_AUTO_TEST_CASE(Jdifference) boost::mpl::for_each(LieGroup_Jdifference()); } -BOOST_AUTO_TEST_CASE(dIntegrateTransport) +BOOST_AUTO_TEST_CASE(liegroups_dIntegrateTransport) { typedef double Scalar; static constexpr int Options = 0; @@ -801,7 +802,7 @@ BOOST_AUTO_TEST_CASE(JintegrateCoeffWise) } } -BOOST_AUTO_TEST_CASE(tangentMap) +BOOST_AUTO_TEST_CASE(liegroups_tangentMap) { typedef double Scalar; static constexpr int Options = 0; @@ -1033,5 +1034,3 @@ BOOST_AUTO_TEST_CASE(test_liegroup_variant_comparison) test_liegroup_variant_not_equal( VectorSpaceOperationTpl<1, double>(), VectorSpaceOperationTpl(2)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/loop-constrained-aba.cpp b/unittest/cpp/loop-constrained-aba.cpp similarity index 99% rename from unittest/loop-constrained-aba.cpp rename to unittest/cpp/loop-constrained-aba.cpp index 6c3b57defd..2331ead024 100644 --- a/unittest/loop-constrained-aba.cpp +++ b/unittest/cpp/loop-constrained-aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE loop_constrained_aba + #include #include "pinocchio/spatial.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/loop-constrained-aba.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace Eigen; @@ -892,5 +893,3 @@ BOOST_AUTO_TEST_CASE(test_coupled_3D_6D_loops) BOOST_CHECK(data_ref.ddq.isApprox(data.ddq, 1e-10)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/macros.cpp b/unittest/cpp/macros.cpp similarity index 95% rename from unittest/macros.cpp rename to unittest/cpp/macros.cpp index f2e654d570..2f5edc1736 100644 --- a/unittest/macros.cpp +++ b/unittest/cpp/macros.cpp @@ -2,11 +2,14 @@ // Copyright (c) 2021-2024 CNRS INRIA // +#define BOOST_TEST_MODULE macros + #include "pinocchio/macros.hpp" -#include #include +#include + std::string expected_msg; bool check_exception_msg(const std::exception & exception) @@ -15,8 +18,6 @@ bool check_exception_msg(const std::exception & exception) return expected_msg == exception.what(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - void function_1(std::vector v, size_t size) { PINOCCHIO_CHECK_ARGUMENT_SIZE(v.size(), size); @@ -61,5 +62,3 @@ BOOST_AUTO_TEST_CASE(test_check_arguments) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-block-element.cpp b/unittest/cpp/matrix-block-element.cpp similarity index 99% rename from unittest/matrix-block-element.cpp rename to unittest/cpp/matrix-block-element.cpp index 7902157a9b..8cfc0b11b6 100644 --- a/unittest/matrix-block-element.cpp +++ b/unittest/cpp/matrix-block-element.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE matrix_block_element + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; typedef Eigen::Matrix M11; @@ -421,5 +422,3 @@ BOOST_AUTO_TEST_CASE(test_nested_block_diagonal_block_element) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-inverse.cpp b/unittest/cpp/matrix-inverse.cpp similarity index 97% rename from unittest/matrix-inverse.cpp rename to unittest/cpp/matrix-inverse.cpp index c0cf6165aa..b2499a7033 100644 --- a/unittest/matrix-inverse.cpp +++ b/unittest/cpp/matrix-inverse.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE matrix_inverse + #include #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -117,5 +118,3 @@ BOOST_AUTO_TEST_CASE(test_matrix_inverse_on_dynamic_matrix) test_matrix_inverse_on_dynamic_matrix_impl<11>(); test_matrix_inverse_on_dynamic_matrix_impl<12>(); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-product.cpp b/unittest/cpp/matrix-product.cpp similarity index 97% rename from unittest/matrix-product.cpp rename to unittest/cpp/matrix-product.cpp index 0d65398f85..25b92d8849 100644 --- a/unittest/matrix-product.cpp +++ b/unittest/cpp/matrix-product.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE matrix_product + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -73,5 +74,3 @@ BOOST_AUTO_TEST_CASE(test_col_major_small) test(rows, cols, inner_dim); test(rows, cols, inner_dim); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-stack.cpp b/unittest/cpp/matrix-stack.cpp similarity index 99% rename from unittest/matrix-stack.cpp rename to unittest/cpp/matrix-stack.cpp index b18d56c19f..dc26f251c7 100644 --- a/unittest/matrix-stack.cpp +++ b/unittest/cpp/matrix-stack.cpp @@ -2,12 +2,15 @@ // Copyright (c) 202-2026 INRIA // +#define BOOST_TEST_MODULE matrix_stack + #include -#include #include #include "pinocchio/container/matrix-stack.hpp" +#include + // #define ALIGNMENT_VALUE 128 #define ALIGNMENT_VALUE 8 @@ -32,8 +35,6 @@ const T & as_const(T & value) return value; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(print_info) { std::cout << "sizeof(Scalar): " << sizeof(Scalar) << std::endl; @@ -451,5 +452,3 @@ BOOST_AUTO_TEST_CASE(matrix_stack_empty_matrix) BOOST_CHECK(matrix_stack[2].rows() == 4); BOOST_CHECK(matrix_stack[2].cols() == 3); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix.cpp b/unittest/cpp/matrix.cpp similarity index 97% rename from unittest/matrix.cpp rename to unittest/cpp/matrix.cpp index 4bc4dd1070..544d1ca3d1 100644 --- a/unittest/matrix.cpp +++ b/unittest/cpp/matrix.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE matrix + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_isSymmetric) @@ -102,5 +102,3 @@ BOOST_AUTO_TEST_CASE(test_remap) BOOST_CHECK(re_mapped == input_map); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/mjcf.cpp b/unittest/cpp/mjcf.cpp similarity index 99% rename from unittest/mjcf.cpp rename to unittest/cpp/mjcf.cpp index c7b14cb487..d3f532d53e 100644 --- a/unittest/mjcf.cpp +++ b/unittest/cpp/mjcf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2024 CNRS INRIA // +#define BOOST_TEST_MODULE mjcf + #include #include @@ -17,9 +19,10 @@ #include "pinocchio/multibody/joint.hpp" -#include #include +#include + typedef ::pinocchio::mjcf::details::MjcfVisitor MjcfVisitor; namespace @@ -96,8 +99,6 @@ static bool comparePropertyTrees( return true; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - // /// @brief Test for the inertia conversion from mjcf to pinocchio inertia // /// @param BOOST_AUTO_TEST_CASE(convert_inertia_fullinertia) @@ -1730,5 +1731,3 @@ BOOST_AUTO_TEST_CASE(test_site_attached_to_fixed_body) BOOST_CHECK(site_2.placement.rotation().isIdentity()); BOOST_CHECK(site_2.placement.translation().isApprox(Eigen::Vector3d(0, 0, -1.))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model-configuration-converter.cpp b/unittest/cpp/model-configuration-converter.cpp similarity index 99% rename from unittest/model-configuration-converter.cpp rename to unittest/cpp/model-configuration-converter.cpp index 6a615b5d1f..9320a0ae65 100644 --- a/unittest/model-configuration-converter.cpp +++ b/unittest/cpp/model-configuration-converter.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2025 INRIA // -#include +#define BOOST_TEST_MODULE model_configuration_converter #include "pinocchio/multibody.hpp" @@ -11,7 +11,7 @@ #include "pinocchio/parsers/graph.hpp" -BOOST_AUTO_TEST_SUITE(ModelConfigurationConverter) +#include // TODO: factorize /// function isApprox better to avoid problem with zero precision @@ -652,5 +652,3 @@ BOOST_AUTO_TEST_CASE(test_convert_tangent) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model-graph.cpp b/unittest/cpp/model-graph.cpp similarity index 99% rename from unittest/model-graph.cpp rename to unittest/cpp/model-graph.cpp index 9fc94b3529..4c186b90b5 100644 --- a/unittest/model-graph.cpp +++ b/unittest/cpp/model-graph.cpp @@ -2,15 +2,18 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE model_graph + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/parsers/graph.hpp" -#include #include +#include + pinocchio::graph::ModelGraph buildReversableModelGraph(const pinocchio::graph::JointVariant & joint) { using namespace pinocchio::graph; @@ -51,8 +54,6 @@ bool SE3isApprox( && (s1.translation() - s2.translation()).isZero(prec); } -BOOST_AUTO_TEST_SUITE(ModelGraphTest) - /// @brief test if vertex are added to the graph BOOST_AUTO_TEST_CASE(test_add_vertex) { @@ -1620,4 +1621,3 @@ BOOST_AUTO_TEST_CASE(test_build_geometry_model) BOOST_CHECK(cap2->radius == 3); } #endif -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model.cpp b/unittest/cpp/model.cpp similarity index 99% rename from unittest/model.cpp rename to unittest/cpp/model.cpp index 86e32e2b22..de409ceb8a 100644 --- a/unittest/model.cpp +++ b/unittest/cpp/model.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2018-2025 INRIA // +#define BOOST_TEST_MODULE model + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/check.hpp" @@ -15,12 +17,11 @@ #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/spatial/fwd.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_model_subtree) { @@ -151,7 +152,7 @@ BOOST_AUTO_TEST_CASE(comparison) BOOST_CHECK(model == model); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(model_cast) { Model model; buildModels::humanoidRandom(model); @@ -1292,5 +1293,3 @@ BOOST_AUTO_TEST_CASE(test_colwise_sparsity_pattern_and_span_indexes) BOOST_CHECK(pattern[idx]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/multiprecision-mpfr.cpp b/unittest/cpp/multiprecision-mpfr.cpp similarity index 98% rename from unittest/multiprecision-mpfr.cpp rename to unittest/cpp/multiprecision-mpfr.cpp index 59b39c33fd..384b53533f 100644 --- a/unittest/multiprecision-mpfr.cpp +++ b/unittest/cpp/multiprecision-mpfr.cpp @@ -2,11 +2,12 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE multiprecision_mpfr + #include "pinocchio/math/multiprecision-mpfr.hpp" #include #include -#include #include #include @@ -18,7 +19,7 @@ #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/multibody/sample-models.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -159,5 +160,3 @@ BOOST_AUTO_TEST_CASE(test_mutliprecision) BOOST_CHECK_IS_APPROX(data.M, data_multi.M, double); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/multiprecision.cpp b/unittest/cpp/multiprecision.cpp similarity index 98% rename from unittest/multiprecision.cpp rename to unittest/cpp/multiprecision.cpp index 455d59faff..3036f2ed43 100644 --- a/unittest/multiprecision.cpp +++ b/unittest/cpp/multiprecision.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE multiprecision + #include "pinocchio/math/multiprecision.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -18,10 +20,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -137,5 +138,3 @@ BOOST_AUTO_TEST_CASE(test_mutliprecision) BOOST_CHECK_IS_APPROX(data.M, data_multi.M, double); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/openmp-exception.cpp b/unittest/cpp/openmp-exception.cpp similarity index 95% rename from unittest/openmp-exception.cpp rename to unittest/cpp/openmp-exception.cpp index cc90371697..04b58c6f8c 100644 --- a/unittest/openmp-exception.cpp +++ b/unittest/cpp/openmp-exception.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE openmp_exception + #include #include "pinocchio/utils/openmp.hpp" -#include #include +#include + using namespace pinocchio; template @@ -36,8 +39,6 @@ void run_parallel_loop(const int n, OpenMPException & openmp_exception, Paramete openmp_exception.rethrowException(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_openmp_exception_catch) { @@ -63,5 +64,3 @@ BOOST_AUTO_TEST_CASE(test_openmp_exception_catch) BOOST_CHECK_NO_THROW(run_parallel_loop(10000, openmp_exception, 10001)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/orthant-cone-jordan-operation.cpp b/unittest/cpp/orthant-cone-jordan-operation.cpp similarity index 99% rename from unittest/orthant-cone-jordan-operation.cpp rename to unittest/cpp/orthant-cone-jordan-operation.cpp index 61bde751d8..2a387aa551 100644 --- a/unittest/orthant-cone-jordan-operation.cpp +++ b/unittest/cpp/orthant-cone-jordan-operation.cpp @@ -2,9 +2,9 @@ // Copyright (c) 2025 INRIA // -#include "pinocchio/constraints.hpp" +#define BOOST_TEST_MODULE orthant_cone_jordan_operation -#include +#include "pinocchio/constraints.hpp" #ifndef NDEBUG #include @@ -29,7 +29,7 @@ } while (0) #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -287,5 +287,3 @@ BOOST_AUTO_TEST_CASE(jordan_scaling_matrix) BOOST_CHECK((w2diag_mat).isApprox(w2_diag_mat_expected)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/orthant-cone.cpp b/unittest/cpp/orthant-cone.cpp similarity index 94% rename from unittest/orthant-cone.cpp rename to unittest/cpp/orthant-cone.cpp index 279afb21d1..3cbee8aef7 100644 --- a/unittest/orthant-cone.cpp +++ b/unittest/cpp/orthant-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE orthant_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_orthant) { @@ -48,5 +49,3 @@ BOOST_AUTO_TEST_CASE(test_orthant) BOOST_CHECK((x_proj.array() >= 0).all()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-aba.cpp b/unittest/cpp/parallel-aba.cpp similarity index 95% rename from unittest/parallel-aba.cpp rename to unittest/cpp/parallel-aba.cpp index 9490a8a00f..5bed5da328 100644 --- a/unittest/parallel-aba.cpp +++ b/unittest/cpp/parallel-aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021-2022 INRIA // +#define BOOST_TEST_MODULE parallel_aba + #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/algorithm/parallel/aba.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -11,12 +13,11 @@ #include -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_parallel_aba) { @@ -53,5 +54,3 @@ BOOST_AUTO_TEST_CASE(test_parallel_aba) BOOST_CHECK(a == a_ref); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-geometry.cpp b/unittest/cpp/parallel-geometry.cpp similarity index 99% rename from unittest/parallel-geometry.cpp rename to unittest/cpp/parallel-geometry.cpp index 3ce9a81eea..2a38d1c318 100644 --- a/unittest/parallel-geometry.cpp +++ b/unittest/cpp/parallel-geometry.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021-2023 INRIA // +#define BOOST_TEST_MODULE parallel_geometry + #include #include "pinocchio/geometry.hpp" @@ -20,12 +22,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_geometry_pool) { const std::string filename = @@ -426,5 +427,3 @@ BOOST_AUTO_TEST_CASE(test_pool_talos) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-rnea.cpp b/unittest/cpp/parallel-rnea.cpp similarity index 95% rename from unittest/parallel-rnea.cpp rename to unittest/cpp/parallel-rnea.cpp index 0b3d688f76..d4fa591fb5 100644 --- a/unittest/parallel-rnea.cpp +++ b/unittest/cpp/parallel-rnea.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2021-2022 INRIA // +#define BOOST_TEST_MODULE parallel_rnea + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/parallel/rnea.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_parallel_rnea) { @@ -50,5 +51,3 @@ BOOST_AUTO_TEST_CASE(test_parallel_rnea) BOOST_CHECK(tau == tau_ref); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/pgs-solver.cpp b/unittest/cpp/pgs-solver.cpp similarity index 99% rename from unittest/pgs-solver.cpp rename to unittest/cpp/pgs-solver.cpp index 01da267509..8a57bef356 100644 --- a/unittest/pgs-solver.cpp +++ b/unittest/cpp/pgs-solver.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE pgs_solver + #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/constraints.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include +#include + using namespace pinocchio; template @@ -124,8 +127,6 @@ struct TestBoxTpl std::size_t n_iter; }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(ball) { Model model; @@ -1451,5 +1452,3 @@ BOOST_AUTO_TEST_CASE(test_copy_result) result_copy.x.setZero(); BOOST_CHECK(result_assigned.x.isApprox(expected_x)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/point-anchor-constraint.cpp b/unittest/cpp/point-anchor-constraint.cpp similarity index 99% rename from unittest/point-anchor-constraint.cpp rename to unittest/cpp/point-anchor-constraint.cpp index cc85fef91a..83882f09aa 100644 --- a/unittest/point-anchor-constraint.cpp +++ b/unittest/cpp/point-anchor-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE point_anchor_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -16,9 +18,10 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -47,8 +50,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { pinocchio::Model model; @@ -466,7 +467,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(point_anchor_constraint_cast) { pinocchio::Model model; @@ -562,5 +563,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/point-contact-constraint.cpp b/unittest/cpp/point-contact-constraint.cpp similarity index 99% rename from unittest/point-contact-constraint.cpp rename to unittest/cpp/point-contact-constraint.cpp index a39198958c..5e34743f69 100644 --- a/unittest/point-contact-constraint.cpp +++ b/unittest/cpp/point-contact-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE point_contact_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" @@ -16,9 +18,10 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -47,8 +50,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { pinocchio::Model model; @@ -594,7 +595,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(point_contact_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -841,5 +842,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/preconditioner.cpp b/unittest/cpp/preconditioner.cpp similarity index 94% rename from unittest/preconditioner.cpp rename to unittest/cpp/preconditioner.cpp index 0088b6c109..5afcb6bcbd 100644 --- a/unittest/preconditioner.cpp +++ b/unittest/cpp/preconditioner.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE preconditioner + #include "pinocchio/algorithm/diagonal-preconditioner.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(diagonal_preconditioner) { Eigen::Index n = 10; @@ -37,5 +37,3 @@ BOOST_AUTO_TEST_CASE(diagonal_preconditioner) x_unscaled_true = x.array() * (precond_vec.array() * precond_vec.array()); BOOST_CHECK(x_unscaled.isApprox(x_unscaled_true)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/promote-static-eval.cpp b/unittest/cpp/promote-static-eval.cpp similarity index 99% rename from unittest/promote-static-eval.cpp rename to unittest/cpp/promote-static-eval.cpp index b0d26ae20d..00a294a448 100644 --- a/unittest/promote-static-eval.cpp +++ b/unittest/cpp/promote-static-eval.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE promote_static_eval + #include "pinocchio/utils/promote-static-eval.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_helpers) { @@ -304,5 +305,3 @@ BOOST_AUTO_TEST_CASE(test_specitic_6x6_case) internal::promote_static_eval(res.noalias()).dispatch_type(matrix_product) == pinocchio::internal::DispatchType::STATIC); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/promote-static-op.cpp b/unittest/cpp/promote-static-op.cpp similarity index 99% rename from unittest/promote-static-op.cpp rename to unittest/cpp/promote-static-op.cpp index c6d1313585..b907c5294c 100644 --- a/unittest/promote-static-op.cpp +++ b/unittest/cpp/promote-static-op.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE promote_static_op + #include "pinocchio/utils/promote-static-eval.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_helpers) { @@ -214,5 +215,3 @@ BOOST_AUTO_TEST_CASE(test_partial_static_matrix) BOOST_CHECK(res_noaliasing != res_aliasing); BOOST_CHECK(C == res_noaliasing); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/pv-solver.cpp b/unittest/cpp/pv-solver.cpp similarity index 99% rename from unittest/pv-solver.cpp rename to unittest/cpp/pv-solver.cpp index 634da9b8ad..f09e9e2040 100644 --- a/unittest/pv-solver.cpp +++ b/unittest/cpp/pv-solver.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2023 KU Leuven // +#define BOOST_TEST_MODULE pv_solver + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -15,10 +17,9 @@ #include "pinocchio/algorithm/constraint-cholesky.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include // TODO: add tests on J_ref*ddq - rhs and on the OSIM matrix for PV. Add tests for proxLTLs @@ -454,5 +455,3 @@ BOOST_AUTO_TEST_CASE(test_forward_dynamics_repeating_6D_humanoid) // // constrainedABA(model, data, q, v, tau, contact_models, contact_datas, prox_settings); // // BOOST_CHECK(data.ddq.isApprox(data_ref.ddq, 1e-11)); // // } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/python_parser.cpp b/unittest/cpp/python_parser.cpp similarity index 89% rename from unittest/python_parser.cpp rename to unittest/cpp/python_parser.cpp index f52485340a..adb71a1c53 100644 --- a/unittest/python_parser.cpp +++ b/unittest/cpp/python_parser.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE python_parser + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/python.hpp" #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(buildModel) { std::string filename = PINOCCHIO_MODEL_DIR + std::string("/simple_model.py"); @@ -24,5 +24,3 @@ BOOST_AUTO_TEST_CASE(buildModel) BOOST_CHECK(model.nq == 9); BOOST_CHECK(model.nv == 8); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/quaternion.cpp b/unittest/cpp/quaternion.cpp similarity index 95% rename from unittest/quaternion.cpp rename to unittest/cpp/quaternion.cpp index 8aa525b6cd..5cd3c68acc 100644 --- a/unittest/quaternion.cpp +++ b/unittest/cpp/quaternion.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2019-2020 INRIA CNRS // +#define BOOST_TEST_MODULE quaternion + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_assignQuaternion) { using namespace pinocchio; @@ -67,5 +67,3 @@ BOOST_AUTO_TEST_CASE(test_isNormalized) // Specific check for the Zero vector BOOST_CHECK(!quaternion::isNormalized(Quaternion(Vector4::Zero()))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/reachable-workspace.cpp b/unittest/cpp/reachable-workspace.cpp similarity index 99% rename from unittest/reachable-workspace.cpp rename to unittest/cpp/reachable-workspace.cpp index 57f69ba34a..18ed1683b1 100644 --- a/unittest/reachable-workspace.cpp +++ b/unittest/cpp/reachable-workspace.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2023 CNRS INRIA // +#define BOOST_TEST_MODULE reachable_workspace + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/geometry.hpp" @@ -9,13 +11,14 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/parsers/urdf.hpp" -#include #include #ifdef PINOCCHIO_WITH_COLLISION #include #endif // PINOCCHIO_WITH_COLLISION +#include + /// @brief Create a spherical joint with a stick of length l attached to it /// @param length length of the stick /// @return pinochio model @@ -107,7 +110,6 @@ addObstacle(pinocchio::GeometryModel & geom_model, const double distance, const geom_model.addGeometryObject(geometry_object); } #endif -BOOST_AUTO_TEST_SUITE(ReachableWorkspace) /// @brief test generation combination function and compare to the output of the python function /// `itertools.combinations` @@ -337,5 +339,3 @@ BOOST_AUTO_TEST_CASE(test_spherical) BOOST_CHECK(res.vertex.cols() > 0); BOOST_CHECK(res.faces.rows() > 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/reference.cpp b/unittest/cpp/reference.cpp similarity index 97% rename from unittest/reference.cpp rename to unittest/cpp/reference.cpp index f5eeae1352..72d87f56de 100644 --- a/unittest/reference.cpp +++ b/unittest/cpp/reference.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE reference + #include "pinocchio/utils/reference.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_get_ref) { @@ -69,5 +70,3 @@ BOOST_AUTO_TEST_CASE(test_get_ref) BOOST_CHECK(const_v_const_uptr.get() == &get_ref(const_v_const_uptr)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/regressor.cpp b/unittest/cpp/regressor.cpp similarity index 99% rename from unittest/regressor.cpp rename to unittest/cpp/regressor.cpp index 2cf5f06a8b..518d7180d0 100644 --- a/unittest/regressor.cpp +++ b/unittest/cpp/regressor.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2024 CNRS INRIA // +#define BOOST_TEST_MODULE regressor + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/regressor.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/compute-all-terms.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematic_regressor_joint) { @@ -423,5 +424,3 @@ BOOST_AUTO_TEST_CASE(test_potential_energy_regressor) BOOST_CHECK_CLOSE(potential_energy_regressor, target_energy, 1e-12); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rigid-constraint-conversion.cpp b/unittest/cpp/rigid-constraint-conversion.cpp similarity index 99% rename from unittest/rigid-constraint-conversion.cpp rename to unittest/cpp/rigid-constraint-conversion.cpp index 2b4aa3d037..95cec8b039 100644 --- a/unittest/rigid-constraint-conversion.cpp +++ b/unittest/cpp/rigid-constraint-conversion.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE rigid_constraint_conversion + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -10,14 +12,13 @@ #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - /// Verify that a PointAnchorConstraintModel converts to a CONTACT_3D RigidConstraintModel /// and that the kinematic structure (joint IDs, placements, reference frame) is preserved. BOOST_AUTO_TEST_CASE(convert_point_anchor_structure) @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(convert_frame_anchor_jacobian_at_zero_error) BOOST_CHECK(J_rigid.isApprox(-J_frame)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea-derivatives.cpp b/unittest/cpp/rnea-derivatives.cpp similarity index 99% rename from unittest/rnea-derivatives.cpp rename to unittest/cpp/rnea-derivatives.cpp index 1e94436afa..0b1a353891 100644 --- a/unittest/rnea-derivatives.cpp +++ b/unittest/cpp/rnea-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2017-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -12,10 +14,9 @@ #include "pinocchio/algorithm/rnea-derivatives.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_generalized_gravity_derivatives) { @@ -524,5 +525,3 @@ BOOST_AUTO_TEST_CASE(test_get_coriolis) BOOST_CHECK(data.C.isApprox(data_ref.C)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea-second-order-derivatives.cpp b/unittest/cpp/rnea-second-order-derivatives.cpp similarity index 99% rename from unittest/rnea-second-order-derivatives.cpp rename to unittest/cpp/rnea-second-order-derivatives.cpp index 7c93f8a171..290bfde2f8 100644 --- a/unittest/rnea-second-order-derivatives.cpp +++ b/unittest/cpp/rnea-second-order-derivatives.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2017-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea_second_order_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/rnea-second-order-derivatives.hpp" #include "pinocchio/algorithm/rnea-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives_SO) { @@ -227,5 +228,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_derivatives_SO) BOOST_CHECK(mqv.isApprox(mqv2, sqrt(alpha))); BOOST_CHECK(maq.isApprox(maq2, sqrt(alpha))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea.cpp b/unittest/cpp/rnea.cpp similarity index 99% rename from unittest/rnea.cpp rename to unittest/cpp/rnea.cpp index 6c1d71b793..8cb87c25b5 100644 --- a/unittest/rnea.cpp +++ b/unittest/cpp/rnea.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,12 +13,11 @@ #include "pinocchio/algorithm/centroidal.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_nle_vs_rnea) { @@ -354,5 +355,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_mimic) BOOST_CHECK(tau_st.isApprox(data_ref_st.tau)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rotation.cpp b/unittest/cpp/rotation.cpp similarity index 96% rename from unittest/rotation.cpp rename to unittest/cpp/rotation.cpp index a3292765c8..5ac921a5b6 100644 --- a/unittest/rotation.cpp +++ b/unittest/cpp/rotation.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE rotation + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_toRotationMatrix) { using namespace pinocchio; @@ -71,5 +71,3 @@ BOOST_AUTO_TEST_CASE(test_orthogonal_projection) BOOST_CHECK(fabs(rot_proj.determinant() - 1.) <= Eigen::NumTraits::dummy_precision()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rpy.cpp b/unittest/cpp/rpy.cpp similarity index 99% rename from unittest/rpy.cpp rename to unittest/cpp/rpy.cpp index cbb926dfa3..0e17cb9ce7 100644 --- a/unittest/rpy.cpp +++ b/unittest/cpp/rpy.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE rpy + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rpyToMatrix) { @@ -264,5 +265,3 @@ BOOST_AUTO_TEST_CASE(test_computeRpyJacobianTimeDerivative) Eigen::Matrix3d djWf = djWdr * rpydot[0] + djWdp * rpydot[1] + djWdy * rpydot[2]; BOOST_CHECK(djW.isApprox(djWf, tol)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/sample-models.cpp b/unittest/cpp/sample-models.cpp similarity index 97% rename from unittest/sample-models.cpp rename to unittest/cpp/sample-models.cpp index 62ee46b65a..bf2bc5c263 100644 --- a/unittest/sample-models.cpp +++ b/unittest/cpp/sample-models.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2018 CNRS // +#define BOOST_TEST_MODULE sample_models + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/kinematics.hpp" @@ -10,9 +12,10 @@ #include #include -#include #include +#include + // Helper functions to map reduced to full model Eigen::VectorXd toFull(const Eigen::VectorXd & vec, int mimPrim, int mimSec, double scaling, double offset) @@ -31,8 +34,6 @@ Eigen::MatrixXd create_G(const pinocchio::Model & model, const pinocchio::Model return G; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(build_model_sample_humanoid_random) { pinocchio::Model model; @@ -103,5 +104,3 @@ BOOST_AUTO_TEST_CASE(build_model_sample_humanoid) /* We might want to check here the joint namings, and validate the * direct geometry with respect to reference values. */ } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/sdf.cpp b/unittest/cpp/sdf.cpp similarity index 99% rename from unittest/sdf.cpp rename to unittest/cpp/sdf.cpp index 3d9a8bba45..71823bf05f 100644 --- a/unittest/sdf.cpp +++ b/unittest/cpp/sdf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2021 CNRS INRIA // +#define BOOST_TEST_MODULE sdf + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/sdf.hpp" @@ -9,8 +11,6 @@ using PointAnchorConstraintModelVector = std::vector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(build_model) { const std::string filename = @@ -412,5 +412,3 @@ BOOST_AUTO_TEST_CASE(compare_model_in_version_1_6) BOOST_CHECK(constraint_models[0].joint2_id == 2); BOOST_CHECK(constraint_models[0].joint2_placement == placement_center_link_A); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/second-order-cone-jordan-operation.cpp b/unittest/cpp/second-order-cone-jordan-operation.cpp similarity index 99% rename from unittest/second-order-cone-jordan-operation.cpp rename to unittest/cpp/second-order-cone-jordan-operation.cpp index d70d75513d..1640862260 100644 --- a/unittest/second-order-cone-jordan-operation.cpp +++ b/unittest/cpp/second-order-cone-jordan-operation.cpp @@ -2,9 +2,9 @@ // Copyright (c) 2025 INRIA // -#include "pinocchio/constraints.hpp" +#define BOOST_TEST_MODULE second_order_cone_jordan_operation -#include +#include "pinocchio/constraints.hpp" #ifndef NDEBUG #include @@ -29,7 +29,7 @@ } while (0) #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -241,5 +241,3 @@ BOOST_AUTO_TEST_CASE(jordan_scaling_matrix) BOOST_CHECK(W2_expected.isApprox(W2)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-algorithm.cpp b/unittest/cpp/serialization-algorithm.cpp similarity index 97% rename from unittest/serialization-algorithm.cpp rename to unittest/cpp/serialization-algorithm.cpp index f6b6304faa..f6669bb2cf 100644 --- a/unittest/serialization-algorithm.cpp +++ b/unittest/cpp/serialization-algorithm.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_algorithm + #include #include "pinocchio/multibody.hpp" @@ -17,10 +19,9 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_delassus_operator_dense_serialization) { @@ -94,5 +95,3 @@ BOOST_AUTO_TEST_CASE(test_delassus_operator_dense_serialization) delassus_operator_dense, TEST_SERIALIZATION_FOLDER "/DelassusOperatorDense", "DelassusOperatorDense"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-constraints.cpp b/unittest/cpp/serialization-constraints.cpp similarity index 99% rename from unittest/serialization-constraints.cpp rename to unittest/cpp/serialization-constraints.cpp index 6a7c2c7218..2ea4897d0e 100644 --- a/unittest/serialization-constraints.cpp +++ b/unittest/cpp/serialization-constraints.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_constraints + #include #include "pinocchio/multibody.hpp" @@ -16,10 +18,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include + template struct JointLimitAndFrictionConstraintModelInitializer { @@ -315,5 +317,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_model_variant) } generic_test(cmodels, TEST_SERIALIZATION_FOLDER "/Constraint", "cmodel_vector"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-math.cpp b/unittest/cpp/serialization-math.cpp similarity index 98% rename from unittest/serialization-math.cpp rename to unittest/cpp/serialization-math.cpp index 361a37542d..ebb1f72185 100644 --- a/unittest/serialization-math.cpp +++ b/unittest/cpp/serialization-math.cpp @@ -2,15 +2,18 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_math + #include "pinocchio/serialization.hpp" #include "pinocchio/spatial.hpp" -#include #include #include "serialization.hpp" +#include + template struct empty_contructor_algo> { @@ -21,8 +24,6 @@ struct empty_contructor_algo MatrixStack; @@ -152,5 +153,3 @@ BOOST_AUTO_TEST_CASE(block_diagonal_matrix_nested) generic_test( block_diagonal_matrix, TEST_SERIALIZATION_FOLDER "/Container", "block_diagonal_matrix_nested"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-multibody-joint.cpp b/unittest/cpp/serialization-multibody-joint.cpp similarity index 99% rename from unittest/serialization-multibody-joint.cpp rename to unittest/cpp/serialization-multibody-joint.cpp index fd02447980..831934421a 100644 --- a/unittest/serialization-multibody-joint.cpp +++ b/unittest/cpp/serialization-multibody-joint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_multibody_joint + #include #include "pinocchio/multibody.hpp" @@ -13,10 +15,9 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template struct init; @@ -461,5 +462,3 @@ BOOST_AUTO_TEST_CASE(test_data_serialization) generic_test(data, TEST_SERIALIZATION_FOLDER "/Data", "Data"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-multibody.cpp b/unittest/cpp/serialization-multibody.cpp similarity index 98% rename from unittest/serialization-multibody.cpp rename to unittest/cpp/serialization-multibody.cpp index 7aa1754fd5..27fb119361 100644 --- a/unittest/serialization-multibody.cpp +++ b/unittest/cpp/serialization-multibody.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_multibody + #include #include "pinocchio/multibody.hpp" @@ -17,9 +19,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include +#include + template<> struct empty_contructor_algo { @@ -29,8 +32,6 @@ struct empty_contructor_algo } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_multibody_serialization) { using namespace pinocchio; @@ -136,5 +137,3 @@ BOOST_AUTO_TEST_CASE(test_geometry_model_and_data_serialization) } #endif // PINOCCHIO_WITH_COLLISION } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization.cpp b/unittest/cpp/serialization.cpp similarity index 97% rename from unittest/serialization.cpp rename to unittest/cpp/serialization.cpp index ce3e6044ca..bdfa1426d7 100644 --- a/unittest/serialization.cpp +++ b/unittest/cpp/serialization.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE serialization + #include #include "pinocchio/multibody.hpp" @@ -17,9 +19,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include +#include + // template<> // struct empty_contructor_algo // { @@ -39,8 +42,6 @@ struct empty_contructor_algo @@ -48,8 +50,6 @@ void testSINCOS(int n) } } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_sincos) { #ifndef NDEBUG @@ -61,5 +61,3 @@ BOOST_AUTO_TEST_CASE(test_sincos) testSINCOS(n); testSINCOS(n); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/size-in-bytes.cpp b/unittest/cpp/size-in-bytes.cpp similarity index 97% rename from unittest/size-in-bytes.cpp rename to unittest/cpp/size-in-bytes.cpp index b1b5e74c4c..2f876ceeed 100644 --- a/unittest/size-in-bytes.cpp +++ b/unittest/cpp/size-in-bytes.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2025-2026 INRIA // +#define BOOST_TEST_MODULE size_in_bytes + #include "pinocchio/utils/size-in-bytes.hpp" #include "pinocchio/math.hpp" #include -#include #include +#include + using namespace pinocchio; template @@ -29,8 +32,6 @@ typedef SimpleStruct<1> SimpleStruct1; typedef SimpleStruct<10> SimpleStruct10; typedef SimpleStruct<100> SimpleStruct100; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_simple_struct) { BOOST_CHECK(1 == SimpleStruct1().sizeInBytes()); @@ -80,5 +81,3 @@ BOOST_AUTO_TEST_CASE(test_fundamental_types) BOOST_CHECK(internal::sizeInBytes(double(1)) == sizeof(double)); BOOST_CHECK(internal::sizeInBytes((long double)(1)) == sizeof(long double)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/spatial.cpp b/unittest/cpp/spatial.cpp similarity index 99% rename from unittest/spatial.cpp rename to unittest/cpp/spatial.cpp index 7386449c74..4338f871f4 100644 --- a/unittest/spatial.cpp +++ b/unittest/cpp/spatial.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2015-2021 CNRS INRIA // -#include "pinocchio/spatial.hpp" +#define BOOST_TEST_MODULE spatial -#include +#include "pinocchio/spatial.hpp" #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_SE3) { @@ -1216,5 +1216,3 @@ BOOST_AUTO_TEST_CASE(test_spatial_axis) BOOST_CHECK(Sxf.isApprox(Sxf_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/srdf.cpp b/unittest/cpp/srdf.cpp similarity index 98% rename from unittest/srdf.cpp rename to unittest/cpp/srdf.cpp index 42241743fa..6f88b7c2b1 100644 --- a/unittest/srdf.cpp +++ b/unittest/cpp/srdf.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2016-2018 CNRS // +#define BOOST_TEST_MODULE srdf + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/urdf.hpp" #include "pinocchio/parsers/srdf.hpp" #include + #include using namespace pinocchio; using namespace std; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_removeCollisionPairs) { using namespace pinocchio::urdf; @@ -138,5 +139,3 @@ BOOST_AUTO_TEST_CASE(readRotorParams) BOOST_CHECK(model.rotorInertia(model.joints[model.getJointId("WAIST_P")].idx_v()) == 1.0); BOOST_CHECK(model.rotorGearRatio(model.joints[model.getJointId("WAIST_R")].idx_v()) == 1.0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/symmetric.cpp b/unittest/cpp/symmetric.cpp similarity index 98% rename from unittest/symmetric.cpp rename to unittest/cpp/symmetric.cpp index 8b0717e988..b30cf62c4c 100644 --- a/unittest/symmetric.cpp +++ b/unittest/cpp/symmetric.cpp @@ -17,6 +17,8 @@ * - Pinocchio: 6us */ +#define BOOST_TEST_MODULE symmetric + #include "pinocchio/spatial.hpp" #include "pinocchio/utils/timer.hpp" @@ -24,7 +26,6 @@ #include #include -#include void timeSym3( const pinocchio::Symmetric3 & S, @@ -52,6 +53,8 @@ void timeLTI( #endif +#include + void timeSelfAdj(const Eigen::Matrix3d & A, const Eigen::Matrix3d & Sdense, Eigen::Matrix3d & ASA) { typedef Eigen::SelfAdjointView Sym3; @@ -59,8 +62,6 @@ void timeSelfAdj(const Eigen::Matrix3d & A, const Eigen::Matrix3d & Sdense, Eige ASA.triangularView() = A * S * A.transpose(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - /* --- PINOCCHIO ------------------------------------------------------------ */ /* --- PINOCCHIO ------------------------------------------------------------ */ /* --- PINOCCHIO ------------------------------------------------------------ */ @@ -335,7 +336,7 @@ BOOST_AUTO_TEST_CASE(comparison) BOOST_CHECK(sym1 == sym1); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(csymmetric_ast) { using namespace pinocchio; Symmetric3 sym(Symmetric3::Random()); @@ -343,4 +344,3 @@ BOOST_AUTO_TEST_CASE(cast) BOOST_CHECK(sym.cast() == sym); BOOST_CHECK(sym.cast().cast() == sym); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/tree-broadphase.cpp b/unittest/cpp/tree-broadphase.cpp similarity index 97% rename from unittest/tree-broadphase.cpp rename to unittest/cpp/tree-broadphase.cpp index 2dfbb02250..d2e224606d 100644 --- a/unittest/tree-broadphase.cpp +++ b/unittest/cpp/tree-broadphase.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE tree_broadphase + #include "pinocchio/collision/collision.hpp" #include "pinocchio/collision/broadphase.hpp" #include "pinocchio/collision/tree-broadphase-manager.hpp" @@ -12,12 +14,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_tree_broadphase_with_empty_models) { Model model; @@ -78,5 +79,3 @@ BOOST_AUTO_TEST_CASE(test_collisions) == computeCollisions(model, data, geom_model, geom_data, q_rand)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/tridiagonal-matrix.cpp b/unittest/cpp/tridiagonal-matrix.cpp similarity index 99% rename from unittest/tridiagonal-matrix.cpp rename to unittest/cpp/tridiagonal-matrix.cpp index 206fefe277..a7cff36dde 100644 --- a/unittest/tridiagonal-matrix.cpp +++ b/unittest/cpp/tridiagonal-matrix.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE tridiagonal_matrix + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -220,5 +221,3 @@ BOOST_AUTO_TEST_CASE(test_eigenvalues) BOOST_CHECK(math::fabs(lowest_eigenvalue - spectrum_ref[first_index]) <= eps); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/urdf.cpp b/unittest/cpp/urdf.cpp similarity index 99% rename from unittest/urdf.cpp rename to unittest/cpp/urdf.cpp index 3a27abf06e..3dda2d8982 100644 --- a/unittest/urdf.cpp +++ b/unittest/cpp/urdf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE urdf + #include #include @@ -13,11 +15,10 @@ #endif // PINOCCHIO_WITH_COLLISION #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(build_model) { @@ -773,5 +774,3 @@ BOOST_AUTO_TEST_CASE(test_urdf_v10_accel_jerk_floating) } } #endif // PINOCCHIO_URDFDOM_HEADERS_VERSION_AT_LEAST(3, 0, 0) - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/utils.hpp b/unittest/cpp/utils.hpp similarity index 100% rename from unittest/utils.hpp rename to unittest/cpp/utils.hpp diff --git a/unittest/utils/macros.hpp b/unittest/cpp/utils/macros.hpp similarity index 100% rename from unittest/utils/macros.hpp rename to unittest/cpp/utils/macros.hpp diff --git a/unittest/utils/model-generator.hpp b/unittest/cpp/utils/model-generator.hpp similarity index 100% rename from unittest/utils/model-generator.hpp rename to unittest/cpp/utils/model-generator.hpp diff --git a/unittest/value.cpp b/unittest/cpp/value.cpp similarity index 99% rename from unittest/value.cpp rename to unittest/cpp/value.cpp index 13f35b8cbe..5f0dcc0d00 100644 --- a/unittest/value.cpp +++ b/unittest/cpp/value.cpp @@ -15,6 +15,8 @@ * */ +#define BOOST_TEST_MODULE value + #include #include @@ -24,8 +26,6 @@ #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_000) { std::string filename = PINOCCHIO_MODEL_DIR + std::string("/simple_humanoid.urdf"); @@ -175,5 +175,3 @@ BOOST_AUTO_TEST_CASE(test_QVA) rnea(model, data, q, v, a); BOOST_CHECK(expected.isApprox(data.tau, 1e-7)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/vector.cpp b/unittest/cpp/vector.cpp similarity index 92% rename from unittest/vector.cpp rename to unittest/cpp/vector.cpp index 6ecf26a3d9..3bd6e23a6f 100644 --- a/unittest/vector.cpp +++ b/unittest/cpp/vector.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE vector + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_isNormalized) { @@ -36,5 +37,3 @@ BOOST_AUTO_TEST_CASE(test_isNormalized) BOOST_CHECK(!isNormalized(Vector(Vector::Zero(size)))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/version.cpp b/unittest/cpp/version.cpp similarity index 92% rename from unittest/version.cpp rename to unittest/cpp/version.cpp index 59e4a32907..ce8036900f 100644 --- a/unittest/version.cpp +++ b/unittest/cpp/version.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE version + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_version) { @@ -29,5 +30,3 @@ BOOST_AUTO_TEST_CASE(test_version) PINOCCHIO_MAJOR_VERSION, PINOCCHIO_MINOR_VERSION, PINOCCHIO_PATCH_VERSION + 1)); BOOST_CHECK(!checkVersionAtLeast(99, 0, 0)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/visitor.cpp b/unittest/cpp/visitor.cpp similarity index 99% rename from unittest/visitor.cpp rename to unittest/cpp/visitor.cpp index 97cea16568..34f8a71e57 100644 --- a/unittest/visitor.cpp +++ b/unittest/cpp/visitor.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE visitor + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/visitor.hpp" #include -#include #include +#include + namespace bf = boost::fusion; struct SimpleUnaryVisitor1 : public pinocchio::fusion::JointUnaryVisitorBase @@ -162,8 +165,6 @@ struct SimpleBinaryVisitor4 : public pinocchio::fusion::JointBinaryVisitorBase struct init; @@ -352,5 +353,3 @@ BOOST_AUTO_TEST_CASE(test_run_over_all_joints_binary_visitor) SimpleBinaryVisitor4::run(model.joints[i], model.joints[i], data.joints[i], data.joints[i]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/visualizer.cpp b/unittest/cpp/visualizer.cpp similarity index 94% rename from unittest/visualizer.cpp rename to unittest/cpp/visualizer.cpp index a6958da445..a7d6d383b4 100644 --- a/unittest/visualizer.cpp +++ b/unittest/cpp/visualizer.cpp @@ -1,3 +1,5 @@ +#define BOOST_TEST_MODULE visualizer + #include "pinocchio/visualizers/base-visualizer.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -5,8 +7,6 @@ using namespace pinocchio::visualizers; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - struct TestViz : BaseVisualizer { using BaseVisualizer::BaseVisualizer; @@ -45,5 +45,3 @@ BOOST_AUTO_TEST_CASE(viz_ctor_borrow_datas) } // no double free segfault } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/zero-cone.cpp b/unittest/cpp/zero-cone.cpp similarity index 94% rename from unittest/zero-cone.cpp rename to unittest/cpp/zero-cone.cpp index 3f1cd3102a..23708bdf27 100644 --- a/unittest/zero-cone.cpp +++ b/unittest/cpp/zero-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE zero_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -41,5 +42,3 @@ BOOST_AUTO_TEST_CASE(test_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/CMakeLists.txt b/unittest/cppad/CMakeLists.txt deleted file mode 100644 index 4f2cf8d41a..0000000000 --- a/unittest/cppad/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2021 INRIA -# - -# Automatic differentiation -macro(ADD_CPPAD_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) - add_pinocchio_unit_test(${name} CPPAD) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_dependencies(${PROJECT_NAME}-test-cpp-cppad ${TEST_NAME}) -endmacro() - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-test-cpp-cppad) - set_target_properties( - ${PROJECT_NAME}-test-cpp-cppad - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_cppad_unit_test(basic) - add_cppad_unit_test(spatial) - add_cppad_unit_test(joints) - add_cppad_unit_test(algorithms) - add_cppad_unit_test(derivatives) - add_cppad_unit_test(joint-configurations) -endif() diff --git a/unittest/cppadcg/CMakeLists.txt b/unittest/cppadcg/CMakeLists.txt deleted file mode 100644 index 3bd5ff193f..0000000000 --- a/unittest/cppadcg/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -macro(ADD_CPPADCG_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) - include_directories(SYSTEM ${cppadcodegen_INCLUDE_DIR}) - add_pinocchio_unit_test(${name} PACKAGES ${cppad_LIBRARY} ${CMAKE_DL_LIBS}) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_dependencies(${PROJECT_NAME}-test-cpp-cppadcg ${TEST_NAME}) - target_compile_definitions( - ${TEST_NAME} - PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) -endmacro() - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - if(BUILD_WITH_CODEGEN_SUPPORT) - add_custom_target(${PROJECT_NAME}-test-cpp-cppadcg) - set_target_properties( - ${PROJECT_NAME}-test-cpp-cppadcg - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_cppadcg_unit_test(basic) - if(BUILD_ADVANCED_TESTING) - add_cppadcg_unit_test(algorithms) - add_cppadcg_unit_test(joint-configurations) - add_cppadcg_unit_test(contact-dynamics) - endif() - endif() -endif() diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 30b710e3b1..f837710a78 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -1,63 +1,153 @@ # # Copyright (c) 2015-2025 CNRS INRIA # -include(${JRL_CMAKE_MODULES}/python-helpers.cmake) -set(${PROJECT_NAME}_PYTHON_TESTS - bindings - # Multibody - bindings_joint_composite - bindings_joints - bindings_model - bindings_data - bindings_geometry_model - bindings_liegroups - # Spatial - bindings_force - bindings_frame - bindings_inertia - bindings_spatial - bindings_motion - bindings_SE3 - explog - rpy - # Algo - bindings_com - bindings_kinematic_regressor - bindings_regressor - bindings_dynamics - bindings_kinematics - bindings_rnea - bindings_aba - bindings_joint_algorithms - # Solvers - bindings_pgs - bindings_admm - # Algo derivatives - bindings_kinematics_derivatives - bindings_frame_derivatives - bindings_forward_dynamics_derivatives - bindings_inverse_dynamics_derivatives - bindings_centroidal_dynamics_derivatives - bindings_com_velocity_derivatives - # Parsers - bindings_sample_models - bindings_mjcf - bindings_model_graph - # Others - robot_wrapper - utils - serialization - version - bindings_std_vector - bindings_std_map -) +function(pinocchio_add_python_test_or_example target_name file_name) + add_test( + NAME ${target_name} + COMMAND + $ + ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.py + ) + set_tests_properties( + ${target_name} + PROPERTIES + ENVIRONMENT + "PYTHONPATH=$/.." + LABELS "python" + ) + # TODO: Remove this once coal and example-robot-data also use jrl-v2. + # (Only meaningful when Pinocchio is built in-tree inside the + # simple-workspace superbuild; empty/no-op in a standalone build.) + string( + REPLACE ";" + ":" + _pythonpath + "${PROJECT_PYTHON_PACKAGES_IN_WORKSPACE}" + ) + set_tests_properties( + ${target_name} + PROPERTIES + ENVIRONMENT_MODIFICATION + "EXAMPLE_ROBOT_DATA_MODEL_DIR=set:${EXAMPLE_ROBOT_DATA_MODEL_DIR};PYTHONPATH=path_list_prepend:${_pythonpath}" + ) +endfunction() + +function(pinocchio_add_python_test name) + pinocchio_add_python_test_or_example("${PROJECT_NAME}-test-py-${name}" "${name}") +endfunction() + +pinocchio_add_python_test(bindings) +# Multibody +pinocchio_add_python_test(bindings_joint_composite) +pinocchio_add_python_test(bindings_joints) +pinocchio_add_python_test(bindings_model) +pinocchio_add_python_test(bindings_data) +pinocchio_add_python_test(bindings_geometry_model) +pinocchio_add_python_test(bindings_liegroups) +# Spatial +pinocchio_add_python_test(bindings_force) +pinocchio_add_python_test(bindings_frame) +pinocchio_add_python_test(bindings_inertia) +pinocchio_add_python_test(bindings_spatial) +pinocchio_add_python_test(bindings_motion) +pinocchio_add_python_test(bindings_SE3) +pinocchio_add_python_test(explog) +pinocchio_add_python_test(rpy) +# Algo +pinocchio_add_python_test(bindings_com) +pinocchio_add_python_test(bindings_kinematic_regressor) +pinocchio_add_python_test(bindings_regressor) +pinocchio_add_python_test(bindings_dynamics) +pinocchio_add_python_test(bindings_kinematics) +pinocchio_add_python_test(bindings_rnea) +pinocchio_add_python_test(bindings_aba) +pinocchio_add_python_test(bindings_joint_algorithms) +# Solvers +pinocchio_add_python_test(bindings_pgs) +pinocchio_add_python_test(bindings_admm) +# Algo derivatives +pinocchio_add_python_test(bindings_kinematics_derivatives) +pinocchio_add_python_test(bindings_frame_derivatives) +pinocchio_add_python_test(bindings_forward_dynamics_derivatives) +pinocchio_add_python_test(bindings_inverse_dynamics_derivatives) +pinocchio_add_python_test(bindings_centroidal_dynamics_derivatives) +pinocchio_add_python_test(bindings_com_velocity_derivatives) +# Parsers +pinocchio_add_python_test(bindings_sample_models) +pinocchio_add_python_test(bindings_mjcf) +pinocchio_add_python_test(bindings_model_graph) +# Others +pinocchio_add_python_test(robot_wrapper) +pinocchio_add_python_test(utils) +pinocchio_add_python_test(serialization) +pinocchio_add_python_test(version) +pinocchio_add_python_test(bindings_std_vector) +pinocchio_add_python_test(bindings_std_map) + +if(BUILD_WITH_COLLISION_SUPPORT) + pinocchio_add_python_test(bindings_geometry_object) + pinocchio_add_python_test(bindings_coal_transform) + pinocchio_add_python_test(bindings_constraints) + pinocchio_add_python_test(bindings_lcaba) +endif() + +if(urdfdom_FOUND) + pinocchio_add_python_test(bindings_urdf) + pinocchio_add_python_test(bindings_geometry_model_urdf) + pinocchio_add_python_test(bindings_contact_inverse_dynamics) + pinocchio_add_python_test(bindings_viser_visualizer) +endif(urdfdom_FOUND) + +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/serialization-data") + +# handle casadi +if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_test(bindings_casadi_main_algo) + pinocchio_add_python_test(bindings_casadi_explog) + add_dependencies(pinocchio-tests pinocchio_pywrap_casadi) +endif() + +# TODO BUILD_ADVANCED_TESTING + +# TODO(jrl-v2 migration): +# add +# - add_python_memorycheck_unit_test_v2 +# - add_windows_dll_path_to_test +if(MEMORYCHECK_COMMAND AND MEMORYCHECK_COMMAND MATCHES ".*valgrind$") + set(pinocchio_PYTHON_MEMORYCHECK_TESTS + bindings_build_geom_from_urdf_memorycheck + ) + + # foreach(TEST ${${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS}) + # set(TEST_NAME "${PROJECT_NAME}-test-py-memory-${TEST}") + # add_python_memorycheck_unit_test_v2( + # NAME + # ${TEST_NAME} + # SOURCE + # "unittest/python/${TEST}.py" + # SUPP + # "unittest/python/${TEST}.supp" + # MODULES + # "bindings/python" + # ) + # get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) + # set_tests_properties( + # "${TEST_NAME}" + # PROPERTIES + # ENVIRONMENT + # "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" + # ) + # add_windows_dll_path_to_test(${TEST_NAME}) + # endforeach() +else() + message(STATUS "Valgrind not found, memory checks are disabled") +endif() function(pinocchio_add_python_cpp_module name) set(target_name "test-ext-${name}") string(REPLACE "_" "-" target_name ${target_name}) string(REPLACE "-" "_" module_name ${target_name}) - set(source_file "${name}.cpp") set(options) set(oneValueArgs) set(multiValueArgs "PIN_TARGETS") @@ -68,146 +158,52 @@ function(pinocchio_add_python_cpp_module name) "${multiValueArgs}" ${ARGN} ) + if(BUILD_TESTING) set(_exclude) else() set(_exclude EXCLUDE_FROM_ALL) endif() - add_library(${target_name} MODULE ${_exclude} ${source_file}) - target_compile_definitions( + python_add_library( ${target_name} - PRIVATE EXT_MODULE_NAME=${module_name} + MODULE + ${_exclude} + WITH_SOABI + "${name}.cpp" ) - target_link_libraries( + target_compile_definitions( ${target_name} - PRIVATE pinocchio::pinocchio_default eigenpy::eigenpy + PRIVATE EXT_MODULE_NAME=${module_name} ) + target_link_libraries(${target_name} PRIVATE pinocchio eigenpy::eigenpy) foreach(_dep ${ARGS_PIN_TARGETS}) target_link_libraries(${target_name} PRIVATE ${_dep}) endforeach() set_target_properties( ${target_name} PROPERTIES - PREFIX "" - SUFFIX "${PYTHON_EXT_SUFFIX}" LIBRARY_OUTPUT_NAME ${module_name} RUNTIME_OUTPUT_NAME ${module_name} ) add_test( NAME ${target_name} - COMMAND ${PYTHON_EXECUTABLE} -c "import ${module_name}" + COMMAND $ -c "import ${module_name}" WORKING_DIRECTORY $ ) - set(PYTHONPATH) - compute_pythonpath(ENV_VARIABLES bindings/python) - set_tests_properties( - ${target_name} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - - add_dependencies(build_tests ${target_name}) - if(NOT BUILD_TESTING) - set_tests_properties( - ${target_name} - PROPERTIES DEPENDS ctest_build_tests - ) - endif() + add_dependencies(pinocchio-tests ${target_name}) endfunction() -function(pinocchio_add_lib_unit_test name) - set(TEST_NAME "${PROJECT_NAME}-test-py-${name}") - add_python_unit_test(${TEST_NAME} "unittest/python/${name}.py" "bindings/python" - "unittest/python" - ) - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${TEST_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${TEST_NAME}) -endfunction() - -if(BUILD_WITH_COLLISION_SUPPORT) - set(${PROJECT_NAME}_PYTHON_TESTS - ${${PROJECT_NAME}_PYTHON_TESTS} - bindings_geometry_object - bindings_coal_transform - bindings_constraints - bindings_lcaba - ) -endif() - -if(urdfdom_FOUND) - set(${PROJECT_NAME}_PYTHON_TESTS - ${${PROJECT_NAME}_PYTHON_TESTS} - bindings_urdf - bindings_geometry_model_urdf - bindings_contact_inverse_dynamics - bindings_viser_visualizer - ) -endif(urdfdom_FOUND) - -if(TARGET build_tests) - add_dependencies(build_tests ${PROJECT_NAME}-python) -endif() - -foreach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-${TEST}") - add_python_unit_test(${TEST_NAME} "unittest/python/${TEST}.py" "bindings/python") - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) +# TODO @jorisv: reenable these on windows when we normalize paths to lib/bin like on eigenpy +if(NOT WIN32 AND PINOCCHIO_BUILD_VISUALIZERS) + pinocchio_add_python_cpp_module(bindings_visualizer PIN_TARGETS pinocchio_visualizers) + pinocchio_add_python_test(bindings_visualizer) set_tests_properties( - "${TEST_NAME}" + "pinocchio-test-py-bindings_visualizer" PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${TEST_NAME}) -endforeach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) - -make_directory("${CMAKE_CURRENT_BINARY_DIR}/serialization-data") - -if(BUILD_WITH_CASADI_SUPPORT) - add_subdirectory(casadi) -endif(BUILD_WITH_CASADI_SUPPORT) - -# TODO BUILD_ADVANCED_TESTING -if(MEMORYCHECK_COMMAND AND MEMORYCHECK_COMMAND MATCHES ".*valgrind$") - set(${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS - bindings_build_geom_from_urdf_memorycheck + ENVIRONMENT_MODIFICATION + "PYTHONPATH=path_list_prepend:$" ) - - foreach(TEST ${${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-memory-${TEST}") - add_python_memorycheck_unit_test_v2( - NAME - ${TEST_NAME} - SOURCE - "unittest/python/${TEST}.py" - SUPP - "unittest/python/${TEST}.supp" - MODULES - "bindings/python" - ) - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${TEST_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${TEST_NAME}) - endforeach() -else() - message(STATUS "Valgrind not found, memory checks are disabled") -endif() - -# TODO @jorisv: reenable these on windows when we normalize paths to lib/bin like on eigenpy -if(NOT WIN32 AND PINOCCHIO_BUILD_VISUALIZERS) - pinocchio_add_python_cpp_module(bindings_visualizer PIN_TARGETS pinocchio::pinocchio_visualizers) - pinocchio_add_lib_unit_test(bindings_visualizer) add_subdirectory(pybind11) endif() diff --git a/unittest/python/casadi/bindings_explog.py b/unittest/python/bindings_casadi_explog.py similarity index 100% rename from unittest/python/casadi/bindings_explog.py rename to unittest/python/bindings_casadi_explog.py diff --git a/unittest/python/casadi/bindings_main_algo.py b/unittest/python/bindings_casadi_main_algo.py similarity index 100% rename from unittest/python/casadi/bindings_main_algo.py rename to unittest/python/bindings_casadi_main_algo.py diff --git a/unittest/python/casadi/CMakeLists.txt b/unittest/python/casadi/CMakeLists.txt deleted file mode 100644 index 9a4509abb2..0000000000 --- a/unittest/python/casadi/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) 2020-2021 INRIA -# - -set(${PROJECT_NAME}_PYTHON_CASADI_TESTS bindings_main_algo) - -foreach(test ${${PROJECT_NAME}_PYTHON_CASADI_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-casadi-${test}") - add_python_unit_test(${TEST_NAME} "unittest/python/casadi/${test}.py" "bindings/python") - add_windows_dll_path_to_test(${TEST_NAME}) -endforeach() diff --git a/unittest/python/pybind11/CMakeLists.txt b/unittest/python/pybind11/CMakeLists.txt index 8996eff1c7..f3e9f25895 100644 --- a/unittest/python/pybind11/CMakeLists.txt +++ b/unittest/python/pybind11/CMakeLists.txt @@ -17,19 +17,23 @@ endif() # # BUG: might not work out of the box on OSX with conda: # https://github.com/pybind/pybind11/issues/3081 -if(NOT BUILD_TESTING) - add_library(cpp2pybind11 MODULE EXCLUDE_FROM_ALL cpp2pybind11.cpp) +if(BUILD_TESTING) + set(_exclude) else() - add_library(cpp2pybind11 MODULE cpp2pybind11.cpp) + set(_exclude EXCLUDE_FROM_ALL) endif() -add_dependencies(build_tests cpp2pybind11) + +python_add_library(cpp2pybind11 MODULE ${_exclude} WITH_SOABI cpp2pybind11.cpp) +add_dependencies(pinocchio-tests cpp2pybind11) +add_dependencies(cpp2pybind11 pinocchio_pywrap_default) target_link_libraries( cpp2pybind11 - PRIVATE pinocchio_pywrap_default pybind11::module Eigen3::Eigen -) -set_target_properties( - cpp2pybind11 - PROPERTIES PREFIX "" SUFFIX ${PYTHON_EXT_SUFFIX} + PRIVATE + pinocchio_pywrap_headers + eigenpy::eigenpy + Boost::python + pybind11::module + Eigen3::Eigen ) if(CMAKE_CXX_STANDARD LESS 14) @@ -44,6 +48,10 @@ if(WIN32) target_compile_definitions(cpp2pybind11 PRIVATE -DNOMINMAX) endif(WIN32) -add_python_unit_test("test-py-cpp2pybind11" "unittest/python/pybind11/test-cpp2pybind11.py" - "bindings/python" "unittest/python/pybind11" +pinocchio_add_python_test(test-cpp2pybind11) +set_tests_properties( + "pinocchio-test-py-test-cpp2pybind11" + PROPERTIES + ENVIRONMENT_MODIFICATION + "PYTHONPATH=path_list_prepend:$" )