|
Intrepid
|
00001 // @HEADER 00002 // ************************************************************************ 00003 // 00004 // Intrepid Package 00005 // Copyright (2007) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Pavel Bochev (pbboche@sandia.gov) or 00025 // Denis Ridzal (dridzal@sandia.gov). 00026 // 00027 // ************************************************************************ 00028 // @HEADER 00029 00030 00036 #include "Intrepid_FieldContainer.hpp" 00037 #include "Teuchos_oblackholestream.hpp" 00038 #include "Teuchos_RCP.hpp" 00039 #include "Teuchos_GlobalMPISession.hpp" 00040 00041 00042 using namespace Intrepid; 00043 00044 int main(int argc, char *argv[]) { 00045 00046 Teuchos::GlobalMPISession mpiSession(&argc, &argv); 00047 00048 // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided. 00049 int iprint = argc - 1; 00050 00051 Teuchos::RCP<std::ostream> outStream; 00052 Teuchos::oblackholestream bhs; // outputs nothing 00053 00054 if (iprint > 0) 00055 outStream = Teuchos::rcp(&std::cout, false); 00056 else 00057 outStream = Teuchos::rcp(&bhs, false); 00058 00059 // Save the format state of the original std::cout. 00060 Teuchos::oblackholestream oldFormatState; 00061 oldFormatState.copyfmt(std::cout); 00062 00063 *outStream \ 00064 << "===============================================================================\n" \ 00065 << "| |\n" \ 00066 << "| Unit Test FieldContainer |\n" \ 00067 << "| |\n" \ 00068 << "| 1) Value accesss by multi-index and enumeration, setting values |\n" \ 00069 << "| |\n" \ 00070 << "| Questions? Contact Pavel Bochev (pbboche@sandia.gov) or |\n" \ 00071 << "| Denis Ridzal (dridzal@sandia.gov). |\n" \ 00072 << "| |\n" \ 00073 << "| Intrepid's website: http://trilinos.sandia.gov/packages/intrepid |\n" \ 00074 << "| Trilinos website: http://trilinos.sandia.gov |\n" \ 00075 << "| |\n" \ 00076 << "===============================================================================\n"; 00077 00078 int errorFlag = 0; 00079 00080 // Define variables to construct and use FieldContainer: 00081 Teuchos::Array<double> dataArray; 00082 Teuchos::Array<int> dimension; 00083 Teuchos::Array<int> multiIndex; 00084 int dim0, dim1, dim2, dim3, dim4; 00085 int containerSize; 00086 int containerRank; 00087 int dataSize; 00088 int counter; 00089 00090 00091 *outStream \ 00092 << "\n" 00093 << "===============================================================================\n"\ 00094 << "| TEST 1: Rank-1 FieldContainer |\n"\ 00095 << "===============================================================================\n"; 00096 00097 // Adjust for rank-1 containers 00098 dimension.resize(1); 00099 multiIndex.resize(1); 00100 dim0 = 267; 00101 00102 // Set dimensions 00103 dimension[0] = dim0; 00104 00105 // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension) 00106 dataSize = dimension[0]; 00107 dataArray.resize(dataSize); 00108 00109 // Fill with data 00110 counter = 0; 00111 for(int i=0; i < dimension[0]; i++){ 00112 dataArray[counter] = (double)counter; 00113 counter++; 00114 } 00115 00116 *outStream \ 00117 << "\n" 00118 << "===============================================================================\n"\ 00119 << "| TEST 1-a: Compare constructors with array and list of dimensions |\n"\ 00120 << "===============================================================================\n"; 00121 try{ 00122 00123 // Using ctor with array of dimensions and array of data 00124 FieldContainer<double> rank1Container(dimension, dataArray); 00125 00126 // Using ctor with list of dimensions and no data 00127 FieldContainer<double> rank1ContainerAlt(dim0); 00128 00129 // Initialize variables 00130 containerSize = rank1Container.size(); 00131 containerRank = rank1Container.rank(); 00132 multiIndex.resize(containerRank); 00133 00134 if( rank1Container.size() != rank1ContainerAlt.size() ) { 00135 errorFlag++; 00136 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00137 *outStream << " Size using ctor with array of dimensions = " << rank1Container.size() << "\n"; 00138 *outStream << " Size using ctor with list of dimensions = " << rank1ContainerAlt.size() << "\n"; 00139 } 00140 00141 if( rank1Container.rank() != rank1ContainerAlt.rank() ) { 00142 errorFlag++; 00143 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00144 *outStream << " Rank using ctor with array of dimensions = " << rank1Container.rank() << "\n"; 00145 *outStream << " Rank using ctor with list of dimensions = " << rank1ContainerAlt.rank() << "\n"; 00146 } 00147 00148 for(int dim = 0; dim < rank1Container.rank(); dim ++ ) { 00149 if( rank1Container.dimension(dim) != rank1ContainerAlt.dimension(dim) ) { 00150 errorFlag++; 00151 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00152 *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank1Container.dimension(dim) << "\n"; 00153 *outStream << " Dimension " << dim << " using ctor with list of dimensions = " << rank1ContainerAlt.dimension(dim) << "\n"; 00154 } 00155 } 00156 00157 *outStream \ 00158 << "\n" 00159 << "===============================================================================\n"\ 00160 << "| TEST 1-b: Access by enumeration, multi-index array and multi-index list |\n"\ 00161 << "===============================================================================\n"; 00162 00163 // Loop over container by enumeration 00164 for(int enumeration = 0; enumeration < containerSize; enumeration++) { 00165 int i0; 00166 00167 // Convert enumeration to multi-index array and multi-index list and compare values 00168 rank1Container.getMultiIndex(multiIndex, enumeration); 00169 rank1Container.getMultiIndex(i0, enumeration); 00170 if( (multiIndex[0] != i0) ) { 00171 errorFlag++; 00172 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00173 *outStream << " Multi-index as array = [" 00174 << multiIndex[0] << "]\n"; 00175 *outStream << " Multi-index as list = (" << i0 << ")\n"; 00176 } 00177 00178 // Check if access by enumeration gives the same value as access by multi-index array 00179 if( rank1Container[enumeration] != rank1Container.getValue(multiIndex) ) { 00180 errorFlag++; 00181 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00182 *outStream << " Value by enumeration = " << rank1Container[enumeration] << "\n"; 00183 *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n"; 00184 } 00185 00186 // Check if access by multi-index list gives the same value as access by multi-index array 00187 if( rank1Container(i0) != rank1Container.getValue(multiIndex) ) { 00188 errorFlag++; 00189 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00190 *outStream << " Value by multi-index list = " << rank1Container(i0) << "\n"; 00191 *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n"; 00192 } 00193 00194 // Check if access by multi-index list gives the same value as access by [] (only for rank-1!) 00195 if( rank1Container(i0) != rank1Container[i0] ) { 00196 errorFlag++; 00197 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00198 *outStream << " Value by multi-index list = " << rank1Container(i0) << "\n"; 00199 *outStream << " Value by overloaded [] = " << rank1Container[i0] << "\n"; 00200 } 00201 } 00202 00203 *outStream \ 00204 << "\n" 00205 << "===============================================================================\n"\ 00206 << "| TEST 1-c: Access by multi-index array and list & compare with data array |\n"\ 00207 << "===============================================================================\n"; 00208 00209 // Loop over container by multi-index 00210 for(int i=0; i < dimension[0]; i++){ 00211 multiIndex[0] = i; 00212 00213 // Method that takes array of multi-indices 00214 int enumeration = rank1Container.getEnumeration(multiIndex); 00215 00216 // Compare with method that takes a list of multi-indices 00217 if( enumeration != rank1Container.getEnumeration(i) ) { 00218 errorFlag++; 00219 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00220 *outStream << " Enumeration from multi-index array = " << enumeration << "\n"; 00221 *outStream << " Enumeration from multi-index list = " << rank1Container.getEnumeration(i) << "\n"; 00222 } 00223 00224 // Check if access by multi-index array matches values in original dataArray 00225 if(dataArray[enumeration] != rank1Container.getValue(multiIndex)) { 00226 errorFlag++; 00227 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00228 *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n"; 00229 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00230 } 00231 00232 // Check if access by multi-index list matches values in original dataArray 00233 if(dataArray[enumeration] != rank1Container(i)) { 00234 errorFlag++; 00235 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00236 *outStream << " Value by multi-index list = " << rank1Container(i) << "\n"; 00237 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00238 } 00239 00240 // Check if access by multi-index array matches access by multi-index list 00241 if( rank1Container(i) != rank1Container.getValue(multiIndex)) { 00242 errorFlag++; 00243 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00244 *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n"; 00245 *outStream << " Value by multi-index list = " << rank1Container(i) << "\n"; 00246 } 00247 } 00248 00249 *outStream \ 00250 << "\n" 00251 << "===============================================================================\n"\ 00252 << "| TEST 1-d: Store zeroes and empty container |\n"\ 00253 << "===============================================================================\n"; 00254 00255 rank1Container.initialize(); 00256 double sum = 0.0; 00257 for (int i=0; i<rank1Container.size(); i++) { 00258 sum += rank1Container[i]; 00259 } 00260 if( (sum != 0.0) ) { 00261 errorFlag++; 00262 *outStream << " Container size = " << rank1Container.size() << "\n"; 00263 *outStream << " Container rank = " << rank1Container.rank() << "\n"; 00264 } 00265 00266 rank1Container.clear(); 00267 if( !(rank1Container.size() == 0 && rank1Container.rank() == 0)) { 00268 errorFlag++; 00269 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00270 *outStream << " Container size = " << rank1Container.size() << "\n"; 00271 *outStream << " Container rank = " << rank1Container.rank() << "\n"; 00272 } 00273 } //try 00274 00275 catch (std::logic_error err) { 00276 *outStream << err.what() << "\n"; 00277 errorFlag = -1000; 00278 }; 00279 00280 00281 *outStream \ 00282 << "\n" 00283 << "===============================================================================\n"\ 00284 << "| TEST 2: Rank-2 FieldContainer |\n"\ 00285 << "===============================================================================\n"; 00286 00287 // Adjust for rank-2 containers 00288 dimension.resize(2); 00289 multiIndex.resize(2); 00290 dim0 = 1; 00291 dim1 = 55; 00292 00293 // Set dimensions 00294 dimension[0] = dim0; 00295 dimension[1] = dim1; 00296 00297 // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension) 00298 dataSize = dimension[0]; 00299 for(int r = 1; r < (int)dimension.size(); r++){ 00300 dataSize *= dimension[r]; 00301 } 00302 dataArray.resize(dataSize); 00303 00304 // Fill with data 00305 counter = 0; 00306 for(int i=0; i < dimension[0]; i++){ 00307 for(int j=0; j < dimension[1]; j++){ 00308 dataArray[counter] = (double)counter; 00309 counter++; 00310 } 00311 } 00312 00313 *outStream \ 00314 << "\n" 00315 << "===============================================================================\n"\ 00316 << "| TEST 2-a: Compare constructors with array and list of dimensions |\n"\ 00317 << "===============================================================================\n"; 00318 try{ 00319 00320 // Using ctor with array of dimensions and array of data 00321 FieldContainer<double> rank2Container(dimension, dataArray); 00322 00323 // Using ctor with list of dimensions and no data 00324 FieldContainer<double> rank2ContainerAlt(dim0, dim1); 00325 00326 // Initialize variables 00327 containerSize = rank2Container.size(); 00328 containerRank = rank2Container.rank(); 00329 multiIndex.resize(containerRank); 00330 00331 if( rank2Container.size() != rank2ContainerAlt.size() ) { 00332 errorFlag++; 00333 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00334 *outStream << " Size using ctor with array of dimensions = " << rank2Container.size() << "\n"; 00335 *outStream << " Size using ctor with list of dimensions = " << rank2ContainerAlt.size() << "\n"; 00336 } 00337 00338 if( rank2Container.rank() != rank2ContainerAlt.rank() ) { 00339 errorFlag++; 00340 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00341 *outStream << " Rank using ctor with array of dimensions = " << rank2Container.rank() << "\n"; 00342 *outStream << " Rank using ctor with list of dimensions = " << rank2ContainerAlt.rank() << "\n"; 00343 } 00344 00345 for(int dim = 0; dim < rank2Container.rank(); dim ++ ) { 00346 if( rank2Container.dimension(dim) != rank2ContainerAlt.dimension(dim) ) { 00347 errorFlag++; 00348 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00349 *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank2Container.dimension(dim) << "\n"; 00350 *outStream << " Dimension " << dim << " using ctor with list of dimensions = " << rank2ContainerAlt.dimension(dim) << "\n"; 00351 } 00352 } 00353 00354 *outStream \ 00355 << "\n" 00356 << "===============================================================================\n"\ 00357 << "| TEST 2-b: Access by enumeration, multi-index array and multi-index list |\n"\ 00358 << "===============================================================================\n"; 00359 00360 // Loop over container by enumeration 00361 for(int enumeration = 0; enumeration < containerSize; enumeration++) { 00362 int i0,i1; 00363 00364 // Convert enumeration to multi-index array and multi-index list and compare values 00365 rank2Container.getMultiIndex(multiIndex, enumeration); 00366 rank2Container.getMultiIndex(i0, i1, enumeration); 00367 if( (multiIndex[0] != i0) || 00368 (multiIndex[1] != i1) ) { 00369 errorFlag++; 00370 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00371 *outStream << " Multi-index as array = [" 00372 << multiIndex[0] << multiIndex[1] << "]\n"; 00373 *outStream << " Multi-index as list = (" << i0 << "," << i1 << ")\n"; 00374 } 00375 00376 // Check if access by enumeration gives the same value as access by multi-index array 00377 if( rank2Container[enumeration] != rank2Container.getValue(multiIndex) ) { 00378 errorFlag++; 00379 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00380 *outStream << " Value by enumeration = " << rank2Container[enumeration] << "\n"; 00381 *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n"; 00382 } 00383 00384 // Check if access by multi-index list gives the same value as access by multi-index array 00385 if( rank2Container(i0,i1) != rank2Container.getValue(multiIndex) ) { 00386 errorFlag++; 00387 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00388 *outStream << " Value by multi-index list = " << rank2Container(i0,i1) << "\n"; 00389 *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n"; 00390 } 00391 } 00392 00393 *outStream \ 00394 << "\n" 00395 << "===============================================================================\n"\ 00396 << "| TEST 2-c: Access by multi-index array and list & compare with data array |\n"\ 00397 << "===============================================================================\n"; 00398 00399 // Loop over container by multi-index 00400 for(int i=0; i < dimension[0]; i++){ 00401 multiIndex[0] = i; 00402 for(int j=0; j < dimension[1]; j++){ 00403 multiIndex[1] = j; 00404 00405 // Method that takes array of multi-indices 00406 int enumeration = rank2Container.getEnumeration(multiIndex); 00407 00408 // Compare with method that takes a list of multi-indices 00409 if( enumeration != rank2Container.getEnumeration(i,j) ) { 00410 errorFlag++; 00411 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00412 *outStream << " Enumeration from multi-index array = " << enumeration << "\n"; 00413 *outStream << " Enumeration from multi-index list = " << rank2Container.getEnumeration(i,j) << "\n"; 00414 } 00415 00416 // Check if access by multi-index array matches values in original dataArray 00417 if(dataArray[enumeration] != rank2Container.getValue(multiIndex)) { 00418 errorFlag++; 00419 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00420 *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n"; 00421 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00422 } 00423 00424 // Check if access by multi-index list matches values in original dataArray 00425 if(dataArray[enumeration] != rank2Container(i,j)) { 00426 errorFlag++; 00427 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00428 *outStream << " Value by multi-index list = " << rank2Container(i,j) << "\n"; 00429 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00430 } 00431 00432 // Check if access by multi-index array matches access by multi-index list 00433 if( rank2Container(i,j) != rank2Container.getValue(multiIndex)) { 00434 errorFlag++; 00435 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00436 *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n"; 00437 *outStream << " Value by multi-index list = " << rank2Container(i,j) << "\n"; 00438 } 00439 } 00440 } 00441 00442 *outStream \ 00443 << "\n" 00444 << "===============================================================================\n"\ 00445 << "| TEST 2-d: Store zeroes and empty container |\n"\ 00446 << "===============================================================================\n"; 00447 00448 rank2Container.initialize(); 00449 double sum = 0.0; 00450 for (int i=0; i<rank2Container.size(); i++) { 00451 sum += rank2Container[i]; 00452 } 00453 if( (sum != 0.0) ) { 00454 errorFlag++; 00455 *outStream << " Container size = " << rank2Container.size() << "\n"; 00456 *outStream << " Container rank = " << rank2Container.rank() << "\n"; 00457 } 00458 00459 rank2Container.clear(); 00460 if( !(rank2Container.size() == 0 && rank2Container.rank() == 0)) { 00461 errorFlag++; 00462 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00463 *outStream << " Container size = " << rank2Container.size() << "\n"; 00464 *outStream << " Container rank = " << rank2Container.rank() << "\n"; 00465 } 00466 } //try 00467 00468 catch (std::logic_error err) { 00469 *outStream << err.what() << "\n"; 00470 errorFlag = -1000; 00471 }; 00472 00473 00474 00475 *outStream \ 00476 << "\n" 00477 << "===============================================================================\n"\ 00478 << "| TEST 3: Rank-3 FieldContainer |\n"\ 00479 << "===============================================================================\n"; 00480 00481 // Adjust for rank-3 containers 00482 dimension.resize(3); 00483 multiIndex.resize(3); 00484 dim0 = 17; 00485 dim1 = 55; 00486 dim2 = 10; 00487 00488 // Set dimensions 00489 dimension[0] = dim0; 00490 dimension[1] = dim1; 00491 dimension[2] = dim2; 00492 00493 // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension) 00494 dataSize = dimension[0]; 00495 for(int r = 1; r < (int)dimension.size(); r++){ 00496 dataSize *= dimension[r]; 00497 } 00498 dataArray.resize(dataSize); 00499 00500 // Fill with data 00501 counter = 0; 00502 for(int i=0; i < dimension[0]; i++){ 00503 for(int j=0; j < dimension[1]; j++){ 00504 for(int k=0; k < dimension[2]; k++){ 00505 dataArray[counter] = (double)counter; 00506 counter++; 00507 } 00508 } 00509 } 00510 00511 *outStream \ 00512 << "\n" 00513 << "===============================================================================\n"\ 00514 << "| TEST 3-a: Compare constructors with array and list of dimensions |\n"\ 00515 << "===============================================================================\n"; 00516 try{ 00517 00518 // Using ctor with array of dimensions and array of data 00519 FieldContainer<double> rank3Container(dimension, dataArray); 00520 00521 // Using ctor with list of dimensions and no data 00522 FieldContainer<double> rank3ContainerAlt(dim0, dim1, dim2); 00523 00524 // Initialize variables 00525 containerSize = rank3Container.size(); 00526 containerRank = rank3Container.rank(); 00527 multiIndex.resize(containerRank); 00528 00529 if( rank3Container.size() != rank3ContainerAlt.size() ) { 00530 errorFlag++; 00531 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00532 *outStream << " Size using ctor with array of dimensions = " << rank3Container.size() << "\n"; 00533 *outStream << " Size using ctor with list of dimensions = " << rank3ContainerAlt.size() << "\n"; 00534 } 00535 00536 if( rank3Container.rank() != rank3ContainerAlt.rank() ) { 00537 errorFlag++; 00538 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00539 *outStream << " Rank using ctor with array of dimensions = " << rank3Container.rank() << "\n"; 00540 *outStream << " Rank using ctor with list of dimensions = " << rank3ContainerAlt.rank() << "\n"; 00541 } 00542 00543 for(int dim = 0; dim < rank3Container.rank(); dim ++ ) { 00544 if( rank3Container.dimension(dim) != rank3ContainerAlt.dimension(dim) ) { 00545 errorFlag++; 00546 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00547 *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank3Container.dimension(dim) << "\n"; 00548 *outStream << " Dimension " << dim << " using ctor with list of dimensions = " << rank3ContainerAlt.dimension(dim) << "\n"; 00549 } 00550 } 00551 00552 *outStream \ 00553 << "\n" 00554 << "===============================================================================\n"\ 00555 << "| TEST 3-b: Access by enumeration, multi-index array and multi-index list |\n"\ 00556 << "===============================================================================\n"; 00557 00558 // Loop over container by enumeration 00559 for(int enumeration = 0; enumeration < containerSize; enumeration++) { 00560 int i0,i1,i2; 00561 00562 // Convert enumeration to multi-index array and multi-index list and compare values 00563 rank3Container.getMultiIndex(multiIndex, enumeration); 00564 rank3Container.getMultiIndex(i0, i1, i2, enumeration); 00565 if( (multiIndex[0] != i0) || 00566 (multiIndex[1] != i1) || 00567 (multiIndex[2] != i2) ) { 00568 errorFlag++; 00569 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00570 *outStream << " Multi-index as array = [" 00571 << multiIndex[0] << multiIndex[1] << multiIndex[2] << "]\n"; 00572 *outStream << " Multi-index as list = (" << i0 << "," << i1 << "," << i2 << ")\n"; 00573 } 00574 00575 // Check if access by enumeration gives the same value as access by multi-index array 00576 if( rank3Container[enumeration] != rank3Container.getValue(multiIndex) ) { 00577 errorFlag++; 00578 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00579 *outStream << " Value by enumeration = " << rank3Container[enumeration] << "\n"; 00580 *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n"; 00581 } 00582 00583 // Check if access by multi-index list gives the same value as access by multi-index array 00584 if( rank3Container(i0,i1,i2) != rank3Container.getValue(multiIndex) ) { 00585 errorFlag++; 00586 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00587 *outStream << " Value by multi-index list = " << rank3Container(i0,i1,i2) << "\n"; 00588 *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n"; 00589 } 00590 } 00591 00592 *outStream \ 00593 << "\n" 00594 << "===============================================================================\n"\ 00595 << "| TEST 3-c: Access by multi-index array and list & compare with data array |\n"\ 00596 << "===============================================================================\n"; 00597 00598 // Loop over container by multi-index 00599 for(int i=0; i < dimension[0]; i++){ 00600 multiIndex[0] = i; 00601 for(int j=0; j < dimension[1]; j++){ 00602 multiIndex[1] = j; 00603 for(int k=0; k < dimension[2]; k++){ 00604 multiIndex[2] = k; 00605 00606 // Method that takes array of multi-indices 00607 int enumeration = rank3Container.getEnumeration(multiIndex); 00608 00609 // Compare with method that takes a list of multi-indices 00610 if( enumeration != rank3Container.getEnumeration(i,j,k) ) { 00611 errorFlag++; 00612 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00613 *outStream << " Enumeration from multi-index array = " << enumeration << "\n"; 00614 *outStream << " Enumeration from multi-index list = " << rank3Container.getEnumeration(i,j,k) << "\n"; 00615 } 00616 00617 // Check if access by multi-index array matches values in original dataArray 00618 if(dataArray[enumeration] != rank3Container.getValue(multiIndex)) { 00619 errorFlag++; 00620 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00621 *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n"; 00622 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00623 } 00624 00625 // Check if access by multi-index list matches values in original dataArray 00626 if(dataArray[enumeration] != rank3Container(i,j,k)) { 00627 errorFlag++; 00628 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00629 *outStream << " Value by multi-index list = " << rank3Container(i,j,k) << "\n"; 00630 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00631 } 00632 00633 // Check if access by multi-index array matches access by multi-index list 00634 if( rank3Container(i,j,k) != rank3Container.getValue(multiIndex)) { 00635 errorFlag++; 00636 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00637 *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n"; 00638 *outStream << " Value by multi-index list = " << rank3Container(i,j,k) << "\n"; 00639 } 00640 } 00641 } 00642 } 00643 00644 *outStream \ 00645 << "\n" 00646 << "===============================================================================\n"\ 00647 << "| TEST 3-d: Store zeroes and empty container |\n"\ 00648 << "===============================================================================\n"; 00649 00650 rank3Container.initialize(); 00651 double sum = 0.0; 00652 for (int i=0; i<rank3Container.size(); i++) { 00653 sum += rank3Container[i]; 00654 } 00655 if( (sum != 0.0) ) { 00656 errorFlag++; 00657 *outStream << " Container size = " << rank3Container.size() << "\n"; 00658 *outStream << " Container rank = " << rank3Container.rank() << "\n"; 00659 } 00660 00661 rank3Container.clear(); 00662 if( !(rank3Container.size() == 0 && rank3Container.rank() == 0)) { 00663 errorFlag++; 00664 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00665 *outStream << " Container size = " << rank3Container.size() << "\n"; 00666 *outStream << " Container rank = " << rank3Container.rank() << "\n"; 00667 } 00668 } //try 00669 00670 catch (std::logic_error err) { 00671 *outStream << err.what() << "\n"; 00672 errorFlag = -1000; 00673 }; 00674 00675 00676 00677 *outStream \ 00678 << "\n" 00679 << "===============================================================================\n"\ 00680 << "| TEST 4: Rank-4 FieldContainer |\n"\ 00681 << "===============================================================================\n"; 00682 00683 // Adjust for rank-4 containers 00684 dimension.resize(4); 00685 multiIndex.resize(4); 00686 dim0 = 27; 00687 dim1 = 4; 00688 dim2 = 11; 00689 dim3 = 6; 00690 00691 // Set dimensions 00692 dimension[0] = dim0; 00693 dimension[1] = dim1; 00694 dimension[2] = dim2; 00695 dimension[3] = dim3; 00696 00697 // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension) 00698 dataSize = dimension[0]; 00699 for(int r = 1; r < (int)dimension.size(); r++){ 00700 dataSize *= dimension[r]; 00701 } 00702 dataArray.resize(dataSize); 00703 00704 // Fill with data 00705 counter = 0; 00706 for(int i=0; i < dimension[0]; i++){ 00707 for(int j=0; j < dimension[1]; j++){ 00708 for(int k=0; k < dimension[2]; k++){ 00709 for(int l = 0; l < dimension[3]; l++){ 00710 dataArray[counter] = (double)counter; 00711 counter++; 00712 } 00713 } 00714 } 00715 } 00716 00717 *outStream \ 00718 << "\n" 00719 << "===============================================================================\n"\ 00720 << "| TEST 4-a: Compare constructors with array and list of dimensions |\n"\ 00721 << "===============================================================================\n"; 00722 try{ 00723 00724 // Using ctor with array of dimensions and array of data 00725 FieldContainer<double> rank4Container(dimension, dataArray); 00726 00727 // Using ctor with list of dimensions and no data 00728 FieldContainer<double> rank4ContainerAlt(dim0, dim1, dim2, dim3); 00729 00730 // Initialize variables 00731 containerSize = rank4Container.size(); 00732 containerRank = rank4Container.rank(); 00733 multiIndex.resize(containerRank); 00734 00735 if( rank4Container.size() != rank4ContainerAlt.size() ) { 00736 errorFlag++; 00737 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00738 *outStream << " Size using ctor with array of dimensions = " << rank4Container.size() << "\n"; 00739 *outStream << " Size using ctor with list of dimensions = " << rank4ContainerAlt.size() << "\n"; 00740 } 00741 00742 if( rank4Container.rank() != rank4ContainerAlt.rank() ) { 00743 errorFlag++; 00744 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00745 *outStream << " Rank using ctor with array of dimensions = " << rank4Container.rank() << "\n"; 00746 *outStream << " Rank using ctor with list of dimensions = " << rank4ContainerAlt.rank() << "\n"; 00747 } 00748 00749 for(int dim = 0; dim < rank4Container.rank(); dim ++ ) { 00750 if( rank4Container.dimension(dim) != rank4ContainerAlt.dimension(dim) ) { 00751 errorFlag++; 00752 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00753 *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank4Container.dimension(dim) << "\n"; 00754 *outStream << " Dimension " << dim << " using ctor with list of dimensions = " << rank4ContainerAlt.dimension(dim) << "\n"; 00755 } 00756 } 00757 00758 *outStream \ 00759 << "\n" 00760 << "===============================================================================\n"\ 00761 << "| TEST 4-b: Access by enumeration, multi-index array and multi-index list |\n"\ 00762 << "===============================================================================\n"; 00763 00764 // Loop over container by enumeration 00765 for(int enumeration = 0; enumeration < containerSize; enumeration++) { 00766 int i0,i1,i2,i3; 00767 00768 // Convert enumeration to multi-index array and multi-index list and compare values 00769 rank4Container.getMultiIndex(multiIndex, enumeration); 00770 rank4Container.getMultiIndex(i0, i1, i2, i3, enumeration); 00771 if( (multiIndex[0] != i0) || 00772 (multiIndex[1] != i1) || 00773 (multiIndex[2] != i2) || 00774 (multiIndex[3] != i3) ) { 00775 errorFlag++; 00776 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00777 *outStream << " Multi-index as array = [" 00778 << multiIndex[0] << multiIndex[1] << multiIndex[2] << multiIndex[3] << "]\n"; 00779 *outStream << " Multi-index as list = (" << i0 << "," << i1 << "," << i2 << "," << i3 << ")\n"; 00780 } 00781 00782 // Check if access by enumeration gives the same value as access by multi-index array 00783 if( rank4Container[enumeration] != rank4Container.getValue(multiIndex) ) { 00784 errorFlag++; 00785 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00786 *outStream << " Value by enumeration = " << rank4Container[enumeration] << "\n"; 00787 *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n"; 00788 } 00789 00790 // Check if access by multi-index list gives the same value as access by multi-index array 00791 if( rank4Container(i0,i1,i2,i3) != rank4Container.getValue(multiIndex) ) { 00792 errorFlag++; 00793 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00794 *outStream << " Value by multi-index list = " << rank4Container(i0,i1,i2,i3) << "\n"; 00795 *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n"; 00796 } 00797 } 00798 00799 *outStream \ 00800 << "\n" 00801 << "===============================================================================\n"\ 00802 << "| TEST 4-c: Access by multi-index array and list & compare with data array |\n"\ 00803 << "===============================================================================\n"; 00804 00805 // Loop over container by multi-index 00806 for(int i=0; i < dimension[0]; i++){ 00807 multiIndex[0] = i; 00808 for(int j=0; j < dimension[1]; j++){ 00809 multiIndex[1] = j; 00810 for(int k=0; k < dimension[2]; k++){ 00811 multiIndex[2] = k; 00812 for(int l = 0; l < dimension[3]; l++){ 00813 multiIndex[3] = l; 00814 00815 // Method that takes array of multi-indices 00816 int enumeration = rank4Container.getEnumeration(multiIndex); 00817 00818 // Compare with method that takes a list of multi-indices 00819 if( enumeration != rank4Container.getEnumeration(i,j,k,l) ) { 00820 errorFlag++; 00821 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00822 *outStream << " Enumeration from multi-index array = " << enumeration << "\n"; 00823 *outStream << " Enumeration from multi-index list = " << rank4Container.getEnumeration(i,j,k,l) << "\n"; 00824 } 00825 00826 // Check if access by multi-index array matches values in original dataArray 00827 if(dataArray[enumeration] != rank4Container.getValue(multiIndex)) { 00828 errorFlag++; 00829 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00830 *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n"; 00831 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00832 } 00833 00834 // Check if access by multi-index list matches values in original dataArray 00835 if(dataArray[enumeration] != rank4Container(i,j,k,l)) { 00836 errorFlag++; 00837 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00838 *outStream << " Value by multi-index list = " << rank4Container(i,j,k,l) << "\n"; 00839 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 00840 } 00841 00842 // Check if access by multi-index array matches access by multi-index list 00843 if( rank4Container(i,j,k,l) != rank4Container.getValue(multiIndex)) { 00844 errorFlag++; 00845 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00846 *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n"; 00847 *outStream << " Value by multi-index list = " << rank4Container(i,j,k,l) << "\n"; 00848 } 00849 } 00850 } 00851 } 00852 } 00853 00854 *outStream \ 00855 << "\n" 00856 << "===============================================================================\n"\ 00857 << "| TEST 4-d: Store zeroes and empty container |\n"\ 00858 << "===============================================================================\n"; 00859 00860 rank4Container.initialize(); 00861 double sum = 0.0; 00862 for (int i=0; i<rank4Container.size(); i++) { 00863 sum += rank4Container[i]; 00864 } 00865 if( (sum != 0.0) ) { 00866 errorFlag++; 00867 *outStream << " Container size = " << rank4Container.size() << "\n"; 00868 *outStream << " Container rank = " << rank4Container.rank() << "\n"; 00869 } 00870 00871 rank4Container.clear(); 00872 if( !(rank4Container.size() == 0 && rank4Container.rank() == 0)) { 00873 errorFlag++; 00874 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00875 *outStream << " Container size = " << rank4Container.size() << "\n"; 00876 *outStream << " Container rank = " << rank4Container.rank() << "\n"; 00877 } 00878 } //try 00879 00880 catch (std::logic_error err) { 00881 *outStream << err.what() << "\n"; 00882 errorFlag = -1000; 00883 }; 00884 00885 00886 *outStream \ 00887 << "\n" 00888 << "===============================================================================\n"\ 00889 << "| TEST 5: Rank-5 FieldContainer |\n"\ 00890 << "===============================================================================\n"; 00891 00892 // Adjust for rank-5 containers 00893 dimension.resize(5); 00894 multiIndex.resize(5); 00895 dim0 = 3; 00896 dim1 = 7; 00897 dim2 = 11; 00898 dim3 = 5; 00899 dim4 = 6; 00900 00901 // Set dimensions 00902 dimension[0] = dim0; 00903 dimension[1] = dim1; 00904 dimension[2] = dim2; 00905 dimension[3] = dim3; 00906 dimension[4] = dim4; 00907 00908 // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension) 00909 dataSize = dimension[0]; 00910 for(int r = 1; r < (int)dimension.size(); r++){ 00911 dataSize *= dimension[r]; 00912 } 00913 dataArray.resize(dataSize); 00914 00915 // Fill with data 00916 counter = 0; 00917 for(int i=0; i < dimension[0]; i++){ 00918 for(int j=0; j < dimension[1]; j++){ 00919 for(int k=0; k < dimension[2]; k++){ 00920 for(int l = 0; l < dimension[3]; l++){ 00921 for(int m = 0; m < dimension[4]; m++){ 00922 dataArray[counter] = (double)counter; 00923 counter++; 00924 } 00925 } 00926 } 00927 } 00928 } 00929 00930 *outStream \ 00931 << "\n" 00932 << "===============================================================================\n"\ 00933 << "| TEST 5-a: Compare constructors with array and list of dimensions |\n"\ 00934 << "===============================================================================\n"; 00935 try{ 00936 00937 // Using ctor with array of dimensions and array of data 00938 FieldContainer<double> rank5Container(dimension, dataArray); 00939 00940 // Using ctor with list of dimensions and no data 00941 FieldContainer<double> rank5ContainerAlt(dim0, dim1, dim2, dim3, dim4); 00942 00943 // Initialize variables 00944 containerSize = rank5Container.size(); 00945 containerRank = rank5Container.rank(); 00946 multiIndex.resize(containerRank); 00947 00948 if( rank5Container.size() != rank5ContainerAlt.size() ) { 00949 errorFlag++; 00950 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00951 *outStream << " Size using ctor with array of dimensions = " << rank5Container.size() << "\n"; 00952 *outStream << " Size using ctor with list of dimensions = " << rank5ContainerAlt.size() << "\n"; 00953 } 00954 00955 if( rank5Container.rank() != rank5ContainerAlt.rank() ) { 00956 errorFlag++; 00957 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00958 *outStream << " Rank using ctor with array of dimensions = " << rank5Container.rank() << "\n"; 00959 *outStream << " Rank using ctor with list of dimensions = " << rank5ContainerAlt.rank() << "\n"; 00960 } 00961 00962 for(int dim = 0; dim < rank5Container.rank(); dim ++ ) { 00963 if( rank5Container.dimension(dim) != rank5ContainerAlt.dimension(dim) ) { 00964 errorFlag++; 00965 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00966 *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank5Container.dimension(dim) << "\n"; 00967 *outStream << " Dimension " << dim << " using ctor with list of dimensions = " << rank5ContainerAlt.dimension(dim) << "\n"; 00968 } 00969 } 00970 00971 *outStream \ 00972 << "\n" 00973 << "===============================================================================\n"\ 00974 << "| TEST 5-b: Access by enumeration, multi-index array and multi-index list |\n"\ 00975 << "===============================================================================\n"; 00976 00977 // Loop over container by enumeration 00978 for(int enumeration = 0; enumeration < containerSize; enumeration++) { 00979 int i0,i1,i2,i3,i4; 00980 00981 // Convert enumeration to multi-index array and multi-index list and compare values 00982 rank5Container.getMultiIndex(multiIndex, enumeration); 00983 rank5Container.getMultiIndex(i0, i1, i2, i3, i4, enumeration); 00984 if( (multiIndex[0] != i0) || 00985 (multiIndex[1] != i1) || 00986 (multiIndex[2] != i2) || 00987 (multiIndex[3] != i3) || 00988 (multiIndex[4] != i4) ) { 00989 errorFlag++; 00990 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 00991 *outStream << " Multi-index as array = [" 00992 << multiIndex[0] << multiIndex[1] << multiIndex[2] << multiIndex[3] << multiIndex[4] << "]\n"; 00993 *outStream << " Multi-index as list = (" << i0 << "," << i1 << "," << i2 << "," << i3 << "," << i4 << ")\n"; 00994 } 00995 00996 // Check if access by enumeration gives the same value as access by multi-index array 00997 if( rank5Container[enumeration] != rank5Container.getValue(multiIndex) ) { 00998 errorFlag++; 00999 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01000 *outStream << " Value by enumeration = " << rank5Container[enumeration] << "\n"; 01001 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n"; 01002 } 01003 01004 // Check if access by multi-index list gives the same value as access by multi-index array 01005 if( rank5Container(i0,i1,i2,i3,i4) != rank5Container.getValue(multiIndex) ) { 01006 errorFlag++; 01007 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01008 *outStream << " Value by multi-index list = " << rank5Container(i0,i1,i2,i3,i4) << "\n"; 01009 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n"; 01010 } 01011 } 01012 01013 *outStream \ 01014 << "\n" 01015 << "===============================================================================\n"\ 01016 << "| TEST 5-c: Access by multi-index array and list & compare with data array |\n"\ 01017 << "===============================================================================\n"; 01018 01019 // Loop over container by multi-index 01020 for(int i=0; i < dimension[0]; i++){ 01021 multiIndex[0] = i; 01022 for(int j=0; j < dimension[1]; j++){ 01023 multiIndex[1] = j; 01024 for(int k=0; k < dimension[2]; k++){ 01025 multiIndex[2] = k; 01026 for(int l = 0; l < dimension[3]; l++){ 01027 multiIndex[3] = l; 01028 for(int m = 0; m < dimension[4]; m++){ 01029 multiIndex[4] = m; 01030 01031 // Method that takes array of multi-indices 01032 int enumeration = rank5Container.getEnumeration(multiIndex); 01033 01034 // Compare with method that takes a list of multi-indices 01035 if( enumeration != rank5Container.getEnumeration(i,j,k,l,m) ) { 01036 errorFlag++; 01037 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01038 *outStream << " Enumeration from multi-index array = " << enumeration << "\n"; 01039 *outStream << " Enumeration from multi-index list = " << rank5Container.getEnumeration(i,j,k,l,m) << "\n"; 01040 } 01041 01042 // Check if access by multi-index array matches values in original dataArray 01043 if(dataArray[enumeration] != rank5Container.getValue(multiIndex)) { 01044 errorFlag++; 01045 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01046 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n"; 01047 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 01048 } 01049 01050 // Check if access by multi-index list matches values in original dataArray 01051 if(dataArray[enumeration] != rank5Container(i,j,k,l,m)) { 01052 errorFlag++; 01053 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01054 *outStream << " Value by multi-index list = " << rank5Container(i,j,k,l,m) << "\n"; 01055 *outStream << " Value from data array = " << dataArray[enumeration] << "\n"; 01056 } 01057 01058 // Check if access by multi-index array matches access by multi-index list 01059 if( rank5Container(i,j,k,l,m) != rank5Container.getValue(multiIndex)) { 01060 errorFlag++; 01061 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01062 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n"; 01063 *outStream << " Value by multi-index list = " << rank5Container(i,j,k,l,m) << "\n"; 01064 } 01065 } 01066 } 01067 } 01068 } 01069 } 01070 01071 *outStream \ 01072 << "\n" 01073 << "===============================================================================\n"\ 01074 << "| TEST 5-d: Store zeroes and empty container |\n"\ 01075 << "===============================================================================\n"; 01076 01077 rank5Container.initialize(); 01078 double sum = 0.0; 01079 for (int i=0; i<rank5Container.size(); i++) { 01080 sum += rank5Container[i]; 01081 } 01082 if( (sum != 0.0) ) { 01083 errorFlag++; 01084 *outStream << " Container size = " << rank5Container.size() << "\n"; 01085 *outStream << " Container rank = " << rank5Container.rank() << "\n"; 01086 } 01087 01088 rank5Container.clear(); 01089 if( !(rank5Container.size() == 0 && rank5Container.rank() == 0)) { 01090 errorFlag++; 01091 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01092 *outStream << " Container size = " << rank5Container.size() << "\n"; 01093 *outStream << " Container rank = " << rank5Container.rank() << "\n"; 01094 } 01095 } //try 01096 01097 catch (std::logic_error err) { 01098 *outStream << err.what() << "\n"; 01099 errorFlag = -1000; 01100 }; 01101 01102 *outStream \ 01103 << "\n" 01104 << "===============================================================================\n"\ 01105 << "| TEST 6: Resize container based on another container |\n"\ 01106 << "===============================================================================\n"; 01107 01108 try{ 01109 FieldContainer<double> myContainer(1,2,3); 01110 FieldContainer<double> hisContainer(5,4,3,2); 01111 01112 hisContainer.resize(myContainer); 01113 if ( hisContainer.rank() != myContainer.rank() ) { 01114 errorFlag++; 01115 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01116 *outStream << " Rank of target container = " << hisContainer.rank() << "\n"; 01117 *outStream << " Rank of argument container = " << myContainer.rank() << "\n"; 01118 } 01119 01120 for(int dim = 0; dim < myContainer.rank(); dim++){ 01121 if ( hisContainer.dimension(dim) != myContainer.dimension(dim) ) { 01122 errorFlag++; 01123 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n"; 01124 *outStream << " Dimension " << dim << " of target container = " << hisContainer.dimension(dim) << "\n"; 01125 *outStream << " Dimension " << dim << " of argument container = " << myContainer.dimension(dim) << "\n"; 01126 } 01127 } 01128 }// try 01129 01130 catch (std::logic_error err) { 01131 *outStream << err.what() << "\n"; 01132 errorFlag = -1000; 01133 }; 01134 01135 01136 01137 01138 01139 01140 if (errorFlag != 0) 01141 std::cout << "End Result: TEST FAILED\n"; 01142 else 01143 std::cout << "End Result: TEST PASSED\n"; 01144 01145 // reset format state of std::cout 01146 std::cout.copyfmt(oldFormatState); 01147 01148 return errorFlag; 01149 }
1.7.4