Fix C++20 enum-enum conversion warnings libeigen/eigen!2439 Closes #2120 and #3070
diff --git a/CMakeLists.txt b/CMakeLists.txt index 57edb5d..601e45f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -407,6 +407,8 @@ ei_add_cxx_compiler_flag("-Wshorten-64-to-32") ei_add_cxx_compiler_flag("-Wlogical-op") ei_add_cxx_compiler_flag("-Wenum-conversion") + ei_add_cxx_compiler_flag("-Werror=deprecated-anon-enum-enum-conversion") + ei_add_cxx_compiler_flag("-Werror=deprecated-enum-enum-conversion") ei_add_cxx_compiler_flag("-Wc++11-extensions") ei_add_cxx_compiler_flag("-Wdouble-promotion") # ei_add_cxx_compiler_flag("-Wconversion")
diff --git a/Eigen/src/Core/util/Constants.h b/Eigen/src/Core/util/Constants.h index f7e8b70..205bb9a 100644 --- a/Eigen/src/Core/util/Constants.h +++ b/Eigen/src/Core/util/Constants.h
@@ -429,6 +429,15 @@ DisableQRDecomposition = NoQRPreconditioner }; +// JacobiSVD and BDCSVD combine QR preconditioner flags with decomposition flags in a single template bitmask. +constexpr int operator|(QRPreconditioners qr_preconditioner, DecompositionOptions decomposition_option) { + return static_cast<int>(qr_preconditioner) | static_cast<int>(decomposition_option); +} + +constexpr int operator|(DecompositionOptions decomposition_option, QRPreconditioners qr_preconditioner) { + return static_cast<int>(decomposition_option) | static_cast<int>(qr_preconditioner); +} + #ifdef Success #error The preprocessor symbol 'Success' is defined, possibly by the X11 header file X.h #endif
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index 88b6b30..987cc63 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h
@@ -198,7 +198,7 @@ Options = Options_, Dim = Dim_, ///< space dimension in which the transformation holds HDim = Dim_ + 1, ///< size of a respective homogeneous vector - Rows = int(Mode) == (AffineCompact) ? Dim : HDim + Rows = int(Mode) == int(AffineCompact) ? Dim : HDim }; /** the scalar type of the coefficients */ typedef Scalar_ Scalar;
diff --git a/Eigen/src/SVD/BDCSVD.h b/Eigen/src/SVD/BDCSVD.h index a5e309c..35c0a92 100644 --- a/Eigen/src/SVD/BDCSVD.h +++ b/Eigen/src/SVD/BDCSVD.h
@@ -87,8 +87,8 @@ typedef typename Base::Index Index; enum { Options = Options_, - QRDecomposition = Options & internal::QRPreconditionerBits, - ComputationOptions = Options & internal::ComputationOptionsBits, + QRDecomposition = internal::get_qr_preconditioner(Options), + ComputationOptions = internal::get_computation_options(Options), RowsAtCompileTime = Base::RowsAtCompileTime, ColsAtCompileTime = Base::ColsAtCompileTime, DiagSizeAtCompileTime = Base::DiagSizeAtCompileTime,
diff --git a/ci/build.linux.gitlab-ci.yml b/ci/build.linux.gitlab-ci.yml index b6822a5..e91ed0b 100644 --- a/ci/build.linux.gitlab-ci.yml +++ b/ci/build.linux.gitlab-ci.yml
@@ -114,7 +114,7 @@ EIGEN_CI_ADDITIONAL_ARGS: > -DEIGEN_TEST_CUSTOM_CXX_FLAGS=-mfma;-mavx512dq;-DEIGEN_VECTORIZE_GENERIC=1 -# Nightly full test suite in C++20 mode. +# Nightly and all-tests full test suite in C++20 mode. build:linux:cross:x86-64:clang-19:cxx20:nightly: extends: .build:linux:cross:x86-64 variables: @@ -122,7 +122,8 @@ EIGEN_CI_C_COMPILER: clang-19 EIGEN_CI_CXX_COMPILER: clang++-19 EIGEN_CI_CROSS_INSTALL: g++-14-x86-64-linux-gnu clang-19 - EIGEN_CI_ADDITIONAL_ARGS: -DCMAKE_CXX_STANDARD=20 + EIGEN_CI_ADDITIONAL_ARGS: >- + -DCMAKE_CXX_STANDARD=20 rules: - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
diff --git a/test/bdcsvd.cpp b/test/bdcsvd.cpp index 7ac28b0..3a76da8 100644 --- a/test/bdcsvd.cpp +++ b/test/bdcsvd.cpp
@@ -174,6 +174,17 @@ } } +void bdcsvd_mixed_option_enum_regression() { + using NoQrFullSVD = BDCSVD<MatrixXd, NoQRPreconditioner | ComputeFullU | ComputeFullV>; + using ReversedMixedSVD = BDCSVD<MatrixXd, ComputeThinU | DisableQRDecomposition | ComputeFullV>; + + STATIC_CHECK((int(NoQrFullSVD::QRDecomposition) == int(NoQRPreconditioner))); + STATIC_CHECK((NoQrFullSVD::ComputationOptions == (ComputeFullU | ComputeFullV))); + + STATIC_CHECK((int(ReversedMixedSVD::QRDecomposition) == int(DisableQRDecomposition))); + STATIC_CHECK((ReversedMixedSVD::ComputationOptions == (ComputeThinU | ComputeFullV))); +} + void bdcsvd_perturbcol0_missing_predecessor() { typedef Eigen::internal::bdcsvd_impl<double> Impl; @@ -202,11 +213,12 @@ CALL_SUBTEST_3((bdcsvd_verify_assert<Matrix<float, 10, 7>>())); CALL_SUBTEST_4((bdcsvd_verify_assert<Matrix<float, 7, 10>>())); CALL_SUBTEST_5((bdcsvd_verify_assert<Matrix<std::complex<double>, 6, 9>>())); + CALL_SUBTEST_6((bdcsvd_mixed_option_enum_regression())); - CALL_SUBTEST_6((svd_all_trivial_2x2(bdcsvd_thin_options<Matrix2cd>))); - CALL_SUBTEST_7((svd_all_trivial_2x2(bdcsvd_full_options<Matrix2cd>))); - CALL_SUBTEST_8((svd_all_trivial_2x2(bdcsvd_thin_options<Matrix2d>))); - CALL_SUBTEST_9((svd_all_trivial_2x2(bdcsvd_full_options<Matrix2d>))); + CALL_SUBTEST_7((svd_all_trivial_2x2(bdcsvd_thin_options<Matrix2cd>))); + CALL_SUBTEST_8((svd_all_trivial_2x2(bdcsvd_full_options<Matrix2cd>))); + CALL_SUBTEST_9((svd_all_trivial_2x2(bdcsvd_thin_options<Matrix2d>))); + CALL_SUBTEST_10((svd_all_trivial_2x2(bdcsvd_full_options<Matrix2d>))); for (int i = 0; i < g_repeat; i++) { int r = internal::random<int>(1, EIGEN_TEST_MAX_SIZE / 2), c = internal::random<int>(1, EIGEN_TEST_MAX_SIZE / 2); @@ -214,80 +226,80 @@ TEST_SET_BUT_UNUSED_VARIABLE(r); TEST_SET_BUT_UNUSED_VARIABLE(c); - CALL_SUBTEST_10((compare_bdc_jacobi<MatrixXf>(MatrixXf(r, c)))); - CALL_SUBTEST_11((compare_bdc_jacobi<MatrixXd>(MatrixXd(r, c)))); - CALL_SUBTEST_12((compare_bdc_jacobi<MatrixXcd>(MatrixXcd(r, c)))); + CALL_SUBTEST_11((compare_bdc_jacobi<MatrixXf>(MatrixXf(r, c)))); + CALL_SUBTEST_12((compare_bdc_jacobi<MatrixXd>(MatrixXd(r, c)))); + CALL_SUBTEST_13((compare_bdc_jacobi<MatrixXcd>(MatrixXcd(r, c)))); // Test on inf/nan matrix - CALL_SUBTEST_13((svd_inf_nan<MatrixXf>())); - CALL_SUBTEST_14((svd_inf_nan<MatrixXd>())); + CALL_SUBTEST_14((svd_inf_nan<MatrixXf>())); + CALL_SUBTEST_15((svd_inf_nan<MatrixXd>())); // Verify some computations using all combinations of the Options template parameter. - CALL_SUBTEST_15((bdcsvd_thin_options<Matrix3f>())); - CALL_SUBTEST_16((bdcsvd_full_options<Matrix3f>())); - CALL_SUBTEST_17((bdcsvd_thin_options<Matrix<float, 2, 3>>())); - CALL_SUBTEST_18((bdcsvd_full_options<Matrix<float, 2, 3>>())); - CALL_SUBTEST_19((bdcsvd_thin_options<MatrixXd>(MatrixXd(20, 17)))); - CALL_SUBTEST_20((bdcsvd_full_options<MatrixXd>(MatrixXd(20, 17)))); - CALL_SUBTEST_21((bdcsvd_thin_options<MatrixXd>(MatrixXd(17, 20)))); - CALL_SUBTEST_22((bdcsvd_full_options<MatrixXd>(MatrixXd(17, 20)))); - CALL_SUBTEST_23((bdcsvd_thin_options<Matrix<double, Dynamic, 15>>(Matrix<double, Dynamic, 15>(r, 15)))); - CALL_SUBTEST_24((bdcsvd_full_options<Matrix<double, Dynamic, 15>>(Matrix<double, Dynamic, 15>(r, 15)))); - CALL_SUBTEST_25((bdcsvd_thin_options<Matrix<double, 13, Dynamic>>(Matrix<double, 13, Dynamic>(13, c)))); - CALL_SUBTEST_26((bdcsvd_full_options<Matrix<double, 13, Dynamic>>(Matrix<double, 13, Dynamic>(13, c)))); - CALL_SUBTEST_27((bdcsvd_thin_options<MatrixXf>(MatrixXf(r, c)))); - CALL_SUBTEST_28((bdcsvd_full_options<MatrixXf>(MatrixXf(r, c)))); - CALL_SUBTEST_29((bdcsvd_thin_options<MatrixXcd>(MatrixXcd(r, c)))); - CALL_SUBTEST_30((bdcsvd_full_options<MatrixXcd>(MatrixXcd(r, c)))); - CALL_SUBTEST_31((bdcsvd_thin_options<MatrixXd>(MatrixXd(r, c)))); - CALL_SUBTEST_32((bdcsvd_full_options<MatrixXd>(MatrixXd(r, c)))); - CALL_SUBTEST_33((bdcsvd_thin_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( + CALL_SUBTEST_16((bdcsvd_thin_options<Matrix3f>())); + CALL_SUBTEST_17((bdcsvd_full_options<Matrix3f>())); + CALL_SUBTEST_18((bdcsvd_thin_options<Matrix<float, 2, 3>>())); + CALL_SUBTEST_19((bdcsvd_full_options<Matrix<float, 2, 3>>())); + CALL_SUBTEST_20((bdcsvd_thin_options<MatrixXd>(MatrixXd(20, 17)))); + CALL_SUBTEST_21((bdcsvd_full_options<MatrixXd>(MatrixXd(20, 17)))); + CALL_SUBTEST_22((bdcsvd_thin_options<MatrixXd>(MatrixXd(17, 20)))); + CALL_SUBTEST_23((bdcsvd_full_options<MatrixXd>(MatrixXd(17, 20)))); + CALL_SUBTEST_24((bdcsvd_thin_options<Matrix<double, Dynamic, 15>>(Matrix<double, Dynamic, 15>(r, 15)))); + CALL_SUBTEST_25((bdcsvd_full_options<Matrix<double, Dynamic, 15>>(Matrix<double, Dynamic, 15>(r, 15)))); + CALL_SUBTEST_26((bdcsvd_thin_options<Matrix<double, 13, Dynamic>>(Matrix<double, 13, Dynamic>(13, c)))); + CALL_SUBTEST_27((bdcsvd_full_options<Matrix<double, 13, Dynamic>>(Matrix<double, 13, Dynamic>(13, c)))); + CALL_SUBTEST_28((bdcsvd_thin_options<MatrixXf>(MatrixXf(r, c)))); + CALL_SUBTEST_29((bdcsvd_full_options<MatrixXf>(MatrixXf(r, c)))); + CALL_SUBTEST_30((bdcsvd_thin_options<MatrixXcd>(MatrixXcd(r, c)))); + CALL_SUBTEST_31((bdcsvd_full_options<MatrixXcd>(MatrixXcd(r, c)))); + CALL_SUBTEST_32((bdcsvd_thin_options<MatrixXd>(MatrixXd(r, c)))); + CALL_SUBTEST_33((bdcsvd_full_options<MatrixXd>(MatrixXd(r, c)))); + CALL_SUBTEST_34((bdcsvd_thin_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( Matrix<double, Dynamic, Dynamic, RowMajor>(20, 27)))); - CALL_SUBTEST_34((bdcsvd_full_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( + CALL_SUBTEST_35((bdcsvd_full_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( Matrix<double, Dynamic, Dynamic, RowMajor>(20, 27)))); - CALL_SUBTEST_35((bdcsvd_thin_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( + CALL_SUBTEST_36((bdcsvd_thin_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( Matrix<double, Dynamic, Dynamic, RowMajor>(27, 20)))); - CALL_SUBTEST_36((bdcsvd_full_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( + CALL_SUBTEST_37((bdcsvd_full_options<Matrix<double, Dynamic, Dynamic, RowMajor>>( Matrix<double, Dynamic, Dynamic, RowMajor>(27, 20)))); - CALL_SUBTEST_37(( + CALL_SUBTEST_38(( svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, ColMajor, 20, 35>, ColPivHouseholderQRPreconditioner>( r, c))); - CALL_SUBTEST_38( + CALL_SUBTEST_39( (svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, ColMajor, 35, 20>, HouseholderQRPreconditioner>(r, c))); - CALL_SUBTEST_39(( + CALL_SUBTEST_40(( svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, RowMajor, 20, 35>, ColPivHouseholderQRPreconditioner>( r, c))); - CALL_SUBTEST_40( + CALL_SUBTEST_41( (svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, RowMajor, 35, 20>, HouseholderQRPreconditioner>(r, c))); } // test matrixbase method - CALL_SUBTEST_41((bdcsvd_method<Matrix2cd>())); - CALL_SUBTEST_42((bdcsvd_method<Matrix3f>())); + CALL_SUBTEST_42((bdcsvd_method<Matrix2cd>())); + CALL_SUBTEST_43((bdcsvd_method<Matrix3f>())); // Test problem size constructors - CALL_SUBTEST_43(BDCSVD<MatrixXf>(10, 10)); + CALL_SUBTEST_44(BDCSVD<MatrixXf>(10, 10)); // Check that preallocation avoids subsequent mallocs // Disabled because not supported by BDCSVD // CALL_SUBTEST_9( svd_preallocate<void>() ); - CALL_SUBTEST_44(svd_underoverflow<void>()); + CALL_SUBTEST_45(svd_underoverflow<void>()); // Without total deflation issues. - CALL_SUBTEST_45((compare_bdc_jacobi_instance(true))); - CALL_SUBTEST_46((compare_bdc_jacobi_instance(false))); + CALL_SUBTEST_46((compare_bdc_jacobi_instance(true))); + CALL_SUBTEST_47((compare_bdc_jacobi_instance(false))); // With total deflation issues before, when it shouldn't be triggered. - CALL_SUBTEST_47((compare_bdc_jacobi_instance(true, 3))); - CALL_SUBTEST_48((compare_bdc_jacobi_instance(false, 3))); + CALL_SUBTEST_48((compare_bdc_jacobi_instance(true, 3))); + CALL_SUBTEST_49((compare_bdc_jacobi_instance(false, 3))); // Convergence for large constant matrix (https://gitlab.com/libeigen/eigen/-/issues/2491) - CALL_SUBTEST_49(bdcsvd_check_convergence<MatrixXf>(MatrixXf::Constant(500, 500, 1))); + CALL_SUBTEST_50(bdcsvd_check_convergence<MatrixXf>(MatrixXf::Constant(500, 500, 1))); // Bidiagonal SVD hard test cases - CALL_SUBTEST_50((bdcsvd_bidiagonal_hard_cases<float>())); - CALL_SUBTEST_51((bdcsvd_bidiagonal_hard_cases<double>())); - CALL_SUBTEST_52((bdcsvd_perturbcol0_missing_predecessor())); + CALL_SUBTEST_51((bdcsvd_bidiagonal_hard_cases<float>())); + CALL_SUBTEST_52((bdcsvd_bidiagonal_hard_cases<double>())); + CALL_SUBTEST_53((bdcsvd_perturbcol0_missing_predecessor())); }
diff --git a/test/jacobisvd.cpp b/test/jacobisvd.cpp index 6437fca..03bb095 100644 --- a/test/jacobisvd.cpp +++ b/test/jacobisvd.cpp
@@ -123,20 +123,38 @@ EIGEN_UNUSED_VARIABLE(c); } +void jacobisvd_mixed_option_enum_regression() { + using NoQrFullSVD = JacobiSVD<MatrixXd, NoQRPreconditioner | ComputeFullU | ComputeFullV>; + using ReversedMixedSVD = JacobiSVD<MatrixXd, ComputeThinU | HouseholderQRPreconditioner | ComputeFullV>; + + STATIC_CHECK((int(NoQrFullSVD::QRPreconditioner) == int(NoQRPreconditioner))); + STATIC_CHECK(((int(NoQrFullSVD::Options) & ComputeFullU) != 0)); + STATIC_CHECK(((int(NoQrFullSVD::Options) & ComputeFullV) != 0)); + STATIC_CHECK(((int(NoQrFullSVD::Options) & ComputeThinU) == 0)); + STATIC_CHECK(((int(NoQrFullSVD::Options) & ComputeThinV) == 0)); + + STATIC_CHECK((int(ReversedMixedSVD::QRPreconditioner) == int(HouseholderQRPreconditioner))); + STATIC_CHECK(((int(ReversedMixedSVD::Options) & ComputeThinU) != 0)); + STATIC_CHECK(((int(ReversedMixedSVD::Options) & ComputeFullV) != 0)); + STATIC_CHECK(((int(ReversedMixedSVD::Options) & ComputeFullU) == 0)); + STATIC_CHECK(((int(ReversedMixedSVD::Options) & ComputeThinV) == 0)); +} + EIGEN_DECLARE_TEST(jacobisvd) { CALL_SUBTEST_1((jacobisvd_verify_inputs<Matrix4d>())); CALL_SUBTEST_2((jacobisvd_verify_inputs(Matrix<float, 5, Dynamic>(5, 6)))); CALL_SUBTEST_3((jacobisvd_verify_inputs<Matrix<std::complex<double>, 7, 5>>())); + CALL_SUBTEST_4((jacobisvd_mixed_option_enum_regression())); - CALL_SUBTEST_4((jacobisvd_verify_assert<Matrix3f>())); - CALL_SUBTEST_5((jacobisvd_verify_assert<Matrix4d>())); - CALL_SUBTEST_6((jacobisvd_verify_assert<Matrix<float, 10, 12>>())); - CALL_SUBTEST_7((jacobisvd_verify_assert<Matrix<float, 12, 10>>())); - CALL_SUBTEST_8((jacobisvd_verify_assert<MatrixXf>(MatrixXf(10, 12)))); - CALL_SUBTEST_9((jacobisvd_verify_assert<MatrixXcd>(MatrixXcd(7, 5)))); + CALL_SUBTEST_5((jacobisvd_verify_assert<Matrix3f>())); + CALL_SUBTEST_6((jacobisvd_verify_assert<Matrix4d>())); + CALL_SUBTEST_7((jacobisvd_verify_assert<Matrix<float, 10, 12>>())); + CALL_SUBTEST_8((jacobisvd_verify_assert<Matrix<float, 12, 10>>())); + CALL_SUBTEST_9((jacobisvd_verify_assert<MatrixXf>(MatrixXf(10, 12)))); + CALL_SUBTEST_10((jacobisvd_verify_assert<MatrixXcd>(MatrixXcd(7, 5)))); - CALL_SUBTEST_10(svd_all_trivial_2x2(jacobisvd_thin_options<Matrix2cd>)); - CALL_SUBTEST_11(svd_all_trivial_2x2(jacobisvd_thin_options<Matrix2d>)); + CALL_SUBTEST_11(svd_all_trivial_2x2(jacobisvd_thin_options<Matrix2cd>)); + CALL_SUBTEST_12(svd_all_trivial_2x2(jacobisvd_thin_options<Matrix2d>)); for (int i = 0; i < g_repeat; i++) { int r = internal::random<int>(1, 30), c = internal::random<int>(1, 30); @@ -144,88 +162,88 @@ TEST_SET_BUT_UNUSED_VARIABLE(r); TEST_SET_BUT_UNUSED_VARIABLE(c); - CALL_SUBTEST_12((jacobisvd_thin_options<Matrix3f>())); - CALL_SUBTEST_13((jacobisvd_full_options<Matrix3f>())); - CALL_SUBTEST_14((jacobisvd_thin_options<Matrix4d>())); - CALL_SUBTEST_15((jacobisvd_full_options<Matrix4d>())); - CALL_SUBTEST_16((jacobisvd_thin_options<Matrix<float, 2, 3>>())); - CALL_SUBTEST_17((jacobisvd_full_options<Matrix<float, 2, 3>>())); - CALL_SUBTEST_18((jacobisvd_thin_options<Matrix<double, 4, 7>>())); - CALL_SUBTEST_19((jacobisvd_full_options<Matrix<double, 4, 7>>())); - CALL_SUBTEST_20((jacobisvd_thin_options<Matrix<double, 7, 4>>())); - CALL_SUBTEST_21((jacobisvd_full_options<Matrix<double, 7, 4>>())); - CALL_SUBTEST_22((jacobisvd_thin_options<Matrix<double, Dynamic, 5>>(Matrix<double, Dynamic, 5>(r, 5)))); - CALL_SUBTEST_23((jacobisvd_full_options<Matrix<double, Dynamic, 5>>(Matrix<double, Dynamic, 5>(r, 5)))); - CALL_SUBTEST_24((jacobisvd_thin_options<Matrix<double, 5, Dynamic>>(Matrix<double, 5, Dynamic>(5, c)))); - CALL_SUBTEST_25((jacobisvd_full_options<Matrix<double, 5, Dynamic>>(Matrix<double, 5, Dynamic>(5, c)))); - CALL_SUBTEST_26((jacobisvd_thin_options<MatrixXf>(MatrixXf(r, c)))); - CALL_SUBTEST_27((jacobisvd_full_options<MatrixXf>(MatrixXf(r, c)))); - CALL_SUBTEST_28((jacobisvd_thin_options<MatrixXcd>(MatrixXcd(r, c)))); - CALL_SUBTEST_29((jacobisvd_full_options<MatrixXcd>(MatrixXcd(r, c)))); - CALL_SUBTEST_30((jacobisvd_thin_options<MatrixXd>(MatrixXd(r, c)))); - CALL_SUBTEST_31((jacobisvd_full_options<MatrixXd>(MatrixXd(r, c)))); - CALL_SUBTEST_32((jacobisvd_thin_options<Matrix<double, 5, 7, RowMajor>>())); - CALL_SUBTEST_33((jacobisvd_full_options<Matrix<double, 5, 7, RowMajor>>())); - CALL_SUBTEST_34((jacobisvd_thin_options<Matrix<double, 7, 5, RowMajor>>())); - CALL_SUBTEST_35((jacobisvd_full_options<Matrix<double, 7, 5, RowMajor>>())); + CALL_SUBTEST_13((jacobisvd_thin_options<Matrix3f>())); + CALL_SUBTEST_14((jacobisvd_full_options<Matrix3f>())); + CALL_SUBTEST_15((jacobisvd_thin_options<Matrix4d>())); + CALL_SUBTEST_16((jacobisvd_full_options<Matrix4d>())); + CALL_SUBTEST_17((jacobisvd_thin_options<Matrix<float, 2, 3>>())); + CALL_SUBTEST_18((jacobisvd_full_options<Matrix<float, 2, 3>>())); + CALL_SUBTEST_19((jacobisvd_thin_options<Matrix<double, 4, 7>>())); + CALL_SUBTEST_20((jacobisvd_full_options<Matrix<double, 4, 7>>())); + CALL_SUBTEST_21((jacobisvd_thin_options<Matrix<double, 7, 4>>())); + CALL_SUBTEST_22((jacobisvd_full_options<Matrix<double, 7, 4>>())); + CALL_SUBTEST_23((jacobisvd_thin_options<Matrix<double, Dynamic, 5>>(Matrix<double, Dynamic, 5>(r, 5)))); + CALL_SUBTEST_24((jacobisvd_full_options<Matrix<double, Dynamic, 5>>(Matrix<double, Dynamic, 5>(r, 5)))); + CALL_SUBTEST_25((jacobisvd_thin_options<Matrix<double, 5, Dynamic>>(Matrix<double, 5, Dynamic>(5, c)))); + CALL_SUBTEST_26((jacobisvd_full_options<Matrix<double, 5, Dynamic>>(Matrix<double, 5, Dynamic>(5, c)))); + CALL_SUBTEST_27((jacobisvd_thin_options<MatrixXf>(MatrixXf(r, c)))); + CALL_SUBTEST_28((jacobisvd_full_options<MatrixXf>(MatrixXf(r, c)))); + CALL_SUBTEST_29((jacobisvd_thin_options<MatrixXcd>(MatrixXcd(r, c)))); + CALL_SUBTEST_30((jacobisvd_full_options<MatrixXcd>(MatrixXcd(r, c)))); + CALL_SUBTEST_31((jacobisvd_thin_options<MatrixXd>(MatrixXd(r, c)))); + CALL_SUBTEST_32((jacobisvd_full_options<MatrixXd>(MatrixXd(r, c)))); + CALL_SUBTEST_33((jacobisvd_thin_options<Matrix<double, 5, 7, RowMajor>>())); + CALL_SUBTEST_34((jacobisvd_full_options<Matrix<double, 5, 7, RowMajor>>())); + CALL_SUBTEST_35((jacobisvd_thin_options<Matrix<double, 7, 5, RowMajor>>())); + CALL_SUBTEST_36((jacobisvd_full_options<Matrix<double, 7, 5, RowMajor>>())); MatrixXcd noQRTest = MatrixXcd(r, r); svd_fill_random(noQRTest); - CALL_SUBTEST_36((svd_thin_option_checks<MatrixXcd, NoQRPreconditioner>(noQRTest))); - CALL_SUBTEST_36((svd_option_checks_full_only<MatrixXcd, NoQRPreconditioner>(noQRTest))); + CALL_SUBTEST_37((svd_thin_option_checks<MatrixXcd, NoQRPreconditioner>(noQRTest))); + CALL_SUBTEST_37((svd_option_checks_full_only<MatrixXcd, NoQRPreconditioner>(noQRTest))); - CALL_SUBTEST_37(( + CALL_SUBTEST_38(( svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, ColMajor, 13, 15>, ColPivHouseholderQRPreconditioner>( r, c))); - CALL_SUBTEST_38( + CALL_SUBTEST_39( (svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, ColMajor, 15, 13>, HouseholderQRPreconditioner>(r, c))); - CALL_SUBTEST_39(( + CALL_SUBTEST_40(( svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, RowMajor, 13, 15>, ColPivHouseholderQRPreconditioner>( r, c))); - CALL_SUBTEST_40( + CALL_SUBTEST_41( (svd_check_max_size_matrix<Matrix<float, Dynamic, Dynamic, RowMajor, 15, 13>, HouseholderQRPreconditioner>(r, c))); // Test on inf/nan matrix - CALL_SUBTEST_41((svd_inf_nan<MatrixXf>())); - CALL_SUBTEST_42((svd_inf_nan<MatrixXd>())); + CALL_SUBTEST_42((svd_inf_nan<MatrixXf>())); + CALL_SUBTEST_43((svd_inf_nan<MatrixXd>())); - CALL_SUBTEST_43((jacobisvd_verify_assert<Matrix<double, 6, 1>>())); - CALL_SUBTEST_44((jacobisvd_verify_assert<Matrix<double, 1, 6>>())); - CALL_SUBTEST_45((jacobisvd_verify_assert<Matrix<double, Dynamic, 1>>(Matrix<double, Dynamic, 1>(r)))); - CALL_SUBTEST_46((jacobisvd_verify_assert<Matrix<double, 1, Dynamic>>(Matrix<double, 1, Dynamic>(c)))); + CALL_SUBTEST_44((jacobisvd_verify_assert<Matrix<double, 6, 1>>())); + CALL_SUBTEST_45((jacobisvd_verify_assert<Matrix<double, 1, 6>>())); + CALL_SUBTEST_46((jacobisvd_verify_assert<Matrix<double, Dynamic, 1>>(Matrix<double, Dynamic, 1>(r)))); + CALL_SUBTEST_47((jacobisvd_verify_assert<Matrix<double, 1, Dynamic>>(Matrix<double, 1, Dynamic>(c)))); } - CALL_SUBTEST_47((jacobisvd_thin_options<MatrixXd>( + CALL_SUBTEST_48((jacobisvd_thin_options<MatrixXd>( MatrixXd(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_48((jacobisvd_full_options<MatrixXd>( + CALL_SUBTEST_49((jacobisvd_full_options<MatrixXd>( MatrixXd(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_49((jacobisvd_thin_options<MatrixXcd>( + CALL_SUBTEST_50((jacobisvd_thin_options<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))))); - CALL_SUBTEST_50((jacobisvd_full_options<MatrixXcd>( + CALL_SUBTEST_51((jacobisvd_full_options<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 matrixbase method - CALL_SUBTEST_51((jacobisvd_method<Matrix2cd>())); - CALL_SUBTEST_52((jacobisvd_method<Matrix3f>())); + CALL_SUBTEST_52((jacobisvd_method<Matrix2cd>())); + CALL_SUBTEST_53((jacobisvd_method<Matrix3f>())); // Test problem size constructors - CALL_SUBTEST_53(JacobiSVD<MatrixXf>(10, 10)); + CALL_SUBTEST_54(JacobiSVD<MatrixXf>(10, 10)); // Check that preallocation avoids subsequent mallocs - CALL_SUBTEST_54(svd_preallocate<void>()); + CALL_SUBTEST_55(svd_preallocate<void>()); - CALL_SUBTEST_55(svd_underoverflow<void>()); + CALL_SUBTEST_56(svd_underoverflow<void>()); // Check that the TriangularBase constructor works - CALL_SUBTEST_56((svd_triangular_matrix<Matrix3d>())); - CALL_SUBTEST_57((svd_triangular_matrix<Matrix4f>())); - CALL_SUBTEST_58((svd_triangular_matrix<Matrix<double, 10, 10>>())); + CALL_SUBTEST_57((svd_triangular_matrix<Matrix3d>())); + CALL_SUBTEST_58((svd_triangular_matrix<Matrix4f>())); + CALL_SUBTEST_59((svd_triangular_matrix<Matrix<double, 10, 10>>())); msvc_workaround(); }