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>);
+}