60int main(
int argc,
char* argv[])
65 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
70 int numberFailedTests = 0;
72 std::string testName =
"";
74 if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL SYMMETRIC DENSE MATRIX **********"<<std::endl<<std::endl;
78 if (verbose) std::cout <<
"default constructor -- construct empty matrix ";
79 if ( DefConTest.values()!=NULL || DefConTest.numCols()!=0 || DefConTest.numRows()!=0 ||DefConTest.stride()!=0 ||DefConTest.empty()!=
true ) {
80 if (verbose) std::cout <<
"unsuccessful."<<std::endl;
83 if (verbose) std::cout <<
"successful."<<std::endl;
89 if (verbose) std::cout <<
"constructor 1 -- empty matrix with given dimensions ";
90 if ( Con1Test.numRows()!=4 || Con1Test.numCols()!=4 || Con1Test( 1, 2 )!=0.0 ) {
91 if (verbose) std::cout <<
"unsuccessful."<<std::endl;
94 if (verbose) std::cout <<
"successful."<<std::endl;
100 for(i = 0; i < 9; i++)
105 Con2Test1ExpRes.shape(3);
106 Con2Test1ExpRes(0, 0) = 0;
107 Con2Test1ExpRes(1, 0) = 1; Con2Test1ExpRes(1, 1) = 4;
108 Con2Test1ExpRes(2, 0) = 2; Con2Test1ExpRes(2, 1) = 5; Con2Test1ExpRes(2, 2) = 8;
112 numberFailedTests +=
PrintTestResults(
"constructor 2 -- construct matrix from array subrange", Con2Test1, Con2Test1ExpRes, verbose);
117 SDMatrix Con3TestCopy( Con2Test1ExpRes );
118 if(verbose) std::cout <<
"constructor 3 -- copy constructor ";
119 if ( Con3TestCopy != Con2Test1ExpRes ) {
120 if (verbose) std::cout <<
"unsuccessful."<<std::endl;
123 if (verbose) std::cout <<
"successful."<<std::endl;
126 SDMatrix Con3TestCopyTrans( Con2Test1ExpRes );
127 Con3TestCopyTrans.setUpper();
128 if(verbose) std::cout <<
"constructor 3 -- copy constructor (upper active storage) ";
129 if ( Con3TestCopyTrans(2, 0) != Con2Test1ExpRes(2, 0) ) {
130 if (verbose) std::cout <<
"unsuccessful."<<std::endl;
133 if (verbose) std::cout <<
"successful."<<std::endl;
140 Con4TestSubmatrix.shape( 2 );
141 Con4TestSubmatrix(0, 0) = 4;
142 Con4TestSubmatrix(1, 0) = 5; Con4TestSubmatrix(1, 1) = 8;
144 numberFailedTests +=
PrintTestResults(
"constructor 4 -- submatrix copy", Con4TestCopy1, Con4TestSubmatrix, verbose);
146 numberFailedTests +=
PrintTestResults(
"constructor 4 -- full matrix copy", Con4TestCopy2, Con4TestOrig, verbose);
148 numberFailedTests +=
PrintTestResults(
"constructor 4 -- full matrix view", Con4TestView1, Con4TestSubmatrix, verbose);
150 numberFailedTests +=
PrintTestResults(
"constructor 4 -- submatrix view", Con4TestView2, Con4TestOrig, verbose);
157 AAA(1, 0) = 1; AAA(1, 1) = 8;
158 AAA(2, 0) = 2; AAA(2, 1) = 3; AAA(2, 2) = 8;
160 numberFailedTests +=
PrintTestResults(
"normOne of a 3x3", AAA.normOne(), 13.0, verbose);
161 numberFailedTests +=
PrintTestResults(
"normInf of a 3x3", AAA.normInf(), 13.0, verbose);
163 numberFailedTests +=
PrintTestResults(
"normFrobenius of a 3x3", AAA.normFrobenius(), 3.0, verbose);
164 numberFailedTests +=
PrintTestResults(
"normOne of a 0x0", BBB.normOne(), 0.0, verbose);
165 numberFailedTests +=
PrintTestResults(
"normInf of a 0x0", BBB.normInf(), 0.0, verbose);
166 numberFailedTests +=
PrintTestResults(
"normFrobenius of a 0x0", BBB.normFrobenius(), 0.0, verbose);
172 AAA(1, 0) = 1; AAA(1, 1) = 8;
173 AAA(2, 0) = 2; AAA(2, 1) = 3; AAA(2, 2) = 8;
175 DMatrix My_Prod( 4, 3 ), My_GenMatrix( 4, 3 );
180 numberFailedTests +=
PrintTestResults(
"multiply() -- general times symmetric matrix (storage = lower tri)", My_Prod.normOne(), 52.0, verbose);
184 numberFailedTests +=
PrintTestResults(
"multiply() -- general times symmetric matrix (storage = upper tri)", My_Prod.normOne(), 44.0, verbose);
190 testName =
"random() -- enter random entries into matrix";
191 returnCode = CCC.random();
192 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
194 testName =
"putScalar() -- set every entry of this matrix to 1.0";
196 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
200 if (verbose) std::cout <<
"assign() -- copy the values of an input matrix ";
202 if (verbose) std::cout<<
"successful" <<std::endl;
204 if (verbose) std::cout<<
"unsuccessful" <<std::endl;
212 if (verbose) std::cout <<
"swap() -- swap the values and attributes of two symmetric matrices -- ";
214 bool op_result = ( (CCC2swap == copyCCC2) && (CCC2 == copyCCC2swap) );
216 std::cout << (op_result ?
"successful" :
"failed" )<<std::endl;
226 if (verbose) std::cout <<
"operator= -- small(empty) = large(view) ";
227 if (CCCtest1.numRows()==3 && CCCtest1.values()==CCC.values()) {
228 if (verbose) std::cout<<
"successful" <<std::endl;
230 if (verbose) std::cout<<
"unsuccessful" <<std::endl;
234 if (verbose) std::cout <<
"operator= -- small(view) = large(copy) ";
235 if (CCCtest1.numRows()==5 && CCCtest1.values()!=CCC.values()) {
236 if (verbose) std::cout<<
"successful"<<std::endl;
238 if (verbose) std::cout<<
"unsuccessful"<<std::endl;
244 if (verbose) std::cout <<
"operator= -- large(copy) = small(copy) ";
245 if (CCCtest1.numRows()==2 ) {
246 if (verbose) std::cout<<
"successful"<<std::endl;
248 if (verbose) std::cout<<
"unsuccessful"<<std::endl;
252 if (verbose) std::cout <<
"operator= -- large(copy) = small(view) ";
253 if (CCCtest1.numRows()==3 && CCCtest1.stride()==5) {
254 if(verbose) std::cout<<
"successful" <<std::endl;
256 if (verbose) std::cout<<
"unsuccessful"<<std::endl;
261 CCCtest1 += CCCtest3;
262 if (verbose) std::cout <<
"operator+= -- add two matrices of the same size, but different leading dimension ";
263 if (CCCtest1(1,1)==2.0) {
264 if(verbose) std::cout<<
"successful" <<std::endl;
266 if (verbose) std::cout<<
"unsuccessful"<<std::endl;
269 if (verbose) std::cout <<
"operator+= -- add two matrices of different size (nothing should change) ";
271 if (CCCtest1(1,1)==2.0) {
272 if(verbose) std::cout<<
"successful" <<std::endl;
274 if (verbose) std::cout<<
"unsuccessful"<<std::endl;
284 if (verbose) std::cout <<
"operator*= -- scale matrix by some number ";
286 if (ScalTest(7, 1) == 8.0) {
287 if (verbose) std::cout<<
"successful." <<std::endl;
289 if (verbose) std::cout<<
"unsuccessful." <<std::endl;
298 A1(0,0) = 1.0, A1(1,1) = 2.0;
299 A2(0,0) = 1.0, A2(1,1) = 2.0, A2(2,2) = 3.00;
302 SDMatrix C1upper(3), C1lower(3), C2upper(2), C2lower(2);
303 C1upper.setUpper(); C2upper.setUpper();
304 C1lower.setLower(); C2lower.setLower();
318 if (verbose) std::cout <<
"triple product -- compute C = W'*A*W or C = W*A*W' ";
319 if (C1upper(2,1)==C1result && C1lower(1,2)==C1result && C2upper(1,0)==C2result && C2lower(0,1)==C2result) {
320 if (verbose) std::cout<<
"successful." <<std::endl;
322 if (verbose) std::cout<<
"unsuccessful." <<std::endl;
331 if(numberFailedTests > 0)
334 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
335 std::cout <<
"End Result: TEST FAILED" << std::endl;
339 if(numberFailedTests == 0)
340 std::cout <<
"End Result: TEST PASSED" << std::endl;