From 865952821fc2af7afd35bc1dbb3ca2f2806ea620 Mon Sep 17 00:00:00 2001 From: Sameer Agarwal Date: Fri, 20 Apr 2018 11:02:48 -0700 Subject: [PATCH] Fix a use after free bug in the tests. The way the SystemTest fixture works is that it takes a "FooProblem" object as a type, which contains a ceres::Problem and a ceres::Solver::Options object. The Options object also contains a linear_solver_ordering which contains double* which refer to memory that is allocated when a problem object is created. So it is important that the lifetime of the ceres::Problem object and the ceres::Solver::Options object be tied together. But we were violating this by creating a FooProblem object on the stack, grabbing its Options struct and passing it to the SystemTest fixture, which would then create another instance of FooProblem, grab its Problem object and copy the modified options struct into it. In the case where a user provided ordering was being used, this ordering would now be referring to memory allocated by the first FooProblem object, which would cause Ceres's internal ApplyOrdering function to fail. The fix is ofcourse to Problem and Options object that are born together. Change-Id: I07c377a9d5fcabbb6c7ca8aa3460206ce045ffa9 --- .../ceres/generate_bundle_adjustment_tests.py | 16 +++-- .../ba_denseschur_auto_test.cc | 16 +++-- .../ba_denseschur_auto_threads_test.cc | 16 +++-- .../ba_denseschur_user_test.cc | 16 +++-- .../ba_denseschur_user_threads_test.cc | 16 +++-- .../ba_iterschur_jacobi_auto_test.cc | 16 +++-- .../ba_iterschur_jacobi_auto_threads_test.cc | 16 +++-- .../ba_iterschur_jacobi_user_test.cc | 16 +++-- .../ba_iterschur_jacobi_user_threads_test.cc | 16 +++-- .../ba_iterschur_schurjacobi_auto_test.cc | 16 +++-- ...iterschur_schurjacobi_auto_threads_test.cc | 16 +++-- .../ba_iterschur_schurjacobi_user_test.cc | 16 +++-- ...iterschur_schurjacobi_user_threads_test.cc | 16 +++-- ...schur_suitesparse_clustjacobi_auto_test.cc | 16 +++-- ...itesparse_clustjacobi_auto_threads_test.cc | 16 +++-- ...schur_suitesparse_clustjacobi_user_test.cc | 16 +++-- ...itesparse_clustjacobi_user_threads_test.cc | 16 +++-- ...terschur_suitesparse_clusttri_auto_test.cc | 16 +++-- ..._suitesparse_clusttri_auto_threads_test.cc | 16 +++-- ...terschur_suitesparse_clusttri_user_test.cc | 16 +++-- ..._suitesparse_clusttri_user_threads_test.cc | 16 +++-- .../ba_sparsecholesky_cxsparse_auto_test.cc | 16 +++-- ...arsecholesky_cxsparse_auto_threads_test.cc | 16 +++-- .../ba_sparsecholesky_cxsparse_user_test.cc | 16 +++-- ...arsecholesky_cxsparse_user_threads_test.cc | 16 +++-- ...ba_sparsecholesky_eigensparse_auto_test.cc | 16 +++-- ...echolesky_eigensparse_auto_threads_test.cc | 16 +++-- ...ba_sparsecholesky_eigensparse_user_test.cc | 16 +++-- ...echolesky_eigensparse_user_threads_test.cc | 16 +++-- ...ba_sparsecholesky_suitesparse_auto_test.cc | 16 +++-- ...echolesky_suitesparse_auto_threads_test.cc | 16 +++-- ...ba_sparsecholesky_suitesparse_user_test.cc | 16 +++-- ...echolesky_suitesparse_user_threads_test.cc | 16 +++-- .../ba_sparseschur_cxsparse_auto_test.cc | 16 +++-- ..._sparseschur_cxsparse_auto_threads_test.cc | 16 +++-- .../ba_sparseschur_cxsparse_user_test.cc | 16 +++-- ..._sparseschur_cxsparse_user_threads_test.cc | 16 +++-- .../ba_sparseschur_eigensparse_auto_test.cc | 16 +++-- ...arseschur_eigensparse_auto_threads_test.cc | 16 +++-- .../ba_sparseschur_eigensparse_user_test.cc | 16 +++-- ...arseschur_eigensparse_user_threads_test.cc | 16 +++-- .../ba_sparseschur_suitesparse_auto_test.cc | 16 +++-- ...arseschur_suitesparse_auto_threads_test.cc | 16 +++-- .../ba_sparseschur_suitesparse_user_test.cc | 16 +++-- ...arseschur_suitesparse_user_threads_test.cc | 16 +++-- internal/ceres/system_test.cc | 66 +++++++++++-------- internal/ceres/test_util.h | 19 ++---- 47 files changed, 452 insertions(+), 353 deletions(-) diff --git a/internal/ceres/generate_bundle_adjustment_tests.py b/internal/ceres/generate_bundle_adjustment_tests.py index b36cf6605..89cf8c717 100644 --- a/internal/ceres/generate_bundle_adjustment_tests.py +++ b/internal/ceres/generate_bundle_adjustment_tests.py @@ -121,15 +121,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, %(test_class_name)s) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = %(num_threads)s; - options.linear_solver_type = %(linear_solver)s; - options.sparse_linear_algebra_library_type = %(sparse_backend)s; - options.preconditioner_type = %(preconditioner)s; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = %(num_threads)s; + options->linear_solver_type = %(linear_solver)s; + options->sparse_linear_algebra_library_type = %(sparse_backend)s; + options->preconditioner_type = %(preconditioner)s; if (%(ordering)s) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_test.cc index 2d3ea8141..c6cbaa516 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, DenseSchur_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = DENSE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = DENSE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_threads_test.cc index 311bceb2b..bbbcbb69f 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_auto_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, DenseSchur_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = DENSE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = DENSE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_test.cc index 930f5f0c5..48cd4c8bc 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, DenseSchur_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = DENSE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = DENSE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_threads_test.cc index cf8139a02..ec070bf5f 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_user_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, DenseSchur_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = DENSE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = DENSE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_test.cc index 8c3b886d2..5f36b2e44 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_Jacobi_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc index 4585201a2..8312db258 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_Jacobi_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_test.cc index 9b864e427..82f394a34 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_Jacobi_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc index 6266bea93..78f55240d 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_Jacobi_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_test.cc index bc40f5d53..5407f3cad 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SchurJacobi_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = SCHUR_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = SCHUR_JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc index c55fa6282..ed04d8f50 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SchurJacobi_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = SCHUR_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = SCHUR_JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_test.cc index cc7f3341f..4299738be 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_test.cc @@ -42,15 +42,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SchurJacobi_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = SCHUR_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = SCHUR_JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc index b8cd166fa..46a320a26 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SchurJacobi_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = SCHUR_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = SCHUR_JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_test.cc index cdb4fd09a..b87d38653 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterJacobi_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc index 15ed6b194..414a3e9c3 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterJacobi_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_JACOBI; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_test.cc index dda9d627e..b0da4afb1 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterJacobi_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc index 6ca9f7b39..007891121 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterJacobi_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_JACOBI; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_JACOBI; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_test.cc index 6a40ef891..dc35fc81e 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterTridiagonal_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_TRIDIAGONAL; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_TRIDIAGONAL; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc index 6bd66bc4a..b8b861367 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterTridiagonal_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_TRIDIAGONAL; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_TRIDIAGONAL; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_test.cc index ae12ce9c8..bdea6368f 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterTridiagonal_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_TRIDIAGONAL; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_TRIDIAGONAL; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc index 727d90878..e8b844a5b 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, IterativeSchur_SuiteSparse_ClusterTridiagonal_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = CLUSTER_TRIDIAGONAL; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = CLUSTER_TRIDIAGONAL; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_test.cc index 3d3b64208..00c07579a 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_CxSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_threads_test.cc index ae7f543f8..52a86c336 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_CxSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_test.cc index 9f3d752c1..9a4cdb5f4 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_CxSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_threads_test.cc index 366169c24..960630a54 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_cxsparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_CxSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_test.cc index 700bb50e3..c4575df5b 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_EigenSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc index e36329794..1cda7765d 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_EigenSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_test.cc index dd423f389..e9e42afd0 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_EigenSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc index 27dc82169..a3aa3681a 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_EigenSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_test.cc index 7155bd949..f69998197 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_SuiteSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc index 8991ccada..72530754f 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_SuiteSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_test.cc index e4375c19b..dae0ed6ac 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_SuiteSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc index 3c91c7297..82bec8875 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseNormalCholesky_SuiteSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_test.cc index d9b10e4fb..a623cb90c 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_CxSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_threads_test.cc index f7dbc45cb..8d13c66a0 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_CxSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_test.cc index 27a673df1..73b0787b6 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_CxSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_threads_test.cc index 9e5db3873..9318a27f3 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_cxsparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_CxSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = CX_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = CX_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_test.cc index bc8d66be4..eb31fed68 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_EigenSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc index 6910d8719..d9c9b0bdd 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_EigenSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_test.cc index d62648187..0e34884d4 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_EigenSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc index 218c35fff..bf7d5f4e4 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_EigenSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_test.cc index 67fff2140..7e8853f97 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_SuiteSparse_AutomaticOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc index f0dccb7f8..823dcfee3 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_SuiteSparse_AutomaticOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kAutomaticOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_test.cc index eb67b497e..a375c94cf 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_test.cc @@ -44,15 +44,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_SuiteSparse_UserOrdering) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 1; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 1; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc index c13cc4fe7..9af1d560c 100644 --- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc +++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc @@ -45,15 +45,17 @@ namespace internal { TEST_F(BundleAdjustmentTest, SparseSchur_SuiteSparse_UserOrdering_Threads) { // NOLINT - Solver::Options options = *BundleAdjustmentProblem().mutable_solver_options(); - options.num_threads = 4; - options.linear_solver_type = SPARSE_SCHUR; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - options.preconditioner_type = IDENTITY; + BundleAdjustmentProblem bundle_adjustment_problem; + Solver::Options* options = bundle_adjustment_problem.mutable_solver_options(); + options->num_threads = 4; + options->linear_solver_type = SPARSE_SCHUR; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + options->preconditioner_type = IDENTITY; if (kUserOrdering) { - options.linear_solver_ordering.reset(); + options->linear_solver_ordering.reset(); } - RunSolverForConfigAndExpectResidualsMatch(options); + Problem* problem = bundle_adjustment_problem.mutable_problem(); + RunSolverForConfigAndExpectResidualsMatch(*options, problem); } } // namespace internal diff --git a/internal/ceres/system_test.cc b/internal/ceres/system_test.cc index 5fb520ff5..ca0f52960 100644 --- a/internal/ceres/system_test.cc +++ b/internal/ceres/system_test.cc @@ -146,55 +146,69 @@ double PowellsFunction::kResidualTolerance = 1e-8; typedef SystemTest PowellTest; TEST_F(PowellTest, DenseQR) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = DENSE_QR; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = DENSE_QR; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } TEST_F(PowellTest, DenseNormalCholesky) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = DENSE_NORMAL_CHOLESKY; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = DENSE_NORMAL_CHOLESKY; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } TEST_F(PowellTest, DenseSchur) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = DENSE_SCHUR; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = DENSE_SCHUR; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } TEST_F(PowellTest, IterativeSchurWithJacobi) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = ITERATIVE_SCHUR; - options.sparse_linear_algebra_library_type = NO_SPARSE; - options.preconditioner_type = JACOBI; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = ITERATIVE_SCHUR; + options->sparse_linear_algebra_library_type = NO_SPARSE; + options->preconditioner_type = JACOBI; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } #ifndef CERES_NO_SUITESPARSE TEST_F(PowellTest, SparseNormalCholeskyUsingSuiteSparse) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = SUITE_SPARSE; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = SUITE_SPARSE; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } #endif // CERES_NO_SUITESPARSE #ifndef CERES_NO_CXSPARSE TEST_F(PowellTest, SparseNormalCholeskyUsingCXSparse) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = CX_SPARSE; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = CX_SPARSE; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } #endif // CERES_NO_CXSPARSE #ifdef CERES_USE_EIGEN_SPARSE TEST_F(PowellTest, SparseNormalCholeskyUsingEigenSparse) { - Solver::Options options = *PowellsFunction().mutable_solver_options(); - options.linear_solver_type = SPARSE_NORMAL_CHOLESKY; - options.sparse_linear_algebra_library_type = EIGEN_SPARSE; - RunSolverForConfigAndExpectResidualsMatch(options); + PowellsFunction powells_function; + Solver::Options* options = powells_function.mutable_solver_options(); + options->linear_solver_type = SPARSE_NORMAL_CHOLESKY; + options->sparse_linear_algebra_library_type = EIGEN_SPARSE; + RunSolverForConfigAndExpectResidualsMatch(*options, + powells_function.mutable_problem()); } #endif // CERES_USE_EIGEN_SPARSE diff --git a/internal/ceres/test_util.h b/internal/ceres/test_util.h index c4c17d5cd..e43eb35a0 100644 --- a/internal/ceres/test_util.h +++ b/internal/ceres/test_util.h @@ -78,7 +78,7 @@ std::string ToString(const Solver::Options& options); // It is assumed that the SystemTestProblem has an Solver::Options // struct that contains the reference Solver configuration. template -class SystemTest : public::testing::Test { +class SystemTest : public ::testing::Test { protected: virtual void SetUp() { SystemTestProblem system_test_problem; @@ -88,15 +88,10 @@ class SystemTest : public::testing::Test { &expected_final_residuals_); } - void RunSolverForConfigAndExpectResidualsMatch(const Solver::Options& options) { - LOG(INFO) << "Running solver configuration: " - << ToString(options); - SystemTestProblem system_test_problem; + void RunSolverForConfigAndExpectResidualsMatch(const Solver::Options& options, + Problem* problem) { std::vector final_residuals; - SolveAndEvaluateFinalResiduals( - options, - system_test_problem.mutable_problem(), - &final_residuals); + SolveAndEvaluateFinalResiduals(options, problem, &final_residuals); // We compare solutions by comparing their residual vectors. We do // not compare parameter vectors because it is much more brittle @@ -119,10 +114,10 @@ class SystemTest : public::testing::Test { Solve(options, problem, &summary); CHECK_NE(summary.termination_type, ceres::FAILURE); problem->Evaluate(Problem::EvaluateOptions(), - NULL, + nullptr, final_residuals, - NULL, - NULL); + nullptr, + nullptr); } std::vector expected_final_residuals_;