TEST(Matrices,fromMatlabStringFormat) { const char* mat1 = "[1 2 3;-3 -6 -5]"; const double vals1[] = {1,2,3,-3,-6,-5}; const char* mat2 = " [ -8.2 9.232 ; -2e+2 +6 ; 1.000 7 ] "; // With tabs and spaces... const double vals2[] = {-8.2, 9.232, -2e+2, +6, 1.000 ,7}; const char* mat3 = "[9]"; const char* mat4 = "[1 2 3 4 5 6 7 9 10 ; 1 2 3 4 5 6 7 8 9 10 11]"; // An invalid matrix const char* mat5 = "[ ]"; // Empty const char* mat6 = "[ -405.200 42.232 ; 1219.600 -98.696 ]"; // M1 * M2 const char* mat13 = "[9 8 7]"; const char* mat31 = "[9; 8; 7]"; CMatrixDouble M1,M2,M3, M4, M5, M6; if (! M1.fromMatlabStringFormat(mat1) || (CMatrixFixedNumeric<double,2,3>(vals1)-M1).array().abs().sum() > 1e-4 ) GTEST_FAIL() << mat1; { CMatrixFixedNumeric<double,2,3> M1b; if (! M1b.fromMatlabStringFormat(mat1) || (CMatrixFixedNumeric<double,2,3>(vals1)-M1b).array().abs().sum() > 1e-4 ) GTEST_FAIL() << mat1; } if (! M2.fromMatlabStringFormat(mat2) || M2.cols()!=2 || M2.rows()!=3 || (CMatrixFixedNumeric<double,3,2>(vals2)-M2).array().abs().sum() > 1e-4 ) GTEST_FAIL() << mat2; { CMatrixFixedNumeric<double,3,2> M2b; if (! M2b.fromMatlabStringFormat(mat2) || (CMatrixFixedNumeric<double,3,2>(vals2)-M2b).array().abs().sum() > 1e-4 ) GTEST_FAIL() << mat2; } if (! M3.fromMatlabStringFormat(mat3) ) GTEST_FAIL() << mat3; { CVectorDouble m; if (! m.fromMatlabStringFormat(mat3) || m.size()!=1 ) GTEST_FAIL() << "CVectorDouble:" << mat3; } { CArrayDouble<1> m; if (! m.fromMatlabStringFormat(mat3) ) GTEST_FAIL() << "CArrayDouble<1>:" << mat3; } { CVectorDouble m; if (! m.fromMatlabStringFormat(mat31) || m.size()!=3 ) GTEST_FAIL() << "CVectorDouble:" << mat31; } { CArrayDouble<3> m; if (! m.fromMatlabStringFormat(mat31) ) GTEST_FAIL() << "CArrayDouble<3>:" << mat31; } { Eigen::Matrix<double,1,3> m; if (! m.fromMatlabStringFormat(mat13) ) GTEST_FAIL() << "Matrix<double,1,3>:" << mat13; } { Eigen::Matrix<double,1,Eigen::Dynamic> m; if (! m.fromMatlabStringFormat(mat13) || m.size()!=3 ) GTEST_FAIL() << "Matrix<double,1,Dynamic>:" << mat13; } // This one MUST BE detected as WRONG: if ( M4.fromMatlabStringFormat(mat4, NULL /*dont dump errors to cerr*/) ) GTEST_FAIL() << mat4; if (! M5.fromMatlabStringFormat(mat5) || size(M5,1)!=0 || size(M5,2)!=0 ) GTEST_FAIL() << mat5; if (! M6.fromMatlabStringFormat(mat6) ) GTEST_FAIL() << mat6; // Check correct values loaded: CMatrixDouble RES = M1*M2; EXPECT_NEAR(0,(M6 - M1*M2).array().square().sum(), 1e-3); }