diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
index 747401e2c28abdb796cff0dc0ccda2e592fb865d..17bf479fe818ee27c9e0997c626b4399b797b4ef 100644
--- a/unittest/CMakeLists.txt
+++ b/unittest/CMakeLists.txt
@@ -40,6 +40,7 @@ ENDIF()
 ADD_PYTHON_UNIT_TEST("py-matrix" "unittest/python/test_matrix.py" "unittest")
 ADD_PYTHON_UNIT_TEST("py-geometry" "unittest/python/test_geometry.py" "unittest")
 ADD_PYTHON_UNIT_TEST("py-complex" "unittest/python/test_complex.py" "unittest")
+ADD_PYTHON_UNIT_TEST("py-return-by-ref" "unittest/python/test_return_by_ref.py" "unittest")
 
 ADD_PYTHON_UNIT_TEST("py-switch" "unittest/python/test_switch.py" "python/eigenpy")
 SET_TESTS_PROPERTIES("py-switch" PROPERTIES DEPENDS ${PYWRAP})
diff --git a/unittest/python/test_return_by_ref.py b/unittest/python/test_return_by_ref.py
new file mode 100644
index 0000000000000000000000000000000000000000..969f84672335af20ec65b1d91cb64e26c17f1830
--- /dev/null
+++ b/unittest/python/test_return_by_ref.py
@@ -0,0 +1,34 @@
+from return_by_ref import Matrix, RowMatrix, Vector
+import numpy as np
+
+def test(mat):
+
+  m_ref = mat.ref()
+  m_ref.fill(0)
+  m_copy = mat.copy()
+  assert np.array_equal(m_ref,m_copy)
+
+  m_const_ref = mat.const_ref()
+  assert np.array_equal(m_const_ref,m_copy)
+  assert np.array_equal(m_const_ref,m_ref)
+
+  m_ref.fill(1)
+  assert not np.array_equal(m_ref,m_copy)
+  assert np.array_equal(m_const_ref,m_ref)
+
+  try:
+    m_const_ref.fill(2)
+    assert False
+  except:
+    assert True
+
+rows = 10
+cols = 30
+
+mat = Matrix(rows,cols)
+row_mat = RowMatrix(rows,cols)
+vec = Vector(rows,1)
+
+test(mat)
+test(row_mat)
+test(vec)