Bug #1796: Make matrix squareroot usable for Map and Ref types

This commit is contained in:
Christoph Hertzberg
2019-12-20 18:10:22 +01:00
parent d86544d654
commit 1e9664b147
2 changed files with 48 additions and 8 deletions

View File

@@ -177,6 +177,39 @@ void testMatrixType(const MatrixType& m)
}
}
template<typename MatrixType>
void testMapRef(const MatrixType& A)
{
// Test if passing Ref and Map objects is possible
// (Regression test for Bug #1796)
Index size = A.rows();
MatrixType X; X.setRandom(size, size);
MatrixType Y(size,size);
Ref< MatrixType> R(Y);
Ref<const MatrixType> Rc(X);
Map< MatrixType> M(Y.data(), size, size);
Map<const MatrixType> Mc(X.data(), size, size);
X = X*X; // make sure sqrt is possible
Y = X.sqrt();
R = Rc.sqrt();
M = Mc.sqrt();
Y = X.exp();
R = Rc.exp();
M = Mc.exp();
X = Y; // make sure log is possible
Y = X.log();
R = Rc.log();
M = Mc.log();
Y = X.cos() + Rc.cos() + Mc.cos();
Y = X.sin() + Rc.sin() + Mc.sin();
Y = X.cosh() + Rc.cosh() + Mc.cosh();
Y = X.sinh() + Rc.sinh() + Mc.sinh();
}
EIGEN_DECLARE_TEST(matrix_function)
{
CALL_SUBTEST_1(testMatrixType(Matrix<float,1,1>()));
@@ -186,4 +219,9 @@ EIGEN_DECLARE_TEST(matrix_function)
CALL_SUBTEST_5(testMatrixType(Matrix<double,5,5,RowMajor>()));
CALL_SUBTEST_6(testMatrixType(Matrix4cd()));
CALL_SUBTEST_7(testMatrixType(MatrixXd(13,13)));
CALL_SUBTEST_1(testMapRef(Matrix<float,1,1>()));
CALL_SUBTEST_2(testMapRef(Matrix3cf()));
CALL_SUBTEST_3(testMapRef(MatrixXf(8,8)));
CALL_SUBTEST_7(testMapRef(MatrixXd(13,13)));
}