diff --git a/dune/solvers/test/sumoperatortest.cc b/dune/solvers/test/sumoperatortest.cc index 39d05704a4ad7408cafdbddb7cd373f6e87ea8d0..ca6c189cc2f8f04f733b3628c95a752b83811c15 100644 --- a/dune/solvers/test/sumoperatortest.cc +++ b/dune/solvers/test/sumoperatortest.cc @@ -170,6 +170,30 @@ bool check() return passed; } +bool checkResize() try { + std::cout << "Checking resize from SumOperator ... "; + using namespace Dune; + using Block = FieldMatrix<double, 2, 6>; + using SparseMatrix = BCRSMatrix<Block>; + SparseMatrix sparseMatrix; + MatrixIndexSet indices(3,4); + indices.exportIdx(sparseMatrix); + using LowRankFactor = Matrix<Block>; + SumOperator<SparseMatrix, LowRankOperator<LowRankFactor>> sumOp; + sumOp.sparseMatrix() = sparseMatrix; + sumOp.lowRankMatrix().lowRankFactor() = LowRankFactor(5,6); // "weird" sizes should not matter + BlockVector<Dune::FieldVector<double, 2>> vector; + MatrixVector::resize(vector, sumOp); + if(vector.size() != 3) + DUNE_THROW(Exception, "Resize yields unexpected vector size."); + std::cout << "passed" << std::endl; + return true; +} catch(Dune::Exception e) { + std::cout << " FAILED." << std::endl; + std::cout << "Exception was: " << e << std::endl; + return false; +} + int main(int argc, char** argv) { Dune::MPIHelper::instance(argc, argv); @@ -194,5 +218,7 @@ int main(int argc, char** argv) passed = passed and check<Dune::BCRSMatrix<Block3>, Dune::Matrix<Block2> >(); passed = passed and check<Dune::BCRSMatrix<Block3>, Dune::Matrix<Block3> >(); + passed = passed and checkResize(); + return passed ? 0 : 1; }