From ab1cf46791e6f0ebf4c39bac354617d9a7bbd9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20Gr=C3=A4ser?= <graeser@dune-project.org> Date: Mon, 9 Nov 2009 21:46:53 +0000 Subject: [PATCH] Added test for rightmultiply,leftmultiply,rightmultiplyany,leftmultiplyany [[Imported from SVN: r5703]] --- dune/common/test/fmatrixtest.cc | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/dune/common/test/fmatrixtest.cc b/dune/common/test/fmatrixtest.cc index 0723dc013..be00823f9 100644 --- a/dune/common/test/fmatrixtest.cc +++ b/dune/common/test/fmatrixtest.cc @@ -241,6 +241,60 @@ void test_matrix() if (std::abs(B.infinity_norm()) > 1e-12) DUNE_THROW(FMatrixError,"Axpy test failed!"); } + { + FieldMatrix<K,n,n+1> A; + for(size_type i=0; i<A.N(); ++i) + for(size_type j=0; j<A.M(); ++j) + A[i][j] = i; + const FieldMatrix<K,n,n+1>& Aref = A; + + + FieldMatrix<K,n+1,n+1> B; + for(size_type i=0; i<B.N(); ++i) + for(size_type j=0; j<B.M(); ++j) + B[i][j] = i; + const FieldMatrix<K,n+1,n+1>& Bref = B; + + FieldMatrix<K,n,n> C; + for(size_type i=0; i<C.N(); ++i) + for(size_type j=0; j<C.M(); ++j) + C[i][j] = i; + const FieldMatrix<K,n,n>& Cref = C; + + FieldMatrix<K,n,n+1> AB = Aref.rightmultiplyany(B); + for(size_type i=0; i<AB.N(); ++i) + for(size_type j=0; j<AB.M(); ++j) + if (std::abs<double>(AB[i][j] - i*n*(n+1)/2) > 1e-10) + DUNE_THROW(FMatrixError,"Rightmultiplyany test failed!"); + + FieldMatrix<K,n,n+1> AB2 = A; + AB2.rightmultiply(B); + AB2 -= AB; + if (std::abs(AB2.infinity_norm() > 1e-10)) + DUNE_THROW(FMatrixError,"Rightmultiply test failed!"); + + FieldMatrix<K,n,n+1> AB3 = Bref.leftmultiplyany(A); + AB3 -= AB; + if (std::abs(AB3.infinity_norm() > 1e-10)) + DUNE_THROW(FMatrixError,"Leftmultiplyany test failed!"); + + FieldMatrix<K,n,n+1> CA = Aref.leftmultiplyany(C); + for(size_type i=0; i<CA.N(); ++i) + for(size_type j=0; j<CA.M(); ++j) + if (std::abs<double>(CA[i][j] - i*n*(n-1)/2) > 1e-10) + DUNE_THROW(FMatrixError,"Leftmultiplyany test failed!"); + + FieldMatrix<K,n,n+1> CA2 = A; + CA2.leftmultiply(C); + CA2 -= CA; + if (std::abs(CA2.infinity_norm() > 1e-10)) + DUNE_THROW(FMatrixError,"Leftmultiply test failed!"); + + FieldMatrix<K,n,n+1> CA3 = Cref.rightmultiplyany(A); + CA3 -= CA; + if (std::abs(CA3.infinity_norm() > 1e-10)) + DUNE_THROW(FMatrixError,"Rightmultiplyany test failed!"); + } } int test_determinant() -- GitLab