void test_product_trsolve() { for(int i = 0; i < g_repeat ; i++) { // matrices CALL_SUBTEST_1((trsolve<float,Dynamic,Dynamic>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE),internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); CALL_SUBTEST_2((trsolve<double,Dynamic,Dynamic>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE),internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); CALL_SUBTEST_3((trsolve<std::complex<float>,Dynamic,Dynamic>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE/2),internal::random<int>(1,EIGEN_TEST_MAX_SIZE/2)))); CALL_SUBTEST_4((trsolve<std::complex<double>,Dynamic,Dynamic>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE/2),internal::random<int>(1,EIGEN_TEST_MAX_SIZE/2)))); // vectors CALL_SUBTEST_5((trsolve<float,Dynamic,1>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); CALL_SUBTEST_6((trsolve<double,Dynamic,1>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); CALL_SUBTEST_7((trsolve<std::complex<float>,Dynamic,1>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); CALL_SUBTEST_8((trsolve<std::complex<double>,Dynamic,1>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE)))); // meta-unrollers CALL_SUBTEST_9((trsolve<float,4,1>())); CALL_SUBTEST_10((trsolve<double,4,1>())); CALL_SUBTEST_11((trsolve<std::complex<float>,4,1>())); CALL_SUBTEST_12((trsolve<float,1,1>())); CALL_SUBTEST_13((trsolve<float,1,2>())); CALL_SUBTEST_14((trsolve<float,3,1>())); } }
void test_eigensolver_selfadjoint() { int s = 0; for(int i = 0; i < g_repeat; i++) { // trivial test for 1x1 matrices: CALL_SUBTEST_1( selfadjointeigensolver(Matrix<float, 1, 1>())); CALL_SUBTEST_1( selfadjointeigensolver(Matrix<double, 1, 1>())); // very important to test 3x3 and 2x2 matrices since we provide special paths for them CALL_SUBTEST_12( selfadjointeigensolver(Matrix2f()) ); CALL_SUBTEST_12( selfadjointeigensolver(Matrix2d()) ); CALL_SUBTEST_13( selfadjointeigensolver(Matrix3f()) ); CALL_SUBTEST_13( selfadjointeigensolver(Matrix3d()) ); CALL_SUBTEST_2( selfadjointeigensolver(Matrix4d()) ); s = internal::random<int>(1,EIGEN_TEST_MAX_SIZE/4); CALL_SUBTEST_3( selfadjointeigensolver(MatrixXf(s,s)) ); CALL_SUBTEST_4( selfadjointeigensolver(MatrixXd(s,s)) ); CALL_SUBTEST_5( selfadjointeigensolver(MatrixXcd(s,s)) ); CALL_SUBTEST_9( selfadjointeigensolver(Matrix<std::complex<double>,Dynamic,Dynamic,RowMajor>(s,s)) ); TEST_SET_BUT_UNUSED_VARIABLE(s) // some trivial but implementation-wise tricky cases CALL_SUBTEST_4( selfadjointeigensolver(MatrixXd(1,1)) ); CALL_SUBTEST_4( selfadjointeigensolver(MatrixXd(2,2)) ); CALL_SUBTEST_6( selfadjointeigensolver(Matrix<double,1,1>()) ); CALL_SUBTEST_7( selfadjointeigensolver(Matrix<double,2,2>()) ); } CALL_SUBTEST_13( bug_854() ); CALL_SUBTEST_13( bug_1014() ); // Test problem size constructors s = internal::random<int>(1,EIGEN_TEST_MAX_SIZE/4); CALL_SUBTEST_8(SelfAdjointEigenSolver<MatrixXf> tmp1(s)); CALL_SUBTEST_8(Tridiagonalization<MatrixXf> tmp2(s)); TEST_SET_BUT_UNUSED_VARIABLE(s) }
// call the tests void test_bdcsvd() { // test of Dynamic defined Matrix (42, 42) of float CALL_SUBTEST_11(( bdcsvd_verify_assert<Matrix<float,Dynamic,Dynamic> > (Matrix<float,Dynamic,Dynamic>(42,42)) )); CALL_SUBTEST_11(( compare_bdc_jacobi<Matrix<float,Dynamic,Dynamic> > (Matrix<float,Dynamic,Dynamic>(42,42), 0) )); CALL_SUBTEST_11(( bdcsvd<Matrix<float,Dynamic,Dynamic> > (Matrix<float,Dynamic,Dynamic>(42,42)) )); // test of Dynamic defined Matrix (50, 50) of double CALL_SUBTEST_13(( bdcsvd_verify_assert<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(50,50)) )); CALL_SUBTEST_13(( compare_bdc_jacobi<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(50,50), 0) )); CALL_SUBTEST_13(( bdcsvd<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(50, 50)) )); // test of Dynamic defined Matrix (22, 22) of complex double CALL_SUBTEST_14(( bdcsvd_verify_assert<Matrix<std::complex<double>,Dynamic,Dynamic> > (Matrix<std::complex<double>,Dynamic,Dynamic>(22,22)) )); CALL_SUBTEST_14(( compare_bdc_jacobi<Matrix<std::complex<double>,Dynamic,Dynamic> > (Matrix<std::complex<double>, Dynamic, Dynamic> (22,22), 0) )); CALL_SUBTEST_14(( bdcsvd<Matrix<std::complex<double>,Dynamic,Dynamic> > (Matrix<std::complex<double>,Dynamic,Dynamic>(22, 22)) )); // test of Dynamic defined Matrix (10, 10) of int //CALL_SUBTEST_15(( bdcsvd_verify_assert<Matrix<int,Dynamic,Dynamic> > // (Matrix<int,Dynamic,Dynamic>(10,10)) )); //CALL_SUBTEST_15(( compare_bdc_jacobi<Matrix<int,Dynamic,Dynamic> > // (Matrix<int,Dynamic,Dynamic>(10,10), 0) )); //CALL_SUBTEST_15(( bdcsvd<Matrix<int,Dynamic,Dynamic> > // (Matrix<int,Dynamic,Dynamic>(10, 10)) )); // test of Dynamic defined Matrix (8, 6) of double CALL_SUBTEST_16(( bdcsvd_verify_assert<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(8,6)) )); CALL_SUBTEST_16(( compare_bdc_jacobi<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(8, 6), 0) )); CALL_SUBTEST_16(( bdcsvd<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(8, 6)) )); // test of Dynamic defined Matrix (36, 12) of float CALL_SUBTEST_17(( compare_bdc_jacobi<Matrix<float,Dynamic,Dynamic> > (Matrix<float,Dynamic,Dynamic>(36, 12), 0) )); CALL_SUBTEST_17(( bdcsvd<Matrix<float,Dynamic,Dynamic> > (Matrix<float,Dynamic,Dynamic>(36, 12)) )); // test of Dynamic defined Matrix (5, 8) of double CALL_SUBTEST_18(( compare_bdc_jacobi<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(5, 8), 0) )); CALL_SUBTEST_18(( bdcsvd<Matrix<double,Dynamic,Dynamic> > (Matrix<double,Dynamic,Dynamic>(5, 8)) )); // non regression tests CALL_SUBTEST_3(( bdcsvd_verify_assert(Matrix3f()) )); CALL_SUBTEST_4(( bdcsvd_verify_assert(Matrix4d()) )); CALL_SUBTEST_7(( bdcsvd_verify_assert(MatrixXf(10,12)) )); CALL_SUBTEST_8(( bdcsvd_verify_assert(MatrixXcd(7,5)) )); // SUBTESTS 1 and 2 on specifics matrix for(int i = 0; i < g_repeat; i++) { Matrix2cd m; m << 0, 1, 0, 1; CALL_SUBTEST_1(( bdcsvd(m, false) )); m << 1, 0, 1, 0; CALL_SUBTEST_1(( bdcsvd(m, false) )); Matrix2d n; n << 0, 0, 0, 0; CALL_SUBTEST_2(( bdcsvd(n, false) )); n << 0, 0, 0, 1; CALL_SUBTEST_2(( bdcsvd(n, false) )); // Statics matrix don't work with BDSVD yet // bdc algo on a random 3x3 float matrix // CALL_SUBTEST_3(( bdcsvd<Matrix3f>() )); // bdc algo on a random 4x4 double matrix // CALL_SUBTEST_4(( bdcsvd<Matrix4d>() )); // bdc algo on a random 3x5 float matrix // CALL_SUBTEST_5(( bdcsvd<Matrix<float,3,5> >() )); int r = internal::random<int>(1, 30), c = internal::random<int>(1, 30); CALL_SUBTEST_7(( bdcsvd<MatrixXf>(MatrixXf(r,c)) )); CALL_SUBTEST_8(( bdcsvd<MatrixXcd>(MatrixXcd(r,c)) )); (void) r; (void) c; // Test on inf/nan matrix CALL_SUBTEST_7( bdcsvd_inf_nan<MatrixXf>() ); } CALL_SUBTEST_7(( bdcsvd<MatrixXf>(MatrixXf(internal::random<int>(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/2), internal::random<int>(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/2))) )); CALL_SUBTEST_8(( bdcsvd<MatrixXcd>(MatrixXcd(internal::random<int>(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/3), internal::random<int>(EIGEN_TEST_MAX_SIZE/4, EIGEN_TEST_MAX_SIZE/3))) )); // Test problem size constructors CALL_SUBTEST_7( BDCSVD<MatrixXf>(10,10) ); } // end test_bdcsvd