diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 623e4bafa017d4059939cc9db025106131615519..d90c68a317589123f8c0a0f1ad5af6d3b10a94c6 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -34,6 +34,7 @@ ADD_LIB_UNIT_TEST(geometry "eigen3") ADD_LIB_UNIT_TEST(complex "eigen3") ADD_LIB_UNIT_TEST(return_by_ref "eigen3") IF(NOT ${EIGEN3_VERSION} VERSION_LESS "3.2.0") + ADD_LIB_UNIT_TEST(eigen_ref "eigen3") ADD_LIB_UNIT_TEST(eigenpy_ref "eigen3") ENDIF() diff --git a/unittest/eigen_ref.cpp b/unittest/eigen_ref.cpp new file mode 100644 index 0000000000000000000000000000000000000000..32a972c195f29efc359ab75fe303b94358ea9282 --- /dev/null +++ b/unittest/eigen_ref.cpp @@ -0,0 +1,51 @@ +/* + * Copyright 2014-2019, CNRS + * Copyright 2018-2020, INRIA + */ + +#include "eigenpy/eigenpy.hpp" +#include <iostream> + +using namespace Eigen; +using namespace eigenpy; + +template<typename MatType> +void printMatrix(const Eigen::Ref<MatType> & mat) +{ + if(MatType::IsVectorAtCompileTime) + std::cout << "isVector" << std::endl; + std::cout << "size: cols " << mat.cols() << " rows " << mat.rows() << std::endl; + std::cout << mat << std::endl; +} + +template<typename VecType> +void printVector(const Eigen::Ref<VecType> & vec) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(VecType); + printMatrix(vec); +} + +template<typename MatType> +void setOnes(Eigen::Ref<MatType> mat) +{ + printMatrix(mat); + mat.setOnes(); + printMatrix(mat); +} + +BOOST_PYTHON_MODULE(eigen_ref) +{ + namespace bp = boost::python; + eigenpy::enableEigenPy(); + + bp::def("printMatrix", printMatrix<Vector3d>); + bp::def("printMatrix", printMatrix<VectorXd>); + bp::def("printMatrix", printMatrix<MatrixXd>); + + bp::def("printVector", printVector<VectorXd>); + bp::def("printRowVector", printVector<RowVectorXd>); + + bp::def("setOnes", setOnes<Vector3d>); + bp::def("setOnes", setOnes<VectorXd>); + bp::def("setOnes", setOnes<MatrixXd>); +}