bool VectorTester<Scalar>::check( const VectorBase<Scalar> &v ,Teuchos::FancyOStream *out_arg ) const { using std::endl; using Teuchos::describe; using Teuchos::FancyOStream; using Teuchos::OSTab; typedef Teuchos::ScalarTraits<Scalar> ST; //typedef typename ST::magnitudeType ScalarMag; Teuchos::RCP<FancyOStream> out = Teuchos::rcp(out_arg,false); const Teuchos::EVerbosityLevel verbLevel = (dump_all()?Teuchos::VERB_EXTREME:Teuchos::VERB_MEDIUM); OSTab tab(out,1,"THYRA"); bool result, success = true; if(out.get()) *out <<endl<< "*** Entering Thyra::VectorTester<"<<ST::name()<<">::check(v,...) ...\n"; if(out.get()) *out <<endl<< "Testing a VectorBase object described as:\n" << describe(v,verbLevel); if(out.get()) *out <<endl<< "A) Creating temporary vector t1, t2, t3, and t4 from v.space() ...\n"; Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > vs = v.space(); Teuchos::RCP<Thyra::VectorBase<Scalar> > t1 = createMember(vs), t2 = createMember(vs), t3 = createMember(vs), t4 = createMember(vs); if(out.get()) *out <<endl<< "B) Testing VectorBase::applyOp(...) by calling a few standard RTOp operations ... "; const Scalar one = ST::one(), two = Scalar(2)*one, three = Scalar(3)*one; { using Teuchos::inoutArg; TestResultsPrinter testResultsPrinter(out, show_all_tests()); const RCP<FancyOStream> testOut = testResultsPrinter.getTestOStream(); bool these_results = true; *testOut <<endl<< "assign(t1.ptr(),2.0) ...\n"; Thyra::assign( t1.ptr(), two ); if(dump_all()) *testOut <<endl<< "\nt1 =\n" << describe(*t1,verbLevel); result = Teuchos::testRelErr<Scalar>( "sum(t1)", sum(*t1), "2*vs->dim()", two*Scalar(vs->dim()), "error_tol()", error_tol(), "warning_tol()", warning_tol(), inoutArg(*testOut) ); if(!result) these_results = false; *testOut <<endl<< "assign(t2.ptr(),3.0) ...\n"; Thyra::assign( t2.ptr(), three ); if(dump_all()) *testOut <<endl<< "t2 =\n" << *t1; result = Teuchos::testRelErr<Scalar>( "sum(t2)",sum(*t2),"3*vs->dim()",three*Scalar(vs->dim()), "error_tol()",error_tol(),"warning_tol()",warning_tol(), inoutArg(*testOut) ); if(!result) these_results = false; result = Teuchos::testRelErr<Scalar>( "vs->scalarProd(*t1,*t2)",vs->scalarProd(*t1,*t2),"2*3*vs->dim()",two*three*Scalar(vs->dim()), "error_tol()",error_tol(),"warning_tol()",warning_tol(), inoutArg(*testOut) ); if(!result) these_results = false; testResultsPrinter.printTestResults(these_results, inoutArg(success)); } // ToDo: Test the rest of the specific VectorBase interface on v1 if(out.get()) *out <<endl<< "C) Checking the MultiVectorBase interface of v ...\n"; result = multiVectorTester_.check(v, out.ptr()); if(!result) success = false; if(out.get()) *out <<endl<< "*** Leaving Thyra::VectorTester<"<<ST::name()<<">::check(v,...) ...\n"; return success; }
int main( int argc, char* argv[] ) { using Teuchos::inoutArg; Teuchos::GlobalMPISession mpiSession(&argc,&argv); std::cout << std::endl << Teuchos::Teuchos_Version() << std::endl; bool success = true; try { std::string xmlInFileName = ""; std::string extraXmlFile = ""; std::string xmlOutFileName = "paramList.out"; Teuchos::CommandLineProcessor clp(false); // Don't throw exceptions clp.setOption("xml-in-file",&xmlInFileName,"The XML file to read into a parameter list"); clp.setOption("extra-xml-file",&extraXmlFile,"File with extra XML text that will modify the initial XML read in"); clp.setOption("xml-out-file",&xmlOutFileName,"The XML file to write the final parameter list to"); clp.setDocString( "This example program shows how to read in a parameter list from an" " XML file (given by --xml-in-file=xmlInFileName) and then modify it" " given some XML specified on the command-line (given by --extra-xml=extrXmlStr)." " The final parameter list is then written back to an XML file." " (given by --xml-out-file=xmlOutFileName)." ); Teuchos::CommandLineProcessor::EParseCommandLineReturn parse_return = clp.parse(argc,argv); if( parse_return != Teuchos::CommandLineProcessor::PARSE_SUCCESSFUL ) { std::cout << "\nEnd Result: TEST FAILED" << std::endl; return parse_return; } Teuchos::ParameterList paramList; if(xmlInFileName.length()) { std::cout << "\nReading a parameter list from the XML file \""<<xmlInFileName<<"\" ...\n"; Teuchos::updateParametersFromXmlFile(xmlInFileName, inoutArg(paramList)); std::cout << "\nParameter list read from the XML file \""<<xmlInFileName<<"\":\n\n"; paramList.print(std::cout,2,true,true); } std::string line(""); if(extraXmlFile.length()) { std::ifstream myfile(extraXmlFile.c_str()); if (myfile.is_open()) { getline (myfile,line); std::cout << line << "\n"; myfile.close(); } std::cout << "\nUpdating the parameter list given the extra XML std::string:\n\n"<<line<<"\n"; Teuchos::updateParametersFromXmlString(line, inoutArg(paramList)); std::cout << "\nParameter list after ammending extra XML std::string:\n\n"; paramList.print(std::cout,2,true,true); } std::cout << "\nWriting the final parameter list back to the XML file \""<<xmlOutFileName<<"\" ... \n"; Teuchos::writeParameterListToXmlFile(paramList,xmlOutFileName); } TEUCHOS_STANDARD_CATCH_STATEMENTS(true,std::cerr,success); if(success) std::cout << "\nEnd Result: TEST PASSED" << std::endl; else std::cout << "\nEnd Result: TEST FAILED" << std::endl; return ( success ? 0 : 1 ); }