static bool testZeroApply (Field1 &F1, Field2 &F2, VectorStream<Vector> &stream1, VectorStream<Vector> &stream2) { commentator().start ("Testing zero apply", "testZeroApply", stream1.m ()); bool ret = true; bool iter_passed = true; Vector d1, d2, v, w, zero; VectorDomain<Field1> VD (F1); typename Field1::Element neg_one; VectorWrapper::ensureDim (zero, stream1.dim ()); VectorWrapper::ensureDim (d1, stream1.dim ()); VectorWrapper::ensureDim (d2, stream1.dim ()); VectorWrapper::ensureDim (v, stream1.dim ()); VectorWrapper::ensureDim (w, stream2.dim ()); // F.init (neg_one, 1); // F.negin (neg_one); F1.init (neg_one, -1); while (stream1) { commentator().startIteration ((unsigned)stream1.j ()); iter_passed = true; stream1.next (d1); VD.mul (d2, d1, neg_one); Diagonal <Field1> D1 (F1, d1), D2 (F1, d2); Sum <Diagonal<Field1>,Diagonal <Field1> > A (&D1, &D2); ostream &report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); report << "Diagonal matrix: "; VD.write (report, d1); report << endl; report << "Negative diagonal matrix: "; VD.write (report, d2); report << endl; stream2.reset (); while (stream2) { stream2.next (w); report << "Input vector: "; VD.write (report, w); report << endl; A.apply (v, w); report << "Output vector: "; VD.write (report, v); report << endl; if (!VD.isZero (v)) ret = iter_passed = false; } if (!iter_passed) commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: Vector is not zero" << endl; commentator().stop ("done"); commentator().progress (); ret = ret && testBBrebind(F2, A); } commentator().stop (MSG_STATUS (ret), (const char *) 0, "testZeroApply"); return ret; }