static bool testTransposeBlackbox(Blackbox & A) { typedef typename Blackbox::Field Field; commentator().start ("Testing Transpose", "testTranspose", 1); Transpose<Blackbox> B(A); bool ret = true, ret1; size_t m = A.rowdim(), n = A.coldim(); const Field & F = A.field(); VectorDomain<Field> VD (F); BlasVector<Field> x(F,n), y(F,m), z(F,n), w(F,m); VD.random(x); A.apply(y, x); B.applyTranspose(w, x); ret1 = VD.areEqual(y, w); if (not ret1) commentator().report() << "A and B^T disagree, FAIL" << std::endl; ret = ret and ret1; VD.random(y); A.applyTranspose(x, y); B.apply(z, y); ret1 = VD.areEqual(x, z); if (not ret1) commentator().report() << "A^T and B disagree, FAIL" << std::endl; ret = ret and ret1; ret1 = testBlackboxNoRW(B); if (not ret1) commentator().report() << "testBlackbox A^T FAIL" << std::endl; ret = ret and ret1; commentator().stop (MSG_STATUS (ret), (const char *) 0, "testTranspose"); return ret; }
bool testAssociativity(Blackbox& A) { typedef typename Blackbox::MatrixDomain Dom; Dom MD = A.domain(); size_t m = A.rowdim(), n = A.coldim() - 100; size_t k = (m + n)/2; typename Dom::Block B(A.field(),k,m), C(A.field(),m,n); MD.random(B); MD.random(C); typename Dom::Block D(A.field(),m,n), E(A.field(),k,n); A.apply(D, C); // D = AC MD.mul(E,B,D); // E = B(AC) typename Dom::Block F(A.field(),k,m), G(A.field(),k,n); A.unpackingApplyTranspose(F,B); // F = BA MD.mul(G,F,C); // G = (BA)C return MD.areEqual(E,G); } // testAssociativity