/home/coin/SVN-release/OS-2.3.2/OS/test/unitTest.cpp

Go to the documentation of this file.
00001 /* $Id: unitTest.cpp 3835 2010-11-05 12:40:38Z Gassmann $ */
00105 #define DEBUG
00106 //#define GUS_DEBUG
00107 
00108 #include <cppad/cppad.hpp> 
00109 //#include "CoinUtilsConfig.h"
00110 #include "OSCoinSolver.h"
00111 #include "OSConfig.h"
00112 #include "OSmps2osil.h" 
00113 #include "OSResult.h" 
00114 #include "OSOption.h"
00115 #include "OSiLReader.h"        
00116 #include "OSiLWriter.h" 
00117 #include "OSoLReader.h"        
00118 #include "OSoLWriter.h" 
00119 #include "OSrLReader.h"          
00120 #include "OSrLWriter.h"      
00121 #include "OSInstance.h"  
00122 #include "OSFileUtil.h"  
00123 #include "CoinError.hpp"
00124 
00125 #include "OSDefaultSolver.h"  
00126 #include "OSWSUtil.h" 
00127 #include "OSSolverAgent.h"   
00128 #include "OShL.h"     
00129 #include "OSErrorClass.h"
00130 #include "OSBase64.h"
00131 #include "OSMathUtil.h"
00132 
00133 
00134 #include <CoinMpsIO.hpp>
00135 #include <CoinPackedMatrix.hpp>
00136 
00137 
00138 #include "CoinError.hpp"
00139 #include "CoinHelperFunctions.hpp"
00140 
00141 
00142 
00143 #ifdef COIN_HAS_GLPK
00144 #include <OsiGlpkSolverInterface.hpp>
00145 #endif
00146 
00147 #ifdef COIN_HAS_COUENNE    
00148 #include "OSCouenneSolver.h"
00149 #endif
00150 
00151 #ifdef COIN_HAS_ASL
00152 #include "OSnl2osil.h"
00153 #endif
00154 
00155 #ifdef COIN_HAS_LINDO    
00156 #include "OSLindoSolver.h"
00157 #endif  
00158 
00159 #ifdef COIN_HAS_IPOPT    
00160 #include "OSIpoptSolver.h"
00161 #endif 
00162 
00163 #ifdef COIN_HAS_BONMIN    
00164 #include "OSBonminSolver.h"
00165 #endif 
00166 
00167 #ifdef COIN_HAS_GAMSUTILS
00168 #include "OSgams2osil.hpp"
00169 #endif
00170 
00171 #ifdef HAVE_CTIME
00172 # include <ctime>
00173 #else
00174 # ifdef HAVE_TIME_H
00175 #  include <time.h>
00176 # else
00177 #  error "don't have header file for time"
00178 # endif
00179 #endif
00180 
00181 
00182 #ifdef HAVE_CMATH
00183 # include <cmath>
00184 #else
00185 # ifdef HAVE_CMATH_H
00186 #  include <cmath.h>
00187 # endif
00188 #endif
00189 
00190 
00191 
00192 #ifdef HAVE_CSTDIO
00193 # include <cstdio>
00194 #else
00195 # ifdef HAVE_STDIO_H
00196 #  include <stdio.h>
00197 # else
00198 #  error "don't have header file for stdio"
00199 # endif
00200 #endif
00201 
00202 //#ifdef HAVE_WINDOWS_H
00203 //#include <windows.h>
00204 //#endif
00205 
00206 using std::cout;   
00207 using std::endl;
00208 using std::ostringstream; 
00209 
00210 
00211 
00212 
00213 int main(int argC, char* argV[])
00214 {
00215 //#ifdef HAVE_WINDOWS_H
00216 //   SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
00217 //#endif 
00218         WindowsErrorPopupBlocker();
00219         double getObjVal(std::string osrl);
00220         //using CppAD::NearEqual;
00221         bool ok;
00222         double check;
00223         
00224         
00225         bool BASIC_TESTS;  // minimal functionality tests
00226         bool SOLVER_TESTS; // at least one problem for each solver
00227         bool THOROUGH;     // multiple problems for some solvers
00228         bool PARSER_TESTS; // test parser logic
00229         bool OTHER_TESTS;  // other input formats, automatic differentiation, etc.
00230         
00231         //set level of testing
00232       
00233         std::string testConfig = "install";
00234         int testLevel = 1;
00235         if( argC > 2){
00236                 std::cout << "Too Many Input Parameters" << std::endl;
00237                 return 1;
00238         }
00239         if(argC == 2){
00240                 testConfig = argV[ 1];
00241                 std::cout << "test configuration = \'" <<  testConfig << "\'"<< std::endl;
00242         }
00243 
00244 #ifdef GUS_DEBUG
00245         testConfig = "parser";
00246 #endif
00247 
00248         if (testConfig == "install") testLevel = 1;
00249         if (testConfig == "parser" ) testLevel = 2;
00250         if (testConfig == "parsers") testLevel = 2;
00251         if (testConfig == "solver" ) testLevel = 3;
00252         if (testConfig == "solvers") testLevel = 3;
00253         if (testConfig == "release") testLevel = 4;
00254         if (testConfig == "nightlyBuild") testLevel = 4;
00255         if (testConfig == "all") testLevel = 4;
00256         if (testConfig == "NB") testLevel = 4;
00257         if (testConfig == "nb") testLevel = 4;
00258 
00259         switch (testLevel){
00260         case 1:
00261                 BASIC_TESTS  = true;  
00262                 SOLVER_TESTS = true; 
00263                 THOROUGH     = false;     
00264                 PARSER_TESTS = false; 
00265                 OTHER_TESTS  = false;  
00266                 break;
00267         case 2:
00268                 BASIC_TESTS  = false;  
00269                 SOLVER_TESTS = false; 
00270                 THOROUGH     = false;     
00271                 PARSER_TESTS = true; 
00272                 OTHER_TESTS  = false;  
00273                 break;
00274         case 3:
00275                 BASIC_TESTS  = false;  
00276                 SOLVER_TESTS = true; 
00277                 THOROUGH     = true;     
00278                 PARSER_TESTS = false; 
00279                 OTHER_TESTS  = false;  
00280                 break;
00281         case 4:
00282         default:
00283                 BASIC_TESTS  = true;  
00284                 SOLVER_TESTS = true; 
00285                 THOROUGH     = true;     
00286                 PARSER_TESTS = true; 
00287                 OTHER_TESTS  = true;  
00288                 break;
00289         }
00290         
00291         if (BASIC_TESTS) std::cout << "Perform basic tests" << std::endl;
00292         if (SOLVER_TESTS) {
00293                 if (THOROUGH)
00294                         std::cout << "Perform thorough solver tests" << std::endl;
00295                 else
00296                         std::cout << "Perform simple solver tests" << std::endl;
00297         }
00298         if (PARSER_TESTS) std::cout << "Perform parser tests" << std::endl;
00299         if (OTHER_TESTS) std::cout << "Perform other tests" << std::endl;
00300         std::cout << std::endl << std::endl;
00301 
00302         // end level of testing 
00303         
00304         //return 0;
00305         cout << "START UNIT TEST" << endl;
00306         int nOfTest = 0;
00307         // define the classes
00308         FileUtil *fileUtil = NULL;  
00309 #ifdef COIN_HAS_ASL
00310         OSnl2osil *nl2osil = NULL;
00311 #endif 
00312         OSmps2osil *mps2osil = NULL;
00313         DefaultSolver *solver  = NULL;
00314         OSiLReader *osilreader = NULL;
00315         OSoLReader *osolreader = NULL;
00316         OSrLReader *osrlreader = NULL;
00317         OSrLWriter *osrlwriter = NULL;
00318         OSrLWriter *tmp_writer = NULL;
00319         // end classes    
00320         std::string osilFileName;
00321         std::string osolFileName;
00322         std::string osrlFileName;
00323         std::string nlFileName; 
00324         std::string mpsFileName;     
00325         std::string osil;
00326         std::string osol; 
00327         ostringstream unitTestResult;
00328         ostringstream unitTestResultFailure;
00329         // get the input files
00330          const char dirsep =  CoinFindDirSeparator();
00331         // Set directory containing mps data files.
00332         std::string dataDir;
00333     dataDir = dirsep == '/' ? "../data/" : "..\\data\\";
00334 #ifdef GUS_DEBUG
00335         dataDir = "C:\\datafiles\\research\\OS\\OS-trunk-work\\OS\\data\\";
00336 #endif
00337         nlFileName =  dataDir  + "amplFiles" + dirsep + "parinc.nl";
00338         mpsFileName =  dataDir + "mpsFiles" + dirsep + "parinc.mps";
00339         fileUtil = new FileUtil();
00340 
00341 
00342 if(BASIC_TESTS == true){
00343 
00344         //first make sure we can read files
00345         try{
00346                 std::cout << endl << "TEST " << ++nOfTest << ": Try to read a sample file" << endl << endl;
00347                 osilFileName =  dataDir  + "osilFiles" + dirsep +  "parincLinearByRow.osil";
00348                 //osilFileName =  dataDir  + "osilFiles" + dirsep +  "parincLinear.osil";
00349                 std::cout << "The file is: " ;
00350                 std::cout <<  osilFileName << std::endl;
00351                 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00352                 std::cout << "Done reading the test file" << std::endl;
00353                 osilreader = new OSiLReader(); 
00354                 //OSInstance *osinstance = osilreader->readOSiL( osil);
00355                 //osinstance->initForAlgDiff();
00356                 unitTestResult << "TEST " << nOfTest << ": Reading files successfully" << std::endl;
00357                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00358                 OSiLWriter osilwriter;
00359                 osilwriter.m_bWhiteSpace = true;
00360                 //std::cout << osilwriter.writeOSiL( osinstance) << std::endl;
00361                 delete osilreader;
00362                 osilreader = NULL;
00363                 //cout << "The unitTest passed the following" << endl << endl;
00364                 //cout << unitTestResult.str() << endl << endl;
00365                 /*
00366                 // below is just a bunch of misc. stuff kipp is testing
00367                 //
00368                 // Create a problem pointer.  We use the base class here.
00369                 OsiSolverInterface *si, *si2;
00370                 // When we instantiate the object, we need a specific derived class.
00371                 si = new OsiCbcSolverInterface;
00372                 // Read in an mps file.  This one's from the MIPLIB library.
00373                 si->readMps( mpsFileName.c_str());
00374                 // get the problem
00375                 // variable upper and lower bounds
00376                  const double *collb = si->getColLower();
00377                  const double *colub = si->getColUpper();               
00378                 // constraint upper and lower bound     
00379                 const  double *rowlb = si->getRowLower();
00380                 const  double *rowub = si->getRowUpper();               
00381                 //the Coin packed matrix
00382                 const CoinPackedMatrix *m_CoinPackedMatrix =  si->getMatrixByCol();             
00383                 //finally the objective function coefficieCnts          
00384                 const double *objcoef = si->getObjCoefficients();
00385                 //delete si;
00386                 si2 = new OsiCbcSolverInterface;
00387                 std::cout << objcoef[ 0] << std::endl;
00388                 // now load the problem
00389                 si2->loadProblem(*m_CoinPackedMatrix, collb, colub,  objcoef, rowlb, rowub);            
00390                 // Solve the (relaxation of the) problem
00391                 //si2->branchAndBound();        
00392                 delete si;
00393                 delete si2;
00394                 */
00395                 
00396                 
00397                 cout << endl << "TEST " << ++nOfTest << ": Lossless I/O" << endl << endl;
00398                 //mpsFileName =  dataDir + "mpsFiles" + dirsep + "testfile2.mps";
00399                 mpsFileName =  dataDir + "mpsFiles" + dirsep + "parinc.mps";
00400                 mps2osil = new OSmps2osil( mpsFileName);
00401                 // create the first in-memory OSInstance
00402                 mps2osil->createOSInstance() ;
00403                 // write the instance to a string
00404                 OSInstance *osinstance1 = mps2osil->osinstance;
00405                 std::string sOSiL = osilwriter.writeOSiL( osinstance1  );
00406 #ifdef DEBUG
00407                 cout << sOSiL << endl;
00408 #endif
00410                 // now create a second object
00411                 osilreader = new OSiLReader();
00412                 OSInstance *osinstance2 = osilreader->readOSiL( sOSiL);
00413                 // now compare the elements in the A matrix for the two instances
00414                 int nvals = osinstance1->instanceData->linearConstraintCoefficients->numberOfValues;
00415                 double theDiff, theMax;
00416                 int theIndex = -1;
00417                 theMax = 0;
00418                 for(int i = 0; i < nvals; i++){
00419                         theDiff = fabs(osinstance1->instanceData->linearConstraintCoefficients->value->el[ i] -
00420                                 osinstance2->instanceData->linearConstraintCoefficients->value->el[ i])/ fabs(osinstance1->instanceData->linearConstraintCoefficients->value->el[ i]);
00421                         if(theDiff > theMax){
00422                                 theMax = theDiff;
00423                                 theIndex = i;
00424                         }
00425                         //std::cout << theDiff << std::endl;
00426                 }
00427                 std::cout << "MAXIMUM DIFF = " << theMax << std::endl;
00428                 if(theMax > 0) 
00429                 {       std::cout << "MAXIMUM DIFF INDEX  = " << theIndex << std::endl;
00430                         unitTestResult << "WARNING:  you do not have lossless IO" << std::endl;
00431                 }
00432                 else 
00433                 {       unitTestResult << "TEST " << nOfTest << ": Passed lossless IO test" << std::endl;
00434                         cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00435                 }
00436                 delete mps2osil;
00437                 delete osilreader;
00438                 osilreader = NULL;
00439 
00440 
00441                 //nl2osil = new OSnl2osil( nlFileName);
00442             //return 0; 
00443                 /*
00444                 //using os_dtoa_format
00445                 MathUtil *mathUtil = new MathUtil();
00446             int decimalPoint; // where the decimal point goes
00447             int sign; // 1 if negative, 0 if positive
00448             double d ;
00449             d = -2./3.;
00450             //d = 123.4567;
00451             d = 1.23456589e-2;
00452             d = .00001123;
00453             char *result = os_dtoa(d, 0, 0, &decimalPoint, &sign, NULL);
00454             for(int kj = 5; kj < 9; kj++){
00455                 d = pow(10. ,kj) + pow(10., (kj-1));
00456                 //d = 57.7;
00457                 result =os_dtoa(d, 0, 0, &decimalPoint, &sign, NULL);
00458                 printf("HERE IS THE RESULT  %s\n\n", result);
00459                 printf("HERE IS THE RESULT of sign  %d\n\n", sign);
00460                 printf("HERE IS THE RESULT decimal point  %i\n\n", decimalPoint);
00461                 printf("HERE IS THE LENGTH OF THE RESULT  %d\n\n",  strlen(result));
00462                 std::cout << "HERE IS THE RESULT OF OS os_dtoa_format: " << os_dtoa_format( d) << std::endl;
00463             }
00464             d = .00001123;
00465             d = -2./3.;
00466             d = 100;
00467             result = os_dtoa(DBL_MAX, 0, 0, &decimalPoint, &sign, NULL);
00468         printf("HERE IS THE RESULT  %s\n\n", result);
00469         printf("HERE IS THE RESULT of sign  %d\n\n", sign);
00470         printf("HERE IS THE RESULT decimal point  %i\n\n", decimalPoint);
00471         printf("HERE IS THE LENGTH OF THE RESULT  %d\n\n",  strlen(result));
00472         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format: " << os_dtoa_format( OSDBL_MAX) << std::endl;    
00473         d = .000234;
00474             result = os_dtoa(d, 0, 0, &decimalPoint, &sign, NULL);
00475         printf("HERE IS THE RESULT  %s\n\n", result);
00476         printf("HERE IS THE RESULT of sign  %d\n\n", sign);
00477         printf("HERE IS THE RESULT decimal point  %i\n\n", decimalPoint);
00478         printf("HERE IS THE LENGTH OF THE RESULT  %d\n\n",  strlen(result));
00479         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format: " << os_dtoa_format( d) << std::endl;
00480         //
00481         char sInput[] = "77.77 99.99";
00482         char *pEnd;
00483         double d1, d2;
00484         d1 = os_strtod (sInput,  &pEnd);
00485         d2 = os_strtod (pEnd,NULL);
00486         std::cout << d1 << std::endl;
00487         std::cout << d2 << std::endl;
00488         
00489         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format OSDBL_MAX: " << os_dtoa_format( OSDBL_MAX) << std::endl;
00490         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format OSDBL_MAX: " << OSDBL_MAX << std::endl;
00491         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format DBL_MAX: " << os_dtoa_format( DBL_MAX) << std::endl;
00492         std::cout << "HERE IS THE RESULT OF OS os_dtoa_format DBL_MAX: " <<  DBL_MAX << std::endl;
00493         d1 = os_strtod(os_dtoa_format( OSDBL_MAX).c_str(),     NULL);
00494         if(d1 == DBL_MAX )std::cout <<  "SUCCESS" << endl;
00495         else std::cout <<  "FAILURE" << endl;
00496         */
00497         }
00498         catch(const ErrorClass& eclass){
00499                 unitTestResultFailure << "Sorry Unit Test Failed Reading a file: "  + eclass.errormsg<< endl; 
00500                 //no point continuing we can't even read a file
00501                 unitTestResultFailure << "Since we can't read files we are terminating"  << endl; 
00502                 cout << unitTestResultFailure.str() << endl << endl;
00503                 cout << "Conclusion: FAILURE" << endl;
00504                 return 1;
00505         }       
00506 } // end of if (BASIC_TESTS)
00507 
00508 if (SOLVER_TESTS){
00509         try{
00510                 cout << endl << "TEST " << ++nOfTest << ": Clp solver on parincLinearByRow.osil" << endl << endl;
00511                 ok = true; 
00512                 std::cout << "create a new COIN Clp for OSiL string solution" << std::endl;
00513                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinearByRow.osil";
00514                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinearByRow_clp.osol";
00515                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00516                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00517 
00518                 std::cout << "create a new Solver object" << std::endl;
00519                 osilreader = new OSiLReader(); 
00520                 osolreader = new OSoLReader(); 
00521                 solver = new CoinSolver();
00522                 solver->sSolverName = "clp";
00523                 solver->osinstance = osilreader->readOSiL( osil);
00524                 std::cout << " Done reading the OSiL" << std::endl;
00525                 // now write it again as a string
00526                 OSiLWriter *osilwriter;
00527                 osilwriter = new OSiLWriter();
00528                 osilwriter->m_bWhiteSpace = true;
00529                 std::cout << " Write the OSiL" << std::endl;
00530                 osil = osilwriter->writeOSiL( solver->osinstance) ;
00531                 //std::cout <<  osil  << std::endl;
00532                 std::cout << " Done writing the OSiL" << std::endl;
00533                 solver->osoption   = osolreader->readOSoL( osol);
00534                 cout << "call the COIN - clp Solver for parincLinearbyRow" << endl;
00535                 //solver->buildSolverInstance();
00536                 std::cout << "call solver" << std::endl;
00537                 solver->solve();
00538                 std::cout << "returned from solver" << std::endl;
00539                 check = 7668;
00540                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00541                 if (ok)
00542                 {       
00543 #ifdef DEBUG
00544                         cout << solver->osrl << endl;
00545 #endif
00546                         cout << "COIN clp solver solution for parincLinearByRow checks." << endl;               
00547                 }
00548                 else
00549                 {       cout << "COIN clp solver solution for parincLinearByRow in error:" << endl;
00550                         cout << solver->osrl << endl;
00551                 }
00552                 if(ok == false) throw ErrorClass(" Fail unit test with clp on parincLinearByRow.osil");
00553                 // parse the osrl file
00554                 osrlreader =  new OSrLReader();
00555 #ifdef DEBUG
00556                 cout << "\nThe osrl file:\n" << solver->osrl << endl;
00557                 cout << "Start parsing the file" << endl;
00558 #endif
00559                 osrlreader->readOSrL( solver->osrl);
00560 #ifdef DEBUG
00561                 cout << "read successfully" << endl;
00562 #endif
00563                 delete osilreader;
00564 #ifdef DEBUG
00565                 cout << "osilreader successfully deleted" << endl;
00566 #endif
00567                 osilreader = NULL;      
00568                 delete osolreader;
00569 #ifdef DEBUG
00570                 cout << "osolreader successfully deleted" << endl;
00571 #endif
00572                 osolreader = NULL;      
00573                 delete solver;
00574 #ifdef DEBUG
00575                 cout << "solver successfully deleted" << endl;
00576 #endif
00577                 solver = NULL;
00578                 delete osilwriter;
00579 #ifdef DEBUG
00580                 cout << "osilwriter successfully deleted" << endl;
00581 #endif
00582                 osilwriter = NULL;
00583                 delete osrlreader;
00584 #ifdef DEBUG
00585                 cout << "osrlreader successfully deleted" << endl;
00586 #endif          
00587                 osrlreader = NULL;
00588                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinearByRow.osil with Clp" << std::endl;
00589                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00590         }
00591         catch(const ErrorClass& eclass){
00592                 unitTestResultFailure << "Sorry Unit Test Failed Testing Clp Solver:"  + eclass.errormsg<< endl;
00593         }
00594 
00595         // now solve another problem -- try an integer program
00596         try{
00597                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033.osil" << endl << endl;
00598                 std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
00599                 ok = true;
00600                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
00601                 //osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
00602                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00603                 //osol = fileUtil->getFileAsString( osolFileName.c_str());
00604                 osol = "";
00605                 osilreader = new OSiLReader(); 
00606                 osolreader = new OSoLReader(); 
00607                 solver = new CoinSolver();
00608                 solver->sSolverName ="cbc";
00609                 solver->osil = osil;
00610                 solver->osol = osol;  
00611                 solver->osinstance = NULL; 
00612                 solver->osoption   = NULL;
00613                 cout << "call the COIN - Cbc Solver for p0033" << endl;
00614                 solver->buildSolverInstance();
00615                 solver->solve();
00616                 check = 3089;
00617                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00618                 if (ok)
00619                 {       
00620 #ifdef DEBUG
00621                         cout << solver->osrl << endl;
00622 #endif
00623                         cout << "Coin cbc solution for p0033 checks" << endl;
00624                 }
00625                 else
00626                 {       cout << "Coin cbc solution for p0033 in error:" << endl;
00627                         cout << solver->osrl << endl;
00628                 }
00629                 if (ok == false) throw ErrorClass(" Fail unit test with Cbc on p0033.osil");
00630                 delete solver;
00631                 solver = NULL;
00632                 delete osilreader;
00633                 osilreader = NULL;
00634                 delete osolreader;
00635                 osolreader = NULL;
00636                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with Cbc" << std::endl;
00637                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00638         }
00639         catch(const ErrorClass& eclass){
00640                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
00641         }
00642 
00643 if( THOROUGH == true){
00644 
00645         // now solve the same problem with a different instance representation --- using mult and incr
00646         try{
00647                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033MULT.osil" << endl << endl;
00648                 std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
00649                 ok = true;
00650                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033MULT.osil";
00651                 //osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
00652                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00653                 //osol = fileUtil->getFileAsString( osolFileName.c_str());
00654                 osol = "";
00655                 osilreader = new OSiLReader(); 
00656                 osolreader = new OSoLReader(); 
00657                 solver = new CoinSolver();
00658                 solver->sSolverName ="cbc";
00659                 solver->osil = osil;
00660                 solver->osol = osol;  
00661                 solver->osinstance = NULL; 
00662                 solver->osoption   = NULL;
00663                 cout << "call the COIN - Cbc Solver for p0033MULT" << endl;
00664                 solver->buildSolverInstance();
00665                 solver->solve();
00666                 check = 3089;
00667                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00668                 if (ok)
00669                 {       
00670 #ifdef DEBUG
00671                         cout << solver->osrl << endl;
00672 #endif
00673                         cout << "Coin cbc solution for p0033MULT checks" << endl;
00674                 }
00675                 else
00676                 {       cout << "Coin cbc solution for p0033MULT in error:" << endl;
00677                         cout << solver->osrl << endl;
00678                 }
00679                 if (ok == false) throw ErrorClass(" Fail unit test with Cbc on p0033MULT.osil");
00680                 delete solver;
00681                 solver = NULL;
00682                 delete osilreader;
00683                 osilreader = NULL;
00684                 delete osolreader;
00685                 osolreader = NULL;
00686                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033MULT.osil with Cbc" << std::endl;
00687                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00688         }
00689         catch(const ErrorClass& eclass){
00690                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
00691         }
00692 
00693 
00694         // now test p0201.osil
00695         try{
00696                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033.osil - node limit set" << endl << endl;
00697                 //std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
00698                 ok = true;
00699                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
00700                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
00701                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00702                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00703                 osilreader = new OSiLReader(); 
00704                 osolreader = new OSoLReader(); 
00705                 solver = new CoinSolver();
00706                 solver->sSolverName ="cbc";
00707                 solver->osil = osil;
00708                 solver->osol = osol;  
00709                 solver->osinstance = NULL; 
00710                 solver->osoption   = NULL;
00711                 cout << "call the COIN - Cbc Solver for p0033" << endl;
00712                 solver->buildSolverInstance();
00713                 solver->solve();
00714                 //cout << "Here is the COIN Cbc solver solution for p0033" << endl;
00715                 //cout << solver->osrl << endl;
00716                 if( solver->osrl.find("node limit reached") != std::string::npos)
00717                         ok = true;
00718                 else
00719                         ok = false;
00720                 if (ok == false) throw ErrorClass(" node limit option on p0033.osil not processed properly");
00721                 delete solver;
00722                 solver = NULL;
00723                 delete osilreader;
00724                 osilreader = NULL;
00725                 delete osolreader;
00726                 osolreader = NULL;
00727                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with Cbc node limit" << std::endl;
00728                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00729         }
00730         catch(const ErrorClass& eclass){
00731                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
00732         }
00733 
00734 
00735         try{
00736                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0201.osil" << endl << endl;
00737                 ok = true;
00738                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0201.osil";
00739                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0201_cbc.osol";
00740                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00741                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00742                 solver = new CoinSolver();
00743                 solver->sSolverName ="cbc";
00744                 solver->osil = osil;
00745                 osilreader = new OSiLReader(); 
00746                 osolreader = new OSoLReader(); 
00747                 solver->osol = osol;  
00748                 solver->osinstance = NULL; 
00749                 solver->osoption   = NULL;
00750                 cout << "call the COIN - Cbc Solver for p0201" << endl;
00751                 solver->solve();
00752                 cout << "Here is the COIN Cbc solver solution for p0201" << endl;
00753                 std::cout << solver->osrl << std::endl;
00754                 check = 7615;
00755                 // we put a node limit in, so we should not find 7615
00756                 // check that the node limit was found
00757                 string::size_type pos;
00758                 pos = solver->osrl.find( "node limit");
00759                 if(pos == std::string::npos)  throw ErrorClass(" Error with p0201 on Cbc");
00760                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
00761                 //ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00762                 //if(ok == false) throw ErrorClass(" Fail unit test with Cbc on p0201.osil");
00763                 delete solver;
00764                 solver = NULL;
00765                 delete osilreader;
00766                 osilreader = NULL;
00767                 delete osolreader;
00768                 osolreader = NULL;
00769                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0201.osil with Cbc" << std::endl;
00770                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00771         }
00772         catch(const ErrorClass& eclass){
00773                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
00774         }
00775 
00776                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on parincInteger.osil" << endl << endl;
00777                 ok = true;
00778                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincInteger.osil";
00779                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincInteger_cbc.osol";
00780                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00781                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00782                 osilreader = new OSiLReader(); 
00783                 osolreader = new OSoLReader(); 
00784 
00785                 solver = new CoinSolver();
00786                 solver->sSolverName ="cbc";
00787                 cout << "parse OSiL file" << endl;
00788                 solver->osinstance = osilreader->readOSiL( osil);
00789                 solver->osol = osol; 
00790                 cout << "call the COIN - Cbc Solver for parincInteger" << endl;
00791 //              solver->buildSolverInstance();
00792                 solver->solve();
00793                 check = 7668;
00794                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00795                 if (ok)
00796                 {       
00797 #ifdef DEBUG
00798                         cout << solver->osrl << endl;
00799 #endif
00800                         cout << "COIN cbc solver solution for parincInteger checks." << endl;
00801                 }
00802                 else
00803                 {       cout << "COIN cbc solver solution for parincInteger in error:" << endl;
00804                         cout << solver->osrl << endl;
00805                 }
00806                 if(ok == false) throw ErrorClass(" Fail unit test with Cbc on parincInteger.osil");
00807                 delete osilreader;
00808                 osilreader = NULL;      
00809                 delete osolreader;
00810                 osolreader = NULL;      
00811                 delete solver;
00812                 solver = NULL;
00813                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincInteger.osil with Cbc" << std::endl;
00814                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00815 }       // end of if(THOROUGH)
00816 
00817 #ifdef COIN_HAS_SYMPHONY
00818         try{
00819                 cout << endl << "TEST " << ++nOfTest << ": SYMPHONY solver on p0033.osil" << endl << endl;
00820                 ok = true; 
00821                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
00822                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_sym.osol";
00823                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00824                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00825                 osolreader = new OSoLReader(); 
00826                 solver = new CoinSolver();
00827                 solver->sSolverName = "symphony";
00828                 solver->osil = osil;
00829                 solver->osinstance = NULL; 
00830                 solver->osoption   = osolreader->readOSoL( osol);
00831                 cout << "build the solver instance for COIN - SYMPHONY" << endl;
00832                 solver->buildSolverInstance();
00833 //              cout << "call the COIN - SYMPHONY Solver for p0033" << endl;
00834                 solver->solve();
00835                 check = 3089;
00836                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
00837                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00838                 if (ok)
00839                 {       
00840 #ifdef DEBUG
00841                         cout << solver->osrl << endl;
00842 #endif
00843                         cout << "COIN SYMPHONY solver solution for p0033 checks." << endl;
00844                 }
00845                 else
00846                 {       cout << "COIN SYMPHONY solver solution for p0033 in error:" << endl;
00847                         cout << solver->osrl << endl;
00848                 }
00849                 if(ok == false) throw ErrorClass(" Fail unit test with SYMPHONY on p0033.osil");
00850                 delete solver;
00851                 solver = NULL;
00852                 delete osolreader;
00853                 osolreader = NULL;      
00854                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with SYMPHONY" << std::endl;
00855                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00856         }
00857         catch(const ErrorClass& eclass){
00858                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the SYMPHONY Solver:"  + eclass.errormsg << endl;
00859         }       
00860 #endif
00861         
00862 
00863 
00864 #ifdef COIN_HAS_DYLP
00865         try{
00866                 cout << endl << "TEST " << ++nOfTest << ": DyLP solver on parincLinear.osil" << endl << endl;
00867                 ok = true; 
00868                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
00869                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinear_dylp.osol";
00870                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00871                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00872                 osilreader = new OSiLReader(); 
00873                 solver = new CoinSolver();
00874                 solver->sSolverName = "dylp";
00875                 solver->osol = osol;   
00876                 solver->osinstance = osilreader->readOSiL( osil);
00877                 cout << "call the COIN - DyLP solver for parincLinear" << endl;
00878                 solver->buildSolverInstance();
00879                 solver->solve();
00880                 check = 7668;
00881                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
00882                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00883                 if (ok)
00884                 {       
00885 #ifdef DEBUG
00886                         cout << solver->osrl << endl;
00887 #endif
00888                         cout << "COIN DyLP solver solution for parincLinear checks." << endl;
00889                 }
00890                 else
00891                 {       cout << "COIN DyLP solver solution for parincLinear in error:" << endl;
00892                         cout << solver->osrl << endl;
00893                 }
00894                 if(ok == false) throw ErrorClass(" Fail unit test with DyLP on parincLinear.osil");
00895                 delete solver;
00896                 solver = NULL;
00897                 delete osilreader;
00898                 osilreader = NULL;      
00899                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinear.osil with DyLP" << std::endl;
00900                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00901         }
00902         catch(const ErrorClass& eclass){
00903                 cout << "OSrL =  " <<  solver->osrl <<  endl;
00904                 cout << endl << endl << endl;
00905                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the DyLP Solver:"  + eclass.errormsg << endl;
00906         }       
00907 #endif
00908         
00909 
00910 #ifdef COIN_HAS_VOL
00911         try{
00912                 cout << endl << "TEST " << ++nOfTest << ": Vol solver on volumeTest.osil" << endl << endl;
00913                 ok = true; 
00914                 osilFileName = dataDir  + "osilFiles" + dirsep + "volumeTest.osil";
00915                 osolFileName = dataDir  + "osolFiles" + dirsep + "volumeTest_vol.osol";
00916                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00917                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00918                 osolreader = new OSoLReader(); 
00919                 solver = new CoinSolver();
00920                 solver->sSolverName = "vol";
00921                 solver->osil = osil;
00922                 solver->osinstance = NULL; 
00923                 solver->osoption = osolreader->readOSoL( osol);
00924                 cout << "call the COIN - Vol solver for volumeTest" << endl;
00925                 solver->buildSolverInstance();
00926                 solver->solve();
00927                 check = 7;
00928                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
00929                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00930                 if (ok)
00931                 {       
00932 #ifdef DEBUG
00933                         cout << solver->osrl << endl;
00934 #endif
00935                         cout << "COIN Vol solver solution for parincLinear checks." << endl;
00936                 }
00937                 else
00938                 {       cout << "COIN Vol solver solution for parincLinear in error:" << endl;
00939                         cout << solver->osrl << endl;
00940                 }
00941                 if(ok == false) throw ErrorClass(" Fail unit test with Vol on volumeTest.osil");
00942                 delete solver;
00943                 solver = NULL;
00944                 delete osolreader;
00945                 osolreader = NULL;      
00946                 unitTestResult << "TEST " << nOfTest << ": Solved problem volumeTest.osil with Vol" << std::endl;
00947                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00948         }
00949         catch(const ErrorClass& eclass){
00950                 cout << "OSrL =  " <<  solver->osrl <<  endl;
00951                 cout << endl << endl << endl;
00952                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Vol Solver:"  + eclass.errormsg << endl;
00953         }       
00954 #endif
00955         
00956 #ifdef COIN_HAS_GLPK
00957         try{
00958                 cout << endl << "TEST " << ++nOfTest << ": GLPK solver on p0033.osil" << endl << endl;
00959                 ok = true; 
00960                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
00961                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_glpk.osol";
00962                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00963                 osol = fileUtil->getFileAsString( osolFileName.c_str());
00964                 osilreader = new OSiLReader(); 
00965                 osolreader = new OSoLReader(); 
00966                 solver = new CoinSolver();
00967                 solver->sSolverName = "glpk";
00968                 solver->osinstance = osilreader->readOSiL( osil);
00969                 solver->osoption   = osolreader->readOSoL( osol);
00970                 cout << "call the GLPK Solver for p0033" << endl;
00971                 solver->buildSolverInstance();
00972                 solver->solve();
00973                 check = 3089;
00974                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
00975                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00976                 if (ok)
00977                 {       
00978 #ifdef DEBUG
00979                         cout << solver->osrl << endl;
00980 #endif
00981                         cout << "GLPK solver solution for p0033 checks." << endl;
00982                 }
00983                 else
00984                 {       cout << "GLPK solver solution for p0033 in error:" << endl;
00985                         cout << solver->osrl << endl;
00986                 }
00987                 if(ok == false) throw ErrorClass(" Fail unit test with GLPK on p0033.osil");
00988                 delete solver;
00989                 solver = NULL;
00990                 delete osilreader;
00991                 osilreader = NULL;      
00992                 delete osolreader;
00993                 osolreader = NULL;      
00994                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with GLPK" << std::endl;
00995                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00996         }
00997         catch(const ErrorClass& eclass){
00998                 cout << "OSrL =  " <<  solver->osrl <<  endl;
00999                 cout << endl << endl << endl;
01000                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Glpk Solver:"  + eclass.errormsg << endl;
01001         }       
01002 #endif
01003         
01004 
01005 
01006 #ifdef COIN_HAS_CPX
01007         try{
01008                 cout << endl << "TEST " << ++nOfTest << ": Cplex solver on p0033.osil" << endl << endl;
01009                 ok = true; 
01010                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
01011                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cpx.osol";
01012                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01013                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01014                 solver = new CoinSolver();
01015                 solver->sSolverName = "cplex";
01016                 solver->osil = osil;
01017                 solver->osol = osol;  
01018                 solver->osinstance = NULL; 
01019                 cout << "call the CPLEX Solver for p0033" << endl;
01020                 solver->buildSolverInstance();
01021                 solver->solve();
01022                 check = 3089;
01023                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01024                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01025                 if (ok)
01026                 {       
01027 #ifdef DEBUG
01028                         cout << solver->osrl << endl;
01029 #endif
01030                         cout << "CPLEX solver solution for p0033 checks." << endl;
01031                 }
01032                 else
01033                 {       cout << "CPLEX solver solution for p0033 in error:" << endl;
01034                         cout << solver->osrl << endl;
01035                 }
01036                 if(ok == false) throw ErrorClass(" Fail unit test with CPLEX on p0033.osil");
01037                 delete solver;
01038                 solver = NULL;
01039                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with CPLEX" << std::endl;
01040                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01041         }
01042         catch(const ErrorClass& eclass){
01043                 cout << "OSrL =  " <<  solver->osrl <<  endl;
01044                 cout << endl << endl << endl;
01045                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Cplex Solver:"  + eclass.errormsg << endl;
01046         }       
01047 #endif
01048         
01049 
01050 
01051 #ifdef COIN_HAS_IPOPT
01052         IpoptSolver *ipoptSolver  =  NULL;      
01053         try{
01054                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver with avion2.osil" << endl << endl;
01055             ipoptSolver  = new IpoptSolver();
01056                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01057                 ok = true;
01058 //              OSiLReader *osilreader = NULL;
01059 //              OSoLReader *osolreader = NULL;
01060                 // avion does not work with Mumps on AIX xlC compiler
01061 #ifndef XLC_
01062                 osilFileName =  dataDir  + "osilFiles" + dirsep +  "avion2.osil";
01063                 osolFileName = dataDir  + "osolFiles" + dirsep + "avion2_ipopt.osol";
01064                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01065                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01066                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01067                 ipoptSolver->osol = osol;
01068                 osilreader = new OSiLReader(); 
01069                 osolreader = new OSoLReader(); 
01070                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
01071                 ipoptSolver->osol = osol;
01072                 cout << "call the IPOPT Solver" << endl;        
01073                 ipoptSolver->buildSolverInstance();
01074                 ipoptSolver->solve();
01075                 check = 9.46801e+07;
01076                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01077                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01078                 if (ok)
01079                 {       
01080 #ifdef DEBUG
01081                         cout << ipoptSolver->osrl << endl;
01082 #endif
01083                         cout << "IPOPT solver solution for avion2 checks." << endl;
01084                 }
01085                 else
01086                 {       cout << "IPOPT solver solution for avion2 in error:" << endl;
01087                         cout << ipoptSolver->osrl << endl;
01088                 }
01089                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on avion2.osil");
01090                 delete osilreader;
01091                 osilreader = NULL;
01092                 delete osolreader;
01093                 osolreader = NULL;
01094                 delete ipoptSolver;
01095                 ipoptSolver = NULL;
01096                 unitTestResult << "TEST " << nOfTest << ": Solved problem avion2.osil with Ipopt" << std::endl;
01097                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01098 #endif
01099 
01100 if(THOROUGH == true){
01101                 // solve another problem
01102                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver with HS071_NLPMod.osil" << endl << endl;
01103                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01104                 ipoptSolver  = new IpoptSolver();
01105                 // a problem with all nonlinear terms no linear terms
01106                 osilFileName = dataDir  + "osilFiles" + dirsep + "HS071_NLPMod.osil";
01107                 osolFileName = dataDir  + "osolFiles" + dirsep + "HS071_NLPMod_ipopt.osol";
01108                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01109                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01110                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01111 //              osol = "<osol></osol>";
01112                 osilreader = new OSiLReader(); 
01113                 osolreader = new OSoLReader(); 
01114                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
01115                 ipoptSolver->osoption   = osolreader->readOSoL( osol);
01116                 ipoptSolver->osol = osol;
01117                 ipoptSolver->buildSolverInstance();
01118                 ipoptSolver->solve();
01119                 cout << "Here is the IPOPT solver solution for HS071_NLP" << endl;
01120                 check = 17.014;
01121                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01122                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01123                 if (ok)
01124                 {       
01125 #ifdef DEBUG
01126                         cout << ipoptSolver->osrl << endl;
01127 #endif
01128                         cout << "IPOPT solver solution for HS071_NLP checks." << endl;
01129                 }
01130                 else
01131                 {       cout << "IPOPT solver solution for HS071_NLP in error:" << endl;
01132                         cout << ipoptSolver->osrl << endl;
01133                 }
01134                 delete osilreader;
01135                 osilreader = NULL;
01136                 delete osolreader;
01137                 osolreader = NULL;
01138                 delete ipoptSolver;
01139                 ipoptSolver = NULL;
01140                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on HS071_NLP.osil");
01141                 unitTestResult << "TEST " << nOfTest << ": Solved problem HS071.osil with Ipopt" << std::endl;
01142                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01143 
01144                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on rosenbrockmod.osil" << endl << endl;
01145                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01146                 ipoptSolver  = new IpoptSolver();
01147                 // solve another problem
01148                 // a problem with both quadratic terms and general nonlinear terms
01149                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
01150                 osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockmod_ipopt.osol";
01151                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01152                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01153                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01154                 osilreader = new OSiLReader(); 
01155                 osolreader = new OSoLReader(); 
01156                 ipoptSolver->osil     = osil;
01157                 ipoptSolver->osoption = osolreader->readOSoL( osol);
01158                 cout << "call the IPOPT Solver" << endl;
01159                 ipoptSolver->buildSolverInstance();
01160                 ipoptSolver->solve();
01161                 check = 6.7279;
01162                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01163                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01164                 if (ok)
01165                 {       
01166 #ifdef DEBUG
01167                         cout << ipoptSolver->osrl << endl;
01168 #endif
01169                         cout << "Ipopt solver solution for rosenbrockmod checks." << endl;
01170                 }
01171                 else
01172                 {       cout << "Ipopt solver solution for rosenbrockmod in error:" << endl;
01173                         cout << ipoptSolver->osrl << endl;
01174                 }
01175                 if(ok == false) 
01176                         throw ErrorClass(" Fail unit test with Ipopt on rosenbrockmod.osil");
01177                 delete osilreader;
01178                 osilreader = NULL;
01179                 delete osolreader;
01180                 osolreader = NULL;
01181                 delete ipoptSolver;
01182                 ipoptSolver = NULL;
01183                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockmod.osil with Ipopt" << std::endl;
01184                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01185                 //return 0;
01186 
01187                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on parincQuadratic.osil" << endl << endl;
01188                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01189                 ipoptSolver  = new IpoptSolver();
01190                 // solve another problem
01191                 // a problem that is a pure quadratic
01192                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincQuadratic.osil";
01193                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincQuadratic_ipopt.osol";
01194                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01195                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01196                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01197                 osilreader = new OSiLReader(); 
01198                 osolreader = new OSoLReader(); 
01199                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
01200                 ipoptSolver->osil = osil;
01201                 ipoptSolver->osol = osol;
01202                 cout << "call the IPOPT Solver" << endl;
01203                 ipoptSolver->buildSolverInstance();
01204                 ipoptSolver->solve();
01205                 check = 49920.5;
01206                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01207                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01208                 if (ok)
01209                 {       
01210 #ifdef DEBUG
01211                         cout << ipoptSolver->osrl << endl;
01212 #endif
01213                         cout << "IPOPT solver solution for parincQuadratic checks." << endl;
01214                 }
01215                 else
01216                 {       cout << "IPOPT solver solution for parincQuadratic in error:" << endl;
01217                         cout << ipoptSolver->osrl << endl;
01218                 }
01219                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on parincQuadradic.osil");
01220                 delete osilreader;
01221                 osilreader = NULL;      
01222                 delete osolreader;
01223                 osolreader = NULL;      
01224                 delete ipoptSolver;
01225                 ipoptSolver = NULL;
01226                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincQuadratic.osil with Ipopt" << std::endl;
01227                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01228 
01229                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on parincLinear.osil" << endl << endl;
01230                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01231                 ipoptSolver  = new IpoptSolver();
01232                 // solve another problem
01233                 // try a pure linear program
01234                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
01235                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinear_ipopt.osol";
01236                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01237                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01238                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01239                 osilreader = new OSiLReader(); 
01240                 osolreader = new OSoLReader(); 
01241                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
01242                 ipoptSolver->osoption   = NULL;
01243                 ipoptSolver->osol = ""; 
01244                 cout << "call the IPOPT Solver" << endl;
01245                 ipoptSolver->buildSolverInstance();
01246                 ipoptSolver->solve();
01247                 check = 7668;
01248                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-1 , 1e-1);
01249                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01250                 if (ok)
01251                 {       
01252 #ifdef DEBUG
01253                         cout << ipoptSolver->osrl << endl;
01254 #endif
01255                         cout << "IPOPT solver solution for parincLinear checks." << endl;
01256                 }
01257                 else
01258                 {       cout << "IPOPT solver solution for parincLinear in error:" << endl;
01259                         cout << ipoptSolver->osrl << endl;
01260                 }
01261                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on parincLinear.osil");
01262                 delete osilreader;
01263                 osilreader = NULL;      
01264                 delete osolreader;
01265                 osolreader = NULL;      
01266                 delete ipoptSolver;
01267                 ipoptSolver = NULL;
01268                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinear.osil with Ipopt" << std::endl;
01269                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01270 
01271                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on callBackTest.osil" << endl << endl;
01272                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01273                 ipoptSolver  = new IpoptSolver();
01274                 // solve another problem
01275                 // callBackTest.osil
01276                 osilFileName = dataDir  + "osilFiles" + dirsep + "callBackTest.osil";
01277                 osolFileName = dataDir  + "osolFiles" + dirsep + "callBackTest_ipopt.osol";
01278                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01279                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01280                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01281                 osilreader = new OSiLReader(); 
01282                 osolreader = new OSoLReader(); 
01283                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
01284                 ipoptSolver->osoption   = osolreader->readOSoL( osol);
01285                 ipoptSolver->osol = osol;
01286                 cout << "call the IPOPT Solver" << endl;
01287                 ipoptSolver->buildSolverInstance();
01288                 ipoptSolver->solve();
01289                 check = 1.00045e+06;
01290                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01291                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01292                 if (ok)
01293                 {       
01294 #ifdef DEBUG
01295                         cout << ipoptSolver->osrl << endl;
01296 #endif
01297                         cout << "IPOPT solver solution for callBackTest checks." << endl;
01298                 }
01299                 else
01300                 {       cout << "IPOPT solver solution for callBackTest in error:" << endl;
01301                         cout << ipoptSolver->osrl << endl;
01302                 }
01303                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on callBackTest.osil");
01304                 delete osilreader;
01305                 osilreader = NULL;      
01306                 delete osolreader;
01307                 osolreader = NULL;      
01308                 delete ipoptSolver;
01309                 ipoptSolver = NULL;
01310                 unitTestResult << "TEST " << nOfTest << ": Solved problem callBackTest.osil with Ipopt" << std::endl;   
01311                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01312 
01313                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on callBackTestRowMajor.osil" << endl << endl;
01314                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
01315                 ipoptSolver  = new IpoptSolver();
01316                 // solve another problem
01317                 // callBackTest.osil
01318                 osilFileName =  dataDir  + "osilFiles" + dirsep + "callBackTestRowMajor.osil";
01319                 osolFileName = dataDir  + "osolFiles" + dirsep + "callBackTestRowMajor_ipopt.osol";
01320                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01321                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01322                 cout << "IPOPT Solver created for OSiL string solution" << endl;
01323                 osilreader = new OSiLReader(); 
01324                 osolreader = new OSoLReader(); 
01325                 ipoptSolver->osinstance = NULL;
01326                 ipoptSolver->osoption   = NULL;
01327                 ipoptSolver->osil = osil;
01328                 ipoptSolver->osol = osol;
01329                 cout << "call the IPOPT Solver" << endl;
01330 //              ipoptSolver->buildSolverInstance();
01331                 ipoptSolver->solve();
01332                 check = 1.00045e+06;
01333                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
01334                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01335                 if (ok)
01336                 {       
01337 #ifdef DEBUG
01338                         cout << ipoptSolver->osrl << endl;
01339 #endif
01340                         cout << "IPOPT solver solution for callBackTestRowMajor checks." << endl;
01341                 }
01342                 else
01343                 {       cout << "IPOPT solver solution for callBackTestRowMajor in error:" << endl;
01344                         cout << ipoptSolver->osrl << endl;
01345                 }
01346                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on callBackTestRowMajor.osil");
01347                 delete osilreader;
01348                 osilreader = NULL;      
01349                 delete osolreader;
01350                 osolreader = NULL;      
01351                 delete ipoptSolver;
01352                 ipoptSolver = NULL;     
01353                 unitTestResult << "TEST " << nOfTest << ": Solved problem callBackRowMajor.osil with Ipopt" << std::endl;
01354                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01355 
01356                 //this is integer, skip it
01357                 /*
01358                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on nonconvex.osil" << endl << endl;
01359 //              OSiLReader *osilreader = NULL;
01360                 osilreader = new OSiLReader(); 
01361                 osolreader = new OSoLReader(); 
01362                 ok = true; 
01363                 osilFileName = dataDir  + "osilFiles" + dirsep + "nonconvex.osil";
01364 //              osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
01365                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01366 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01367                 osol = "";
01368                 solver = new IpoptSolver();
01369                 solver->sSolverName = "ipopt";
01370                 solver->osil = osil;
01371                 solver->osol = osol; 
01372 //              solver->osinstance = osilreader->readOSiL( osil);
01373 //              solver->osoption   = osolreader->readOSoL( osol);
01374                 cout << "call the COIN - Ipopt Solver for nonconvex.osil" << endl;
01375                 solver->buildSolverInstance();
01376         
01377                 std::cout << " CALL SOLVE " << std::endl;
01378                 solver->solve();
01379         
01380                 cout << "Here is the Ipopt solver solution for nonconvex.osil" << endl;
01381 
01382 //              OSrLWriter *tmp_writer;
01383                 tmp_writer = new OSrLWriter();
01384                 solver->osrl = tmp_writer->writeOSrL(solver->osresult);
01385                 delete tmp_writer;
01386                 tmp_writer = NULL;
01387 
01388                 cout << solver->osrl << endl << endl;
01389 
01390 //              check = -1.70711;
01391 //              //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01392 //              ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01393 //              if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on nonconvex.osil");
01394         
01395                 delete solver;
01396                 solver = NULL;
01397                 delete osilreader;
01398                 osilreader = NULL;
01399                 delete osolreader;
01400                 osolreader = NULL;
01401                 unitTestResult << "TEST " << nOfTest << ": Solved problem nonconvex.osil with Ipopt" << std::endl;
01402                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01403                 */
01404                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on rosenbrockorig.osil" << endl << endl;
01405 //              OSiLReader *osilreader = NULL;
01406                 osilreader = new OSiLReader(); 
01407                 osolreader = new OSoLReader(); 
01408                 ok = true; 
01409                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
01410 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockorig_Ipopt.osol";
01411                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01412 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01413                 osol = "";
01414                 solver = new IpoptSolver();
01415                 solver->sSolverName = "ipopt";
01416                 solver->osil = osil;
01417                 solver->osol = osol; 
01418 //              solver->osinstance = osilreader->readOSiL( osil);
01419 //              solver->osoption   = osolreader->readOSoL( osol);
01420                 cout << "call the COIN - Ipopt Solver for rosenbrockorig" << endl;
01421                 solver->buildSolverInstance();
01422         
01423                 std::cout << " CALL SOLVE " << std::endl;
01424                 solver->solve();
01425                 check = 0;
01426                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01427                 if (ok)
01428                 {       
01429 #ifdef DEBUG
01430                         cout << solver->osrl << endl;
01431 #endif
01432                         cout << "Ipopt solver solution for rosenbrockorig checks." << endl;
01433                 }
01434                 else
01435                 {       cout << "Ipopt solver solution for rosenbrockorig in error:" << endl;
01436                         cout << solver->osrl << endl;
01437                 }
01438                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on rosenbrockorig.osil");
01439 
01440                 delete solver;
01441                 solver = NULL;
01442         
01443         
01444                 delete osilreader;
01445                 osilreader = NULL;
01446                 delete osolreader;
01447                 osolreader = NULL;
01448                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Ipopt" << std::endl;
01449                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01450 
01451                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on HS071_feas.osil" << endl << endl;
01452                 try {
01453                         //osilreader = new OSiLReader(); 
01454                         //osolreader = new OSoLReader(); 
01455                         ok = true; 
01456                         osilFileName = dataDir  + "osilFiles" + dirsep + "HS071_feas.osil";
01457 //                      osolFileName = dataDir  + "osolFiles" + dirsep + "HS071_feas_Ipopt.osol";
01458                         osil = fileUtil->getFileAsString( osilFileName.c_str());
01459 //                      osol = fileUtil->getFileAsString( osolFileName.c_str());
01460                         osol = "";
01461                         solver = new IpoptSolver();
01462                         solver->sSolverName = "ipopt";
01463                         solver->osil = osil;
01464                         solver->osol = osol; 
01465 //                      solver->osinstance = osilreader->readOSiL( osil);
01466 //                      solver->osoption   = osolreader->readOSoL( osol);
01467                         solver->buildSolverInstance();
01468         
01469                         cout << "call the COIN - Ipopt Solver for HS071_feas.osil" << endl;
01470                         solver->solve();
01471                 }
01472                 catch(const ErrorClass& eclass)
01473                 {
01474                         ok = (solver->osresult->getGeneralMessage() == "Ipopt NEEDS AN OBJECTIVE FUNCTION");
01475                         if(ok == false) 
01476                         {       cout << "Ipopt solver returns:" << endl;
01477                                 cout << solver->osrl << endl;
01478                                 throw ErrorClass(" Fail unit test with Ipopt on HS071_feas.osil");
01479                         }
01480                 }
01481         
01482                 cout << "Received error message from Ipopt: \"Ipopt NEEDS AN OBJECTIVE FUNCTION\"" << endl;
01483         
01484                 delete solver;
01485                 solver = NULL;
01486                 //delete osilreader;
01487                 osilreader = NULL;
01488                 //delete osolreader;
01489                 osolreader = NULL;
01490 
01491                 unitTestResult << "TEST " << nOfTest << ": Correctly diagnosed problem HS071_feas with Ipopt" << std::endl;
01492                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01493 
01494 } // end of if( THOROUGH)
01495         }
01496         catch(const ErrorClass& eclass){
01497                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
01498         }
01499 #endif // end of #ifdef COIN_HAS_IPOPT
01500 
01501 
01502 #ifdef COIN_HAS_BONMIN
01503         try{
01504                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on bonminEx1.osil" << endl << endl;
01505 //              OSiLReader *osilreader = NULL;
01506                 osilreader = new OSiLReader(); 
01507                 osolreader = new OSoLReader(); 
01508                 ok = true; 
01509                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1.osil";
01510                 osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Bonmin.osol";
01511                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01512                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01513                 solver = new BonminSolver();
01514                 //solver->sSolverName = "bonmin";
01515 //              solver->osinstance = osilreader->readOSiL( osil);
01516                 solver->osil = osil;
01517                 solver->osoption = osolreader->readOSoL( osol);
01518                 cout << "call the COIN - Bonmin Solver for bonminEx1" << endl;
01519 //              solver->buildSolverInstance();
01520                 solver->solve();
01521                 check = -17.07106795327683;
01522                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01523                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01524                 if (ok)
01525                 {       
01526 #ifdef DEBUG
01527                         cout << solver->osrl << endl;
01528 #endif
01529                         cout << "Bonmin solver solution for bonminEx1 checks." << endl;
01530                 }
01531                 else
01532                 {       cout << "Bonmin solver solution for bonminEx1 in error:" << endl;
01533                         cout << solver->osrl << endl;
01534                 }
01535                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on bonminEx1.osil");
01536                 delete solver;
01537                 solver = NULL;
01538                 delete osilreader;
01539                 osilreader = NULL;
01540                 delete osolreader;
01541                 osolreader = NULL;
01542                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1.osil with Bonmin" << std::endl;
01543                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01544 
01545 if (THOROUGH == true){
01546                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on wayneQuadratic.osil" << endl << endl;
01547                 ok = true;
01548                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
01549                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin1.osol";
01550                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01551                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01552                 osilreader = new OSiLReader(); 
01553                 solver = new BonminSolver();    
01554                 solver->osol = osol;
01555                 solver->osinstance = osilreader->readOSiL( osil);
01556                 cout << "call the Bonmin Solver for wayneQuadratic" << endl;
01557                 solver->buildSolverInstance();
01558                 // Do this one with two different osol files!!!
01559                 solver->solve();
01560                 check = 2.925;
01561                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01562                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01563                 if (ok)
01564                 {       
01565 #ifdef DEBUG
01566                         cout << solver->osrl << endl;
01567 #endif
01568                         cout << "Bonmin solver solution for wayneQuadratic checks." << endl;
01569                 }
01570                 else
01571                 {       cout << "Bonmin solver solution for wayneQuadratic in error:" << endl;
01572                         cout << solver->osrl << endl;
01573                 }
01574                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on wayneQuadratic.osil");
01575                 delete solver;
01576                 solver = NULL;
01577                 delete osilreader;
01578                 osilreader = NULL;
01579                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Bonmin" << std::endl;
01580                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01581 
01582                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on wayneQuadratic.osil" << endl << endl;
01583                 ok = true;
01584                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
01585                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin2.osol";
01586                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01587                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01588                 osilreader = new OSiLReader(); 
01589                 osolreader = new OSoLReader(); 
01590                 solver = new BonminSolver();    
01591                 solver->osol = osol;
01592                 solver->osinstance = osilreader->readOSiL( osil);
01593                 solver->osoption   = osolreader->readOSoL( osol);
01594                 cout << "call the Bonmin Solver for wayneQuadratic" << endl;
01595                 solver->buildSolverInstance();
01596                 // Do this one with two different osol files!!!
01597                 solver->solve();
01598                 check = 2.925;
01599                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01600                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01601                 if (ok)
01602                 {       
01603 #ifdef DEBUG
01604                         cout << solver->osrl << endl;
01605 #endif
01606                         cout << "Bonmin solver solution for wayneQuadratic checks." << endl;
01607                 }
01608                 else
01609                 {       cout << "Bonmin solver solution for wayneQuadratic in error:" << endl;
01610                         cout << solver->osrl << endl;
01611                 }
01612                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on wayneQuadratic.osil");
01613                 delete solver;
01614                 solver = NULL;
01615                 delete osilreader;
01616                 osilreader = NULL;      
01617                 delete osolreader;
01618                 osolreader = NULL;      
01619                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Bonmin" << std::endl;
01620                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01621 
01622 //#if 1   // this does not work with the current version of Bonmin due to uninitialed variables
01623                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on rosenbrockorig.osil" << endl << endl;
01624                 ok = true;
01625                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
01626 //              osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin2.osol";
01627                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01628 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01629                 osilreader = new OSiLReader(); 
01630 //              osolreader = new OSoLReader(); 
01631                 solver = new BonminSolver();    
01632                 solver->osol = "";
01633                 solver->osinstance = osilreader->readOSiL( osil);
01634 //              solver->osoption   = osolreader->readOSoL( osol);
01635                 cout << "build solver instance" << endl;
01636                 solver->buildSolverInstance();
01637                 cout << "call the Bonmin Solver for rosenbrockorig" << endl;
01638                 solver->solve();
01639                 check = 0;
01640                 cout << "Verify solution" <<endl;
01641                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01642                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01643                 if (ok)
01644                 {       
01645 #ifdef DEBUG
01646                         cout << solver->osrl << endl;
01647 #endif
01648                         cout << "Bonmin solver solution for rosenbrockorig checks." << endl;
01649                 }
01650                 else
01651                 {       cout << "Bonmin solver solution for rosenbrockorig in error:" << endl;
01652                         cout << solver->osrl << endl;
01653                 }
01654                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on rosenbrockorig.osil");
01655                 delete solver;
01656                 solver = NULL;
01657                 delete osilreader;
01658                 osilreader = NULL;      
01659                 delete osolreader;
01660                 osolreader = NULL;      
01661                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Bonmin" << std::endl;
01662                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01663 
01664                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on rosenbrockorigInt.osil" << endl << endl;
01665                 ok = true;
01666                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorigInt.osil";
01667 //              osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin2.osol";
01668                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01669 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01670                 osilreader = new OSiLReader(); 
01671 //              osolreader = new OSoLReader(); 
01672                 solver = new BonminSolver();    
01673                 solver->osol = "";
01674                 solver->osinstance = osilreader->readOSiL( osil);
01675 //              solver->osoption   = osolreader->readOSoL( osol);
01676                 cout << "call the Bonmin Solver for rosenbrockinteger" << endl;
01677                 solver->buildSolverInstance();
01678                 solver->solve();
01679                 check = 0;
01680                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01681                 if (ok)
01682                 {       
01683 #ifdef DEBUG
01684                         cout << solver->osrl << endl;
01685 #endif
01686                         cout << "Bonmin solver solution for rosenbrockorigInt checks." << endl;
01687                 }
01688                 else
01689                 {       cout << "Bonmin solver solution for rosenbrockorigInt in error:" << endl;
01690                         cout << solver->osrl << endl;
01691                 }
01692                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on rosenbrockorigInt.osil");
01693                 delete solver;
01694                 solver = NULL;
01695                 delete osilreader;
01696                 osilreader = NULL;      
01697                 delete osolreader;
01698                 osolreader = NULL;      
01699                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorigInt.osil with Bonmin" << std::endl;
01700                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01701 //#endif // ---- end of #if 1
01702 
01703 }   // end of if( THOROUGH )
01704         }
01705         catch(const ErrorClass& eclass){
01706                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
01707         }       
01708 #endif   // end of #ifdef COIN_HAS_BONMIN
01709 
01710 
01711 
01712 #ifdef COIN_HAS_COUENNE
01713         try{
01714                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on bonminEx1.osil" << endl << endl;
01715                 CouenneSolver *solver = NULL;
01716 
01717 //              OSiLReader *osilreader = NULL;
01718                 osilreader = new OSiLReader(); 
01719                 osolreader = new OSoLReader(); 
01720                 ok = true; 
01721                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1.osil";
01722                 osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
01723                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01724                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01725                 solver = new CouenneSolver();
01726                 solver->sSolverName = "bonmin";
01727                 solver->osil = osil;
01728                 solver->osol = osol; 
01729 //              solver->osinstance = osilreader->readOSiL( osil);
01730 //              solver->osoption   = osolreader->readOSoL( osol);
01731                 cout << "call the COIN - Couenne Solver for bonminEx1" << endl;
01732                 solver->buildSolverInstance();
01733         
01734                 std::cout << " CALL SOLVE " << std::endl;
01735                 solver->solve();
01736         
01737                 check = -17.07106795327683;
01738                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01739                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01740                 if (ok)
01741                 {       
01742 #ifdef DEBUG
01743                         cout << solver->osrl << endl;
01744 #endif
01745                         cout << "Couenne solver solution for bonminEx1 checks." << endl;
01746                 }
01747                 else
01748                 {       cout << "Couenne solver solution for bonminEx1 in error:" << endl;
01749                         cout << solver->osrl << endl;
01750                 }
01751                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on bonminEx1.osil");
01752 
01753                 delete solver;
01754                 solver = NULL;
01755         
01756         
01757                 delete osilreader;
01758                 osilreader = NULL;
01759                 delete osolreader;
01760                 osolreader = NULL;
01761                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1.osil with Couenne" << std::endl;
01762                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01763 
01764 if( THOROUGH == true){
01765                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on bonminEx1_Nonlinear.osil" << endl << endl;
01766 //              OSiLReader *osilreader = NULL;
01767                 osilreader = new OSiLReader(); 
01768                 osolreader = new OSoLReader(); 
01769                 ok = true; 
01770                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1_Nonlinear.osil";
01771 //              osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
01772                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01773 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01774                 osol = "";
01775                 solver = new CouenneSolver();
01776                 solver->osil = osil;
01777                 solver->osol = osol; 
01778 //              solver->osinstance = osilreader->readOSiL( osil);
01779 //              solver->osoption   = osolreader->readOSoL( osol);
01780                 cout << "call the COIN - Couenne Solver for bonminEx1_Nonlinear" << endl;
01781                 solver->buildSolverInstance();
01782         
01783                 std::cout << " CALL SOLVE " << std::endl;
01784                 solver->solve();
01785         
01786                 check = -1.707107;
01787                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01788                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01789                 if (ok)
01790                 {       
01791 #ifdef DEBUG
01792                         cout << solver->osrl << endl;
01793 #endif
01794                         cout << "Couenne solver solution for bonminEx1_Nonlinear checks." << endl;
01795                 }
01796                 else
01797                 {       cout << "Couenne solver solution for bonminEx1_Nonlinear in error:" << endl;
01798                         cout << solver->osrl << endl;
01799                 }
01800                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on bonminEx1_Nonlinear.osil");
01801 
01802                 delete solver;
01803                 solver = NULL;
01804         
01805         
01806                 delete osilreader;
01807                 osilreader = NULL;
01808                 delete osolreader;
01809                 osolreader = NULL;
01810                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1_Nonlinear with Couenne" << std::endl;
01811                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01812 
01813 
01814                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on nonconvex.osil" << endl << endl;
01815 //              OSiLReader *osilreader = NULL;
01816                 osilreader = new OSiLReader(); 
01817                 osolreader = new OSoLReader(); 
01818                 ok = true; 
01819                 osilFileName = dataDir  + "osilFiles" + dirsep + "nonconvex.osil";
01820 //              osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
01821                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01822 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01823                 osol = "";
01824                 solver = new CouenneSolver();
01825                 solver->osil = osil;
01826                 solver->osol = osol; 
01827 //              solver->osinstance = osilreader->readOSiL( osil);
01828 //              solver->osoption   = osolreader->readOSoL( osol);
01829                 cout << "call the COIN - Couenne Solver for nonconvex.osil" << endl;
01830                 solver->buildSolverInstance();
01831         
01832                 std::cout << " CALL SOLVE " << std::endl;
01833                 solver->solve();
01834         
01835                 check = -6.551133;
01836                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01837                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01838                 if (ok)
01839                 {       
01840 #ifdef DEBUG
01841                         cout << solver->osrl << endl;
01842 #endif
01843                         cout << "Couenne solver solution for nonconvex.osil checks." << endl;
01844                 }
01845                 else
01846                 {       cout << "Couenne solver solution for nonconvex.osil in error:" << endl;
01847                         cout << solver->osrl << endl;
01848                 }
01849                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on nonconvex.osil");
01850 
01851                 delete solver;
01852                 solver = NULL;
01853         
01854         
01855                 delete osilreader;
01856                 osilreader = NULL;
01857                 delete osolreader;
01858                 osolreader = NULL;
01859                 unitTestResult << "TEST " << nOfTest << ": Solved problem nonconvex.osil with Couenne" << std::endl;
01860                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01861 
01862                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on rosenbrockorig.osil" << endl << endl;
01863 //              OSiLReader *osilreader = NULL;
01864                 osilreader = new OSiLReader(); 
01865                 osolreader = new OSoLReader(); 
01866                 ok = true; 
01867                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
01868 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockorig_Couenne.osol";
01869                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01870 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01871                 osol = "";
01872                 solver = new CouenneSolver();
01873                 solver->osil = osil;
01874                 solver->osol = osol; 
01875 //              solver->osinstance = osilreader->readOSiL( osil);
01876 //              solver->osoption   = osolreader->readOSoL( osol);
01877                 cout << "call the COIN - Couenne Solver for rosenbrockorig" << endl;
01878                 solver->buildSolverInstance();
01879         
01880                 std::cout << " CALL SOLVE " << std::endl;
01881                 solver->solve();
01882         
01883                 check = 0;
01884                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01885                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01886                 if (ok)
01887                 {       
01888 #ifdef DEBUG
01889                         cout << solver->osrl << endl;
01890 #endif
01891                         cout << "Couenne solver solution for rosenbrockorig checks." << endl;
01892                 }
01893                 else
01894                 {       cout << "Couenne solver solution for rosenbrockorig in error:" << endl;
01895                         cout << solver->osrl << endl;
01896                 }
01897                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on rosenbrockorig.osil");
01898 
01899                 delete solver;
01900                 solver = NULL;
01901         
01902         
01903                 delete osilreader;
01904                 osilreader = NULL;
01905                 delete osolreader;
01906                 osolreader = NULL;
01907                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Couenne" << std::endl;
01908                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01909 
01910 
01911 
01912                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on wayneQuadratic.osil" << endl << endl;
01913 //              OSiLReader *osilreader = NULL;
01914                 osilreader = new OSiLReader(); 
01915                 osolreader = new OSoLReader(); 
01916                 ok = true; 
01917                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
01918                 
01919 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockinteger_Couenne.osol";
01920                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01921 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
01922                 osol = "";
01923                 solver = new CouenneSolver();
01924                 solver->osinstance = NULL;
01925                 solver->osil = osil;
01926                 solver->osol = osol; 
01927 //              solver->osinstance = osilreader->readOSiL( osil);
01928 //              solver->osoption   = osolreader->readOSoL( osol);
01929                 cout << "call the COIN - Couenne Solver for wayneQuadraticr" << endl;
01930                 //solver->buildSolverInstance();
01931                 std::cout << " CALL SOLVE " << std::endl;
01932                 solver->buildSolverInstance();
01933                 solver->setSolverOptions();
01934                 solver->solve();
01935                 check = 2.925;
01936                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
01937                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
01938                 if (ok)
01939                 {       
01940 #ifdef DEBUG
01941                         cout << solver->osrl << endl;
01942 #endif
01943                         cout << "Couenne solver solution for wayneQuadratic checks." << endl;
01944                 }
01945                 else
01946                 {       cout << "Couenne solver solution for wayneQuadratic in error:" << endl;
01947                         cout << solver->osrl << endl;
01948                 }
01949                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on rosenbrockinteger.osil");
01950 
01951                 delete solver;
01952                 solver = NULL;
01953         
01954         
01955                 delete osilreader;
01956                 osilreader = NULL;
01957                 delete osolreader;
01958                 osolreader = NULL;
01959                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Couenne" << std::endl;
01960                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01961                 
01962 
01963                 
01964                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on wayneQuadratic.osil" << endl << endl;
01965 //              OSiLReader *osilreader = NULL;
01966                 osilreader = new OSiLReader(); 
01967                 osolreader = new OSoLReader(); 
01968                 ok = true; 
01969                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
01970                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Couenne.osol";
01971                 osil = fileUtil->getFileAsString( osilFileName.c_str());
01972                 osol = fileUtil->getFileAsString( osolFileName.c_str());
01973                 solver = new CouenneSolver();
01974                 solver->osil = osil;
01975                 solver->osol = osol; 
01976                 cout << "call the COIN - Couenne Solver for wayneQuadratic.osil" << endl;
01977                 solver->buildSolverInstance();
01978         
01979                 std::cout << " CALL SOLVE " << std::endl;
01980                 solver->solve();
01981         
01982                 cout << "Here is the Couenne solver solution for wayneQuadratic" << endl;
01983 
01984 //              OSrLWriter *tmp_writer;
01985                 tmp_writer = new OSrLWriter();
01986                 solver->osrl = tmp_writer->writeOSrL(solver->osresult);
01987                 delete tmp_writer;
01988                 tmp_writer = NULL;
01989                 
01990                 string::size_type pos;
01991                 pos = solver->osrl.find( "LIMIT_EXCEEDED[COUENNE]");
01992                 if(pos == std::string::npos)  
01993                 {
01994                         cout << solver->osrl << endl << endl;
01995                         throw ErrorClass(" Error with wayneQuadratic running on Couenne");
01996                 }
01997 #ifdef DEBUG
01998                 else
01999                 {
02000                         cout << solver->osrl << endl << endl;
02001                 }
02002 #endif
02003                 delete solver;
02004                 solver = NULL;
02005                 delete osilreader;
02006                 osilreader = NULL;
02007                 delete osolreader;
02008                 osolreader = NULL;
02009                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic with Couenne" << std::endl;
02010                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02011                 
02012 
02013 } //end of if (THOROUGH)
02014 
02015         }
02016         catch(const ErrorClass& eclass){
02017                 cout << "OSrL =  " <<  solver->osrl <<  endl;
02018                 cout << endl << endl << endl;
02019                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
02020         
02021         }       
02022 #endif // end of #ifdef COIN_HAS_COUENNE
02023 
02024 
02025         
02026 #ifdef COIN_HAS_LINDO
02027         try{
02028                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on lindoapiaddins.osil" << endl << endl;
02029                 ok = true;
02030                 osilFileName = dataDir  + "osilFiles" + dirsep + "lindoapiaddins.osil";
02031                 osolFileName = dataDir  + "osolFiles" + dirsep + "lindoapiaddins_lindo.osol";
02032                 osil = fileUtil->getFileAsString( osilFileName.c_str());
02033                 osol = fileUtil->getFileAsString( osolFileName.c_str());
02034                 osilreader = new OSiLReader(); 
02035                 cout << "create a new LINDO Solver for OSiL string solution" << endl;
02036                 solver = new LindoSolver();     
02037                 solver->osinstance = osilreader->readOSiL( osil);
02038                 solver->osol = osol;
02039                 cout << "call the LINDO Solver" << endl;
02040                 solver->buildSolverInstance();
02041                 solver->solve();
02042                 check = 99;
02043                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
02044                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02045                 if (ok)
02046                 {       
02047 #ifdef DEBUG
02048                         cout << solver->osrl << endl;
02049 #endif
02050                         cout << "LINDO solver solution for lindoapiaddins checks." << endl;
02051                 }
02052                 else
02053                 {       cout << "LINDO solver solution for lindoapiaddins in error:" << endl;
02054                         cout << solver->osrl << endl;
02055                 }
02056                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on lindoapiaddins.osil");
02057                 solver->osinstance = NULL;
02058                 delete solver;
02059                 solver = NULL;
02060                 osilreader = NULL;      
02061                 delete osolreader;
02062                 unitTestResult << "TEST " << nOfTest << ": Solved problem lindoapiaddins.osil with Lindo" << std::endl;
02063                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02064 
02065 #ifdef THOUROUGH
02066                 // now solve the rosenbrock problem from the OSiL paper
02067                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on rosenbrockmod.osil" << endl << endl;
02068                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
02069                 osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockmod_lindo.osol";
02070                 osil = fileUtil->getFileAsString( osilFileName.c_str());
02071                 osol = fileUtil->getFileAsString( osolFileName.c_str());
02072                 solver = new LindoSolver();     
02073                 solver->osil = osil;
02074                 solver->osol = osol;
02075                 solver->osinstance = NULL;
02076                 cout << "call the LINDO Solver" << endl;
02077                 solver->buildSolverInstance();
02078                 solver->solve();
02079                 check = 6.7279;
02080                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
02081                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02082                 if (ok)
02083                 {       
02084 #ifdef DEBUG
02085                         cout << solver->osrl << endl;
02086 #endif
02087                         cout << "LINDO solver solution for rosenbrockmod checks." << endl;
02088                 }
02089                 else
02090                 {       cout << "LINDO solver solution for rosenbrockmod in error:" << endl;
02091                         cout << solver->osrl << endl;
02092                 }
02093                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on rosenbrockmod.osil");
02094                 solver->osinstance = NULL;
02095                 delete solver;
02096                 solver = NULL;
02097                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockmod.osil with Lindo" << std::endl;
02098                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02099 
02100                 // now solve a pure quadratic
02101                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on parincQuadratic.osil" << endl << endl;
02102                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincQuadratic.osil";
02103                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincQuadratic_lindo.osol";
02104                 osil = fileUtil->getFileAsString( osilFileName.c_str());
02105                 osol = fileUtil->getFileAsString( osolFileName.c_str());
02106                 osolreader = new OSoLReader(); 
02107                 solver = new LindoSolver();     
02108                 solver->osil = osil;
02109                 solver->osol = osol;
02110                 solver->osinstance = NULL;
02111                 solver->osoption   = osolreader->readOSoL( osol);
02112                 cout << "call the LINDO Solver" << endl;
02113                 solver->buildSolverInstance();
02114                 solver->solve();
02115                 check = 49920.5;
02116                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
02117                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02118                 if (ok)
02119                 {       
02120 #ifdef DEBUG
02121                         cout << solver->osrl << endl;
02122 #endif
02123                         cout << "LINDO solver solution for parincQuadratic checks." << endl;
02124                 }
02125                 else
02126                 {       cout << "LINDO solver solution for parincQuadratic in error:" << endl;
02127                         cout << solver->osrl << endl;
02128                 }
02129                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on parincQuadratic.osil");
02130                 delete solver;
02131                 solver = NULL;
02132                 delete osolreader;
02133                 osolreader = NULL;      
02134                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincQuadratic.osil with Lindo" << std::endl;
02135                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02136 
02137                 // now solve a quadratic binary problem
02138                 // wayneQuadratic.osil
02139                 /*
02140                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on wayneQuadratic.osil" << endl << endl;
02141                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
02142                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_lindo.osol";
02143                 osil = fileUtil->getFileAsString( osilFileName.c_str());
02144                 osol = fileUtil->getFileAsString( osolFileName.c_str());
02145                 osilreader = new OSiLReader(); 
02146                 solver = new LindoSolver();     
02147                 solver->osil = osil;
02148                 solver->osol = osol;
02149                 solver->osinstance = osilreader->readOSiL( osil);
02150                 cout << "call the LINDO Solver" << endl;
02151                 solver->buildSolverInstance();
02152                 solver->solve();
02153                 check = 2.925;
02154                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
02155                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02156                 if (ok)
02157                 {       
02158 #ifdef DEBUG
02159                         cout << solver->osrl << endl;
02160 #endif
02161                         cout << "LINDO solver solution for wayneQuadratic checks." << endl;
02162                 }
02163                 else
02164                 {       cout << "LINDO solver solution for wayneQuadratic in error:" << endl;
02165                         cout << solver->osrl << endl;
02166                 }
02167                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on wayneQuadratic.osil");
02168                 delete solver;
02169                 solver = NULL;
02170                 osilreader = NULL;      
02171                 delete osolreader;
02172                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Lindo" << std::endl;
02173                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02174                 */
02175 #endif          
02176         }
02177         catch(const ErrorClass& eclass){
02178                 //cout << "OSrL =  " <<  solver->osrl <<  endl;
02179                 cout << endl << endl << endl;
02180                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the LINDO Solver:"  + eclass.errormsg << endl << endl;
02181         }
02182 #endif
02183 } // end of if(SOLVER_TESTS)
02184 
02185 
02186 
02187 // now solve with an OSInstance created from an MPS file
02188 if (OTHER_TESTS){
02189         try{
02190                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver using MPS file" << endl << endl;
02191                 ok = true;
02192 //              cout << endl;
02193 //              cout << "Start testing MPS file conversion" << endl << endl;
02194                 cout << "create a COIN Solver for MPS - OSInstance solution" << endl;
02195                 solver = new CoinSolver();
02196                 solver->sSolverName = "cbc";
02197                 mps2osil = new OSmps2osil( mpsFileName);
02198                 mps2osil->createOSInstance() ;
02199                 solver->osinstance = mps2osil->osinstance;
02200                 osol = "<osol></osol>";
02201                 solver->osol = osol;
02202                 cout << "call COIN Solve" << endl;
02203                 solver->buildSolverInstance();
02204                 solver->solve();
02205                 check = -7668;
02206                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
02207                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02208                 if (ok)
02209                 {       
02210 #ifdef DEBUG
02211                         cout << solver->osrl << endl;
02212 #endif
02213                         cout << "COIN solver solution for parinc.mps checks." << endl;
02214                 }
02215                 else
02216                 {       cout << "COIN solver solution for parinc.mps in error:" << endl;
02217                         cout << solver->osrl << endl;
02218                 }
02219                 if(ok == false) throw ErrorClass(" Fail unit test with COIN Solver on MPS test problem parincLinear.mps");
02220                 delete solver;
02221                 solver = NULL;
02222                 delete mps2osil; 
02223                 mps2osil = NULL;
02224 //              cout << endl;
02225 //              cout << "Done with MPS testing" << endl;
02226                 unitTestResult << "TEST " << nOfTest << ": Test the MPS -> OSiL converter on parinc.mps using Cbc" << std::endl;
02227                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02228         }
02229         catch(const ErrorClass& eclass){
02230                 cout << "OSrL =  " <<  solver->osrl <<  endl;
02231                 cout << endl << endl << endl;
02232                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the MPS converter:"  + eclass.errormsg << endl;
02233         }
02234         
02235         
02236 // test reading a GAMS file
02237 
02238 #if  0
02239 #ifdef COIN_HAS_GAMSUTILS
02240         std::cout  << "Working with GAMSIO " << std::endl;
02241 
02242         std::string gmsControlFile = "/home/kmartin/bin/gams/23.2/225a/gamscntr.dat";
02243 
02244         
02245         OSgams2osil *gams2osil;
02246         gams2osil = new OSgams2osil( gmsControlFile);
02247         gams2osil->createOSInstance();
02248         std::cout << gams2osil->osinstance->printModel() << std::endl;
02249         std::cout  << "Done Working with GAMSIO " << std::endl;
02250         delete gams2osil;
02251         exit( 1);
02252 #endif
02253 #endif
02254 
02255 // now solve with an OSInstance created from an AMPL nl file
02256         try{
02257 #ifdef COIN_HAS_ASL
02258                 cout << endl << "TEST " << ++nOfTest << ": AMPL solver interface" << endl << endl;
02259                 ok = true;
02260                 cout << "create a cbc Solver for AMPL nl - OSInstance solution" << endl;
02261                 solver = new CoinSolver();
02262                 solver->sSolverName = "cbc";
02263                 nl2osil = new OSnl2osil( nlFileName); 
02264                 nl2osil->createOSInstance() ;
02265                 solver->osinstance = nl2osil->osinstance;       
02266 
02267                 OSiLWriter tmp_osil_writer;
02268                 tmp_osil_writer.m_bWhiteSpace = true;
02269                 std::cout << tmp_osil_writer.writeOSiL( solver->osinstance) << std::endl;
02270 
02271                 osol = "";  //<osol></osol>";
02272                 solver->osol = osol;
02273                 cout << "call Cbc Solve" << endl;
02274                 solver->buildSolverInstance();
02275                 solver->solve();
02276                 check = 7668;
02277                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
02278                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02279                 if (ok)
02280                 {       
02281 #ifdef DEBUG
02282                         cout << solver->osrl << endl;
02283 #endif
02284                         cout << "COIN cbc solver solution for parinc.nl checks." << endl;
02285                 }
02286                 else
02287                 {       cout << "COIN cbc solver solution for parinc.nl in error:" << endl;
02288                         cout << solver->osrl << endl;
02289                 }
02290                 if(ok == false) throw ErrorClass(" Fail unit test with OSnl2osil on problem parinc.nl");
02291                 solver->osinstance = NULL;
02292                 delete solver;
02293                 solver = NULL;
02294                 cout << "call delete nl2osil" << endl;
02295                 delete nl2osil;
02296                 nl2osil = NULL; 
02297                 unitTestResult << "TEST " << nOfTest << ": Test the AMPL nl -> OSiL converter on parinc.nl using Cbc" << std::endl; 
02298                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02299 #endif
02300         }       
02301         catch(const ErrorClass& eclass){
02302                 cout << "OSrL =  " <<  solver->osrl <<  endl;
02303                 cout << endl << endl << endl;
02304                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing AMPL:"  + eclass.errormsg << endl;
02305         }
02306 
02307         //
02308         // Now test the mps feature
02309         //
02310         try{
02311                 cout << endl << "TEST " << ++nOfTest << ": b64 operations" << endl << endl;
02312                 ok = true;
02313                 OSiLWriter osilwriter;
02314                 osilwriter.m_bWriteBase64 = true;
02315                 solver = new CoinSolver();
02316                 solver->sSolverName = "cbc";
02317                 mps2osil = new OSmps2osil( mpsFileName);
02318                 solver->osinstance = NULL;
02319                 osol = "<osol></osol>";
02320                 solver->osol = osol;
02321                 mps2osil->createOSInstance() ;
02322                 solver->osil = osilwriter.writeOSiL( mps2osil->osinstance) ;
02323                 std::cout << solver->osil << std::endl;
02324                 solver->buildSolverInstance();
02325                 solver->solve();
02326                 cout << endl << endl;
02327                 check = -7668;
02328                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
02329                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02330                 if (ok)
02331                 {       cout << "COIN solution of a OSiL string in b64 format." << endl;
02332 #ifdef DEBUG
02333                         cout << solver->osrl << endl;
02334 #endif                  
02335                 }
02336                 else
02337                 {       cout << "COIN solution of a OSiL string in b64 format:" << endl;
02338                         cout << solver->osrl << endl;
02339                 }
02340                 if(ok == false) throw ErrorClass(" Fail unit test with COIN Cbc Solver on b64 test problem parincLinear.mps");
02341                 solver->osinstance = NULL;
02342                 delete solver;
02343                 solver = NULL;
02344                 delete mps2osil;
02345                 mps2osil = NULL;
02346                 unitTestResult << "TEST " << nOfTest << ": Test a problem written in b64 and then converted to OSInstance" << std::endl;
02347                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02348         }       
02349         catch(const ErrorClass& eclass){
02350                 cout << endl << endl;
02351                 cout << eclass.errormsg <<  endl << endl;
02352                 cout << "OSrL =  " <<  solver->osrl <<  endl;
02353                 cout << endl << endl << endl;
02354                 unitTestResultFailure   << "Sorry Unit Test Failed Testing Use of Base 64" << endl;
02355 
02356         }  
02357 
02358 
02359         // now test postfix and prefix routines
02360         try{
02361                 cout << endl << "TEST " << ++nOfTest << ": postfix and prefix routines" << endl << endl;
02362                 std::string expTreeTest =  dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
02363                 osil = fileUtil->getFileAsString( expTreeTest.c_str() ) ;
02364                 OSInstance *osinstance = NULL;
02365                 //osinstance = new OSInstance();
02366                 OSiLReader *osilreader = NULL;
02367                 osilreader = new OSiLReader();
02368                 //create an osinstance
02369                 osinstance = osilreader->readOSiL( osil);
02370                 OSExpressionTree* expTree = osinstance->getNonlinearExpressionTree( -1);
02371                 if(expTree == NULL) throw ErrorClass(" Null expression tree when testing prefix and postfix routines");
02372                 std::vector<OSnLNode*> postfixVec;
02373                 //postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
02374                 postfixVec = osinstance->getNonlinearExpressionTreeInPostfix( -1);
02375         
02376                 unsigned int n = postfixVec.size();
02377                 unsigned int i;
02378                 std::string *nodeNames1 = new std::string[ n];
02379                 std::string *nodeNames2 = new std::string[ n];
02380                 for (i = 0 ; i < n; i++){
02381                         std::cout << postfixVec[i]->getTokenName() << std::endl;
02382                         nodeNames1[i] = postfixVec[i]->getTokenName();
02383                 }
02384                 
02385                 // now create back the expression tree 
02386                 expTree->m_treeRoot = postfixVec[ n - 1]->createExpressionTreeFromPostfix( postfixVec);
02387         
02388                 // now get in prefix
02389                 std::vector<OSnLNode*> prefixVec;
02390                 //prefixVec = expTree->m_treeRoot->getPrefixFromExpressionTree();
02391                 prefixVec = osinstance->getNonlinearExpressionTreeInPrefix( -1);
02392                 
02393                 // now create back the expression tree
02394                 expTree->m_treeRoot = prefixVec[ 0]->createExpressionTreeFromPrefix( prefixVec);
02395                 
02396                 // now get postfix vector again and compare with original
02397                 postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
02398                 //postfixVec = osinstance->getNonlinearExpressionTreeInPostfix( -1);
02399                 if(postfixVec.size() != n) throw ErrorClass(" Problem with creating expression trees");
02400                 std::cout << std::endl << std::endl;
02401                 for (i = 0 ; i < n; i++){
02402                         //std::cout << postfixVec[i]->getTokenName() << std::endl;
02403                         nodeNames2[i] = postfixVec[i]->getTokenName();
02404                         if( nodeNames1[i] != nodeNames2[ i]) throw ErrorClass(" Problem with creating expression trees");
02405                 }       
02406                 
02407                 //delete osinstance;
02408                 delete[] nodeNames1;
02409                 delete[] nodeNames2; 
02410 
02411                 delete osilreader;
02412                 osilreader = NULL;
02413                 osinstance = NULL;              
02414                 unitTestResult << "TEST " << nOfTest << ": Successful test of prefix and postfix conversion routines" << std::endl;
02415                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02416                 
02417         }
02418         catch(const ErrorClass& eclass){
02419                 cout << endl << endl << endl;
02420                 unitTestResultFailure << eclass.errormsg << endl;
02421         }
02422         // now test the nonlinear operators     
02423         try{
02424                 cout << endl << "TEST " << ++nOfTest << ": nonlinear operators" << endl << endl;
02425                 ok = true;
02426                 std::string operatorTest =  dataDir  + "osilFiles" + dirsep + "testOperators.osil";
02427                 osil = fileUtil->getFileAsString( operatorTest.c_str() );
02428                 OSInstance *osinstance = NULL;
02429                 //osinstance = new OSInstance();
02430                 OSiLReader *osilreader = NULL;
02431                 osilreader = new OSiLReader();
02432                 OSiLWriter *osilwriter = NULL;
02433                 osilwriter = new OSiLWriter();
02434 //              cout << "Read testOperators.osil...";
02435                 osinstance = osilreader->readOSiL( osil);
02436                 
02437                 cout << "Done" << endl;
02438                 OSExpressionTree* expTree = osinstance->getNonlinearExpressionTree( -1);
02439                 std::vector<OSnLNode*> postfixVec;
02440                 postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
02441                 int n = postfixVec.size();
02442                 std::string *nodeNames1 = new std::string[ n];
02443                 for (int i = 0 ; i < n; i++){
02444                         std::cout << postfixVec[i]->getTokenName() << std::endl;
02445                         nodeNames1[i] = postfixVec[i]->getTokenName();
02446                 }
02447                 std::cout << std::endl << std::endl;
02448                 std::cout << osilwriter->writeOSiL( osinstance) << std::endl;
02449                 // now test value
02450                 double *x = NULL;
02451                 x = new double[2];
02452                 x[0] = 1;
02453                 x[1] = 2;
02454                 double parserTestVal = expTree->m_treeRoot->calculateFunction( x);
02455                 std::cout << "ParserTest Val = " << parserTestVal << std::endl;
02456                 check = 11;
02457                 //ok &= NearEqual(expTree->m_treeRoot->calculateFunction( x) , check,  1e-10 , 1e-10);
02458                 ok = ( fabs(check -  expTree->m_treeRoot->calculateFunction( x))/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02459                 if(ok == false) throw ErrorClass(" Problem evaluating expression tree");
02460                 delete[] x;
02461                 delete[] nodeNames1;
02462                 delete osilreader;
02463                 osilreader = NULL;
02464                 delete osilwriter;
02465                 osilwriter = NULL;
02466                 osinstance = NULL;
02467                 //create an osinstance
02468                 unitTestResult << "TEST " << nOfTest << ": Successful test of nonlinear operators using file testOperators.osil" << std::endl;
02469                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02470         }
02471         catch(const ErrorClass& eclass){
02472                 cout << endl << endl << endl;
02473                 unitTestResultFailure << eclass.errormsg << endl;
02474         }
02475 // Automatic differentiation
02476         try{
02477                 cout << endl << "TEST " << ++nOfTest << ": Automatic differentiation" << endl << endl;
02478 //              std::cout << std::endl << std::endl;
02479 //              std::cout << "Testing AD Features " << std::endl;
02480                 std::string expTreeTest =  dataDir  + "osilFiles" + dirsep + "CppADTestLag.osil";
02481                 /*
02482                 min x0^2 + 9*x1   -- w[0]
02483                 s.t. 
02484                 33 - 105 + 1.37*x1 + 2*x3 + 5*x1 <= 10  -- y[0]
02485                 ln(x0*x3)  + 7*x2 >= 10  -- y[1]
02486                 Note: in the first constraint 33 is a constant term and 105 
02487                 is part of the nl node
02488                 */
02489                 osil = fileUtil->getFileAsString( expTreeTest.c_str() );
02490                 OSInstance *osinstance = NULL;
02491                 //osinstance = new OSInstance();
02492                 OSiLReader *osilreader = NULL;
02493                 osilreader = new OSiLReader();
02494                 //create an osinstance
02495                 osinstance = osilreader->readOSiL( osil);
02496                 double *x;
02497                 x = new double[ 4];
02498                 x[0] = 1;
02499                 x[1] = 5;
02500                 x[2] = 10;
02501                 x[3] = 5;
02502                 SparseVector *sp;
02503                 // get the gradient for constraint 1
02504                 osinstance->getJacobianSparsityPattern();
02505                 sp = osinstance->calculateConstraintFunctionGradient(x, 1, true);
02506                 for(int i = 0; i < sp->number; i++){
02507                         std::cout << "gradient value " << sp->values[i] << std::endl;
02508                 }
02509                 ok = true;
02510                 //check gradient for constraint with index 1
02511                 double checkPartial2Con1 = 7.0 ;
02512                 //ok &= NearEqual( sp->values[ 0], checkPartial2Con1, 1e-10, 1e-10); 
02513                 ok = ( fabs(checkPartial2Con1 - sp->values[ 0] )/(fabs( checkPartial2Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02514                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
02515                 double checkPartial0Con1 = (1./x[0])  ;
02516                 //ok &= NearEqual(sp->values[ 1], checkPartial0Con1, 1e-10, 1e-10); 
02517                 ok = ( fabs(checkPartial0Con1 - sp->values[ 1] )/(fabs( checkPartial0Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02518                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
02519                 double checkPartial3Con1 = (1./x[3]) ;
02520                 //ok &= NearEqual( sp->values[ 2], checkPartial3Con1, 1e-10, 1e-10); 
02521                 ok = ( fabs(checkPartial3Con1 - sp->values[ 2] )/(fabs( checkPartial3Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02522                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
02523                 delete sp;
02524                 SparseHessianMatrix *sh;
02525                 // calcuate Hessian of objective function (index = -1)
02526                 osinstance->getLagrangianHessianSparsityPattern( );
02527                 sh = osinstance->calculateHessian(x, -1, true);
02528                 for(int i = 0; i < sh->hessDimension; i++){
02529                         std::cout << "Hessian value " << sh->hessValues[i] << std::endl;
02530                 }
02531                 //ok &= NearEqual( sh->hessValues[ 0], 2., 1e-10, 1e-10);
02532                 ok = ( fabs(2. - sh->hessValues[0] )/(2. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02533                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation"); 
02534                 //ok &= NearEqual( sh->hessValues[ 1], 0., 1e-10, 1e-10);
02535                 ok = ( fabs(0. - sh->hessValues[ 1] )/(0. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02536                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation");
02537                 //ok &= NearEqual( sh->hessValues[ 2], 0., 1e-10, 1e-10);
02538                 ok = ( fabs(0. - sh->hessValues[2] )/(0. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
02539                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation");
02540                 delete[] x;
02541                 delete osilreader;
02542                 osilreader = NULL;
02543                 unitTestResult << "TEST " << nOfTest << ": Successful test of AD gradient and Hessian calculations" << std::endl;
02544                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02545         }       
02546         catch(const ErrorClass& eclass){
02547                 cout << endl << endl << endl;
02548                 unitTestResultFailure << eclass.errormsg << endl;
02549         }
02550 } //end of if (OTHER_TESTS)
02551 
02552         //
02553         // Now test the parsers --- OSiL parser first
02554 if (PARSER_TESTS){
02555 
02556 //#if 0   //!!!  OSrL parser development
02557         try{ 
02558                 cout << endl << "TEST " << ++nOfTest << ":  OSiL parser" << endl << endl;
02559                 clock_t start, finish;
02560                 double duration;
02561                 OSiLWriter *osilwriter = NULL;
02562                 osilwriter = new OSiLWriter();
02563                 //delete fileUtil;
02564                 //fileUtil = NULL;
02565                 //fileUtil = new FileUtil();
02566                 cout << "Test parsing a model" << endl;
02567                 cout << "First read the file into a string" << endl;
02568                 start = clock();
02569                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
02570                 osil = fileUtil->getFileAsString( osilFileName.c_str());
02571                 finish = clock();
02572                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02573                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
02574                 OSiLReader *osilreader = NULL;
02575                 osilreader = new OSiLReader(); 
02576                 start = clock();
02577                 cout << "PARSE THE OSIL STRING INTO AN OSINSTANCE OBJECT" << endl;
02578                 osilreader->readOSiL( osil);
02579                 //cout << osilwriter->writeOSiL( osilreader->readOSiL( osil)) << endl;
02580                 delete osilreader;
02581                 osilreader = 0;
02582                 delete osilwriter;
02583                 osilwriter = NULL;
02584                 finish = clock();
02585                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02586                 cout << "Parsing took (seconds): "<< duration << endl;
02587                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSiL parser on problem parincLinear.osil" << std::endl;
02588                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02589         }       
02590         catch(const ErrorClass& eclass){
02591                 cout << endl << endl << endl;
02592                 cout << eclass.errormsg << endl;
02593                 unitTestResultFailure << "Sorry Unit Test Failed Testing An OSiL Parser" << endl;
02594                 
02595         }       
02596 
02597         //
02598         // Now test the extensions to the OSiL format: <timeDomain>, etc.
02599 
02600         try{ 
02601                 cout << endl << "TEST " << ++nOfTest << ": Stochastic extensions to OSiL" << endl << endl;
02602                 clock_t start, finish;
02603                 double duration;
02604                 OSiLWriter *osilwriter = NULL;
02605                 osilwriter = new OSiLWriter();
02606                 //delete fileUtil;
02607                 //fileUtil = NULL;
02608                 //fileUtil = new FileUtil();
02609                 cout << "\nTest parsing a stochastic model" << endl;
02610                 cout << "First read the file into a string" << endl;
02611                 start = clock();
02612                 osilFileName = dataDir  + "osilFiles" + dirsep + "finplan1.osil";
02613                 osil = fileUtil->getFileAsString( &osilFileName[0]);
02614                 finish = clock();
02615                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02616                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
02617                 OSiLReader *osilreader = NULL;
02618                 osilreader = new OSiLReader(); 
02619                 start = clock();
02620                 cout << "PARSE THE OSIL STRING INTO AN OSINSTANCE OBJECT" << endl;
02621                 osilreader->readOSiL( osil);
02622                 //cout << osilwriter->writeOSiL( osilreader->readOSiL( &osil)) << endl;
02623                 delete osilreader;
02624                 osilreader = 0;
02625                 delete osilwriter;
02626                 osilwriter = NULL;
02627                 finish = clock();
02628                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02629                 cout << "Parsing took (seconds): "<< duration << endl;
02630                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSiL parser on problem finplan1.osil" << std::endl;
02631                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02632         }       
02633         catch(const ErrorClass& eclass){
02634                 cout << endl << endl << endl;
02635                 cout << eclass.errormsg << endl;
02636                 unitTestResultFailure << "Error parsing an osil file with time domain information" << endl;             
02637         }       
02641         try{ 
02642                 cout << endl << "TEST " << ++nOfTest << ": GET() AND SET() METHODS FOR TimeDomain OBJECT" << endl << endl;
02643                 OSInstance *osinstance = NULL;
02644                 //osinstance = new OSInstance();
02645                 //OSiLReader *osilreader = NULL;
02646                 osilreader = new OSiLReader();
02647                 //create an osinstance
02648                 osinstance = osilreader->readOSiL( osil);
02649                 std::string f = osinstance->getTimeDomainFormat();
02650                 ok = (f == "stages");
02651                 int n = osinstance->getTimeDomainStageNumber();
02652                 ok &= (n == 6);
02653 
02654                 std::string* sncheck = new std::string[6];
02655                 sncheck[0] = "";
02656                 sncheck[1] = "";
02657                 sncheck[2] = "";
02658                 sncheck[3] = "test";
02659                 sncheck[4] = "Wha'zzup?";
02660                 sncheck[5] = "";
02661 
02662                 std::string* sn = osinstance->getTimeDomainStageNames();
02663 
02664                 for (int i = 0; i < 6; i++)
02665                         ok &= (sn[i] == sncheck[i]);
02666 
02667                 int* nv = osinstance->getTimeDomainStageNumberOfVariables();
02668 
02669                 int* nvcheck = new int[6];
02670                 nvcheck[0] = 2;
02671                 nvcheck[1] = 2;
02672                 nvcheck[2] = 0;
02673                 nvcheck[3] = 0;
02674                 nvcheck[4] = 2;
02675                 nvcheck[5] = 2;
02676 
02677                 for (int i = 0; i < 6; i++)
02678                         ok &= (nv[i] == nvcheck[i]);
02679 
02680                 int* nc = osinstance->getTimeDomainStageNumberOfConstraints();
02681 
02682                 int* nccheck = new int[6];
02683                 nccheck[0] = 1;
02684                 nccheck[1] = 1;
02685                 nccheck[2] = 0;
02686                 nccheck[3] = 0;
02687                 nccheck[4] = 1;
02688                 nccheck[5] = 1;
02689 
02690                 for (int i = 0; i < 6; i++)
02691                         ok &= (nc[i] == nccheck[i]);
02692 
02693                 int* no = osinstance->getTimeDomainStageNumberOfObjectives();
02694 
02695                 int* nocheck = new int[6];
02696                 nocheck[0] = 1;
02697                 nocheck[1] = 1;
02698                 nocheck[2] = 1;
02699                 nocheck[3] = 0;
02700                 nocheck[4] = 1;
02701                 nocheck[5] = 1;
02702 
02703                 for (int i = 0; i < 6; i++)
02704                         ok &= (no[i] == nocheck[i]);
02705 
02706                 int** lv = osinstance->getTimeDomainStageVarList();
02707                 int** lc = osinstance->getTimeDomainStageConList();
02708                 int** lo = osinstance->getTimeDomainStageObjList();
02709 
02710                 int** lvcheck = new int*[6];
02711                 int** lccheck = new int*[6];
02712                 int** locheck = new int*[6];
02713                 for (int i = 0; i < 6; i++) {
02714                         lvcheck[i] = new int[2];
02715                         lccheck[i] = new int[2];
02716                         locheck[i] = new int[2];
02717                 };
02718                 lvcheck[0][0] = 0;
02719                 lvcheck[0][1] = 1;
02720                 lvcheck[1][0] = 2;
02721                 lvcheck[1][1] = 3;
02722                 lvcheck[4][0] = 4;
02723                 lvcheck[4][1] = 5;
02724                 lvcheck[5][0] = 6;
02725                 lvcheck[5][1] = 7;
02726                 lccheck[0][0] = 0;
02727                 lccheck[1][0] = 1;
02728                 lccheck[4][0] = 2;
02729                 lccheck[5][0] = 3;
02730                 locheck[0][0] = -1;
02731                 locheck[1][0] = -1;
02732                 locheck[2][0] = -1;
02733                 locheck[4][0] = -1;
02734                 locheck[5][0] = -1;
02735 
02736                 for (int i = 0; i < 6; i++) {
02737                         for (int j = 0; j < nv[i]; j++) 
02738                                 ok &= (lvcheck[i][j] == lv[i][j]);
02739                         for (int j = 0; j < nc[i]; j++) 
02740                                 ok &= (lccheck[i][j] == lc[i][j]);
02741                         for (int j = 0; j < no[i]; j++) 
02742                                 ok &= (locheck[i][j] == lo[i][j]);
02743                 };
02744 
02745                 std::string* sn1 = new std::string[6];
02746                 int* nv1 = new int[6];
02747                 int* nc1 = new int[6];
02748                 int* no1 = new int[6];
02749                 int** lv1 = new int*[6];
02750                 int** lc1 = new int*[6];
02751                 int** lo1 = new int*[6];
02752                 for (int i = 0; i < 6; i++) {
02753                         lv1[i] = new int[2];
02754                         lc1[i] = new int[2];
02755                         lo1[i] = new int[2];
02756                 };
02757                 for (int i = 0; i < 6; i++) {
02758                         sn1[i] = sn[i];
02759                         nv1[i] = nv[i];
02760                         nc1[i] = nc[i];
02761                         no1[i] = no[i];
02762                         for (int j = 0; j < nv[i]; j++) {
02763                                 lv1[i][j] = lv[i][j];
02764                         };
02765                         for (int j = 0; j < nc[i]; j++) {
02766                                 lc1[i][j] = lc[i][j];
02767                         };
02768                         for (int j = 0; j < no[i]; j++) {
02769                                 lo1[i][j] = lo[i][j];
02770                         };
02771                 };
02772 
02773                 ok &= osinstance->setTimeDomain("none");
02774                 n = 0;
02775                 ok &= osinstance->setTimeDomainStages(n,NULL);
02776                 ok &= osinstance->setTimeDomainStages(4,NULL);
02777 
02778                 n = osinstance->getTimeDomainStageNumber();
02779                 ok &= (n == 4);
02780 
02781                 int *nelem, *startIdx, **VI;
02782                 nelem = new int[4];
02783                 startIdx = new int[4];
02784                 VI = new int*[4];
02785                 for (int i = 0; i < 4; i++)
02786                 {       nelem[i] = 2;
02787                         startIdx[i] = 2*i;
02788                         VI[i] = new int[2];
02789                         VI[i][0] = 2*i;
02790                         VI[i][1] = 2*i + 1;
02791                 };
02792                 ok &= osinstance->setTimeDomainStageVariablesUnordered(4,nelem,VI);
02793 
02794                 for (int i = 0; i < 4; i++)
02795                 {       nelem[i] = 1;
02796                         startIdx[i] = i;
02797                 };
02798                 ok &= osinstance->setTimeDomainStageConstraintsOrdered(4,nelem,startIdx);
02799 
02800                 for (int i = 0; i < 4; i++)
02801                 {       nelem[i] = 1;
02802                         startIdx[i] = -1;
02803                 };
02804                 ok &= osinstance->setTimeDomainStageObjectivesOrdered(4,nelem,startIdx);
02805 
02806                 ok &= osinstance->setTimeDomain("none");
02807 
02808                 ok &= osinstance->setTimeDomain("interval");
02809 
02810                 ok &= osinstance->setTimeDomainInterval(0.0, 1.0);
02811                 double lower = osinstance->getTimeDomainIntervalStart();
02812                 ok &= (lower == 0.0);
02813                 double upper = osinstance->getTimeDomainIntervalHorizon();
02814                 ok &= (upper == 1.0);
02815 
02816                 ok &= osinstance->setTimeDomain("none");
02817 
02818                 ok &= osinstance->setTimeDomainStages(6,sncheck);
02819                 ok &= osinstance->setTimeDomainStageVariablesUnordered(6,nvcheck,lvcheck);
02820                 ok &= osinstance->setTimeDomainStageObjectivesUnordered(6,nocheck,locheck);
02821                 ok &= osinstance->setTimeDomainStageConstraintsUnordered(6,nccheck,lccheck);
02822                 int n2 = osinstance->getTimeDomainStageNumber();
02823                 ok &= (n2 == 6);
02824                 std::string* sn2 = osinstance->getTimeDomainStageNames();
02825                 int* nv2 = osinstance->getTimeDomainStageNumberOfVariables();
02826                 int* nc2 = osinstance->getTimeDomainStageNumberOfConstraints();
02827                 int* no2 = osinstance->getTimeDomainStageNumberOfObjectives();
02828                 int** lv2 = osinstance->getTimeDomainStageVarList();
02829                 int** lc2 = osinstance->getTimeDomainStageConList();
02830                 int** lo2 = osinstance->getTimeDomainStageObjList();
02831                 for (int i = 0; i < n2; i++)
02832                 {       ok &= (sn2[i] == sncheck[i]);
02833                         ok &= (nv2[i] == nvcheck[i]);
02834                         ok &= (nc2[i] == nccheck[i]);
02835                         ok &= (no2[i] == nocheck[i]);
02836                         for (int j = 0; j < nv2[i]; j++)
02837                                 ok &= (lv2[i][j] == lvcheck[i][j]);
02838                         for (int j = 0; j < nc2[i]; j++)
02839                                 ok &= (lc2[i][j] == lccheck[i][j]);
02840                         for (int j = 0; j < no2[i]; j++)
02841                                 ok &= (lo2[i][j] == locheck[i][j]);
02842                 };
02843                 delete [] sncheck;
02844                 sncheck = NULL;
02845                 delete [] nvcheck;
02846                 nvcheck = NULL;
02847                 delete [] nccheck;
02848                 nccheck = NULL;
02849                 delete [] nocheck;
02850                 nocheck = NULL;
02851                 for (int i = 0; i < 6; i++) {
02852                         delete [] lvcheck[i];
02853                         delete [] lccheck[i];
02854                         delete [] locheck[i];
02855                         delete [] lv1[i];
02856                         delete [] lc1[i];
02857                         delete [] lo1[i];
02858                 };
02859                 delete [] lvcheck;
02860                 lvcheck = NULL;
02861                 delete [] lccheck;
02862                 lccheck = NULL;
02863                 delete [] locheck;
02864                 locheck = NULL;
02865                 delete [] lv1;
02866                 lv1 = NULL;
02867                 delete [] lc1;
02868                 lc1 = NULL;
02869                 delete [] lo1;
02870                 lo1 = NULL;
02871                 delete [] sn1;
02872                 sn1 = NULL;
02873                 delete[] nv1;
02874                 nv1 = NULL;
02875                 delete[] nc1;
02876                 nc1 = NULL;
02877                 delete[] no1;
02878                 no1 = NULL;
02879                 delete [] nelem;
02880                 nelem = NULL;
02881                 delete [] startIdx;
02882                 startIdx = NULL;
02883                 for (int i = 0; i < 4; i++) {
02884                         delete [] VI[i];
02885                 };
02886                 delete [] VI;
02887                 VI = NULL;
02888                 delete osilreader;
02889                 unitTestResult << "TEST " << nOfTest << ": Successful test of osinstance get() and set() methods" << std::endl;
02890                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02891         }       
02892         catch(const ErrorClass& eclass){
02893                 cout << endl << endl << endl;
02894                 cout << eclass.errormsg << endl;
02895                 unitTestResultFailure << "Sorry Unit Test Failed osinstance get() and set() Methods" << endl;           
02896         }       
02897 
02898         //
02899         // Now test the OSoL parser
02900         OSoLWriter *osolwriter = NULL;
02901 //      OSoLReader *osolreader = NULL;
02902         //osolwriter = new OSoLWriter();
02903         //osolreader = new OSoLReader();
02904 
02905         try{ 
02919                 cout << endl << "TEST " << ++nOfTest << ": OSoL parser" << endl << endl;
02920                 std::string tmpOSoL;
02921                 clock_t start, finish;
02922                 double duration;
02923                 osolwriter = new OSoLWriter();
02924                 osolreader = new OSoLReader();
02925                 OSOption *osoption = NULL;
02926                 //osoption = new OSOption(); 
02927                 cout << "Test parsing an OSoL file" << endl;
02928                 cout << "First read the OSoL file into a string" << endl;
02929                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest.osol"; 
02930                 cout << osolFileName << endl;
02931                 start = clock();
02932                 std::string osol = fileUtil->getFileAsString( osolFileName.c_str() );
02933                 finish = clock();
02934                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02935                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
02936                 start = clock();
02937                 cout << "PARSE THE OSOL STRING INTO AN OSOPTION OBJECT" << endl;
02938                 osoption = osolreader->readOSoL( osol);
02939 
02940                 //Pad all the arrays
02941                 cout << endl << "Test the add() methods" << endl;
02942                 
02943                 ok = osoption->setAnOtherGeneralOption("testing","one","two  three");
02944                 ok = osoption->setOtherSystemOptions(0,NULL) && ok; 
02945                 ok = osoption->setAnOtherSystemOption("Ho Ho Ho","","") && ok;
02946                 ok = osoption->setAnOtherServiceOption("OneMore","Option","To Go") && ok;
02947                 ok = osoption->setAnotherJobDependency("DoReMi") && ok;
02948                 ok = osoption->setAnotherRequiredDirectory("C:\\MSYS") && ok;
02949                 ok = osoption->setAnotherRequiredFile("C:\\MSYS\\junk.tmp") && ok;
02950                 ok = osoption->setAnotherDirectoryToMake("C:\\tempdir") && ok;
02951                 ok = osoption->setAnotherFileToMake("C:\\tempdir\\temp.tmp") && ok;
02952                 ok = osoption->setAnotherInputDirectoryToMove("C:\\tempdir","C:\\OS\\calc",true) && ok;
02953                 ok = osoption->setAnotherInputFileToMove("C:\\OS\\parinc.osil","C:\\OS\\calc\\input.osil",true) && ok;
02954                 ok = osoption->setAnotherOutputFileToMove("C:\\OS\\calc\\putput.osrl","C:\\OS\\parinc.osol",false) && ok;
02955                 ok = osoption->setAnotherOutputDirectoryToMove("C:\\OS\\calc","C:\\OS\\save",false) && ok;
02956                 ok = osoption->setAnotherFileToDelete("C:\\OS\\calc\\input.osil") && ok;
02957                 ok = osoption->setAnotherDirectoryToDelete("C:\\tempdir") && ok;
02958                 ok = osoption->setAnotherProcessToKill("ABC123") && ok;
02959                 ok = osoption->setAnOtherJobOption("DoReMi","ABC","One Two Three") && ok;
02960                 ok = osoption->setAnotherInitVarValue(5,12.3) && ok;
02961                 ok = osoption->setAnotherInitVarValueString(6,"BLUE") && ok;
02962                 ok = osoption->setAnotherInitBasisStatus(6,"unknown") && ok;
02963                 ok = osoption->setAnotherIntegerVariableBranchingWeight(5,100.) && ok;
02964 
02965                 int SOS3idx[2];
02966                 double SOS3val[2];
02967                 SOS3idx[0] = 3;
02968                 SOS3idx[1] = 6;
02969                 SOS3val[0] = 1.0;
02970                 SOS3val[1] = 2.0;
02971                 int tnvar;
02972                 tnvar = osoption->getNumberOfSOS(); 
02973                 ok = osoption->setAnotherSOSVariableBranchingWeight(3,2,1.0,SOS3idx,SOS3val) && ok;
02974                 assert (osoption->getNumberOfSOS() == (tnvar + 1));
02975                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[0]->idx == 3);
02976                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[1]->idx == 6);
02977                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[0]->value == 1.0);
02978                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[1]->value == 2.0);
02979 #ifdef DEBUG
02980                 cout << endl << "another SOS has been added" << endl << endl;
02981 #endif
02982 
02983                 OtherVariableOption *varopt;
02984                 varopt = new OtherVariableOption();
02985                 varopt->name = "testVarOpt";
02986                 varopt->numberOfVar = 0;
02987                 ok = osoption->setAnOtherVariableOption(varopt) && ok;
02988                 delete varopt;
02989                 varopt = NULL;
02990 
02991                 OtherObjectiveOption *objopt;
02992                 objopt = new OtherObjectiveOption();
02993                 objopt->name = "testObjOpt";
02994                 objopt->numberOfObj = 0;
02995                 ok = osoption->setAnOtherObjectiveOption(objopt) && ok;
02996                 delete objopt;
02997                 objopt = NULL;
02998 
02999                 ok = osoption->setAnotherInitConValue(2,17.0) && ok;
03000                 ok = osoption->setAnotherInitDualVarValue(2,0.0,DBL_MAX) && ok;
03001 
03002                 OtherConstraintOption *conopt;
03003                 conopt = new OtherConstraintOption();
03004                 conopt->name = "testObjOpt";
03005                 conopt->numberOfCon = 2;
03006                 conopt->con = new OtherConOption*[2];
03007                 conopt->con[0] = new OtherConOption();
03008                 conopt->con[0]->idx = 0;
03009                 conopt->con[0]->value = "3.0";
03010                 conopt->con[1] = new OtherConOption();
03011                 conopt->con[1]->idx = 1;
03012                 conopt->con[1]->lbValue = "0.0";
03013                 conopt->con[1]->ubValue = "10.0";
03014                 ok = osoption->setAnOtherConstraintOption(conopt) && ok;
03015                 delete conopt;
03016                 conopt = NULL;
03017 
03018                 ok = osoption->setAnotherSolverOption("HoHum","gus","PhoNY","","test","") && ok;
03019 
03020                 if (!ok)
03021                         throw ErrorClass(" Could not add to osoption data structure");
03022 
03023                 //Now transfer to another osoption using get() and set() methods
03024                 std::string optionstring;
03025                 int option_i;
03026                 double option_d;
03027                 OSOption* osoption2 = new OSOption();
03028 
03029                 cout << endl << "transfer osoption to another OSOption object" << endl;
03030 
03031                 optionstring = osoption->getServiceURI();
03032                 ok = osoption2->setServiceURI(optionstring);
03033 #ifdef DEBUG
03034                 if (!ok)
03035                         throw ErrorClass(" error in get/set ServiceURI");
03036 #endif
03037 
03038                 optionstring = osoption->getServiceName();
03039                 ok = osoption2->setServiceName(optionstring) && ok;
03040 #ifdef DEBUG
03041                 if (!ok)
03042                         throw ErrorClass(" error in get/set ServiceName");
03043 #endif
03044 
03045                 optionstring = osoption->getInstanceName();
03046                 ok = osoption2->setInstanceName(optionstring) && ok;
03047 #ifdef DEBUG
03048                 if (!ok)
03049                         throw ErrorClass(" error in get/set InstanceName");
03050 #endif
03051 
03052                 optionstring = osoption->getInstanceLocation();
03053                 ok = osoption2->setInstanceLocation(optionstring) && ok;
03054 #ifdef DEBUG
03055                 if (!ok)
03056                         throw ErrorClass(" error in get/set InstanceLocation");
03057 #endif
03058 
03059                 optionstring = osoption->getInstanceLocationType();
03060                 ok = osoption2->setInstanceLocationType(optionstring) && ok;
03061 #ifdef DEBUG
03062                 if (!ok)
03063                         throw ErrorClass(" error in get/set InstanceLocationtype");
03064 #endif
03065 
03066                 optionstring = osoption->getJobID();
03067                 ok = osoption2->setJobID(optionstring) && ok;
03068 #ifdef DEBUG
03069                 if (!ok)
03070                         throw ErrorClass(" error in get/set JobID");
03071 #endif
03072 
03073                 optionstring = osoption->getSolverToInvoke();
03074                 ok = osoption2->setSolverToInvoke(optionstring) && ok;
03075 #ifdef DEBUG
03076                 if (!ok)
03077                         throw ErrorClass(" error in get/set SolverToInvoke");
03078 #endif
03079 
03080                 optionstring = osoption->getInstanceLocationType();
03081                 ok = osoption2->setInstanceLocationType(optionstring) && ok;
03082 #ifdef DEBUG
03083                 if (!ok)
03084                         throw ErrorClass(" error in get/set InstanceLocationType");
03085 #endif
03086 
03087                 optionstring = osoption->getUserName();
03088                 ok = osoption2->setUserName(optionstring) && ok;
03089 #ifdef DEBUG
03090                 if (!ok)
03091                         throw ErrorClass(" error in get/set UserName");
03092 #endif
03093 
03094                 optionstring = osoption->getPassword();
03095 #ifdef DEBUG
03096                 if (!ok)
03097                         throw ErrorClass(" error in get/set Password");
03098 #endif
03099                 ok = osoption2->setPassword(optionstring) && ok;
03100 
03101                 optionstring = osoption->getContact();
03102                 ok = osoption2->setContact(optionstring) && ok;
03103 #ifdef DEBUG
03104                 if (!ok)
03105                         throw ErrorClass(" error in get/set Contact");
03106 #endif
03107                 
03108                 optionstring = osoption->getContactTransportType();
03109                 ok = osoption2->setContactTransportType(optionstring) && ok;
03110 #ifdef DEBUG
03111                 if (!ok)
03112                         throw ErrorClass(" error in get/set TransportType");
03113 #endif
03114 
03115                 int nopt;
03116                 OtherOption** otherOpt;
03117                 nopt = osoption->getNumberOfOtherGeneralOptions();
03118                 otherOpt = osoption->getOtherGeneralOptions();
03119                 ok = osoption2->setOtherGeneralOptions(nopt, otherOpt) && ok;
03120 #ifdef DEBUG
03121                 if (!ok)
03122                         throw ErrorClass(" error in get/set OtherGeneralOption");
03123 #endif
03124 
03125                 option_d = osoption->getMinDiskSpace();
03126                 ok = osoption2->setMinDiskSpace(option_d) && ok;
03127 #ifdef DEBUG
03128                 if (!ok)
03129                         throw ErrorClass(" error in get/set MinDiskSpace");
03130 #endif
03131 
03132                 optionstring = osoption->getMinDiskSpaceUnit();
03133                 ok = osoption2->setMinDiskSpaceUnit(optionstring) && ok;
03134 #ifdef DEBUG
03135                 if (!ok)
03136                         throw ErrorClass(" error in get/set MinDiskSpaceUnit");
03137 #endif
03138 
03139                 option_d = osoption->getMinMemorySize();
03140                 ok = osoption2->setMinMemorySize(option_d) && ok;
03141 #ifdef DEBUG
03142                 if (!ok)
03143                         throw ErrorClass(" error in get/set MinMemorySize");
03144 #endif
03145 
03146                 optionstring = osoption->getMinMemoryUnit();
03147                 ok = osoption2->setMinMemoryUnit(optionstring) && ok;
03148 #ifdef DEBUG
03149                 if (!ok)
03150                         throw ErrorClass(" error in get/set MinMemoryUnit");
03151 #endif
03152 
03153                 option_d = osoption->getMinCPUSpeed();
03154                 ok = osoption2->setMinCPUSpeed(option_d) && ok;
03155 #ifdef DEBUG
03156                 if (!ok)
03157                         throw ErrorClass(" error in get/set MinCPUSpeed");
03158 #endif
03159 
03160                 optionstring = osoption->getMinCPUSpeedUnit();
03161                 ok = osoption2->setMinCPUSpeedUnit(optionstring) && ok;
03162 #ifdef DEBUG
03163                 if (!ok)
03164                         throw ErrorClass(" error in get/set MinCPUSpeedUnit");
03165 #endif
03166 
03167                 option_i = osoption->getMinCPUNumber();
03168                 ok = osoption2->setMinCPUNumber(option_i) && ok;
03169 #ifdef DEBUG
03170                 if (!ok)
03171                         throw ErrorClass(" error in get/set MinCPUNumber");
03172 #endif
03173 
03174                 OtherOption** otherOpt2;
03175                 nopt = osoption->getNumberOfOtherSystemOptions();
03176                 otherOpt2 = osoption->getOtherSystemOptions();
03177                 ok = osoption2->setOtherSystemOptions(nopt, otherOpt2) && ok;
03178 #ifdef DEBUG
03179                 if (!ok)
03180                         throw ErrorClass(" error in get/set OtherSystemOptions");
03181 #endif
03182 
03183 
03184                 optionstring = osoption->getServiceType();
03185                 ok = osoption2->setServiceType(optionstring) && ok;
03186 #ifdef DEBUG
03187                 if (!ok)
03188                         throw ErrorClass(" error in get/set ServiceType");
03189 #endif
03190 
03191                 OtherOption** otherOpt3;
03192                 nopt = osoption->getNumberOfOtherServiceOptions();
03193                 otherOpt3 = osoption->getOtherServiceOptions();
03194                 ok = osoption2->setOtherServiceOptions(nopt, otherOpt3) && ok;
03195 #ifdef DEBUG
03196                 if (!ok)
03197                         throw ErrorClass(" error in get/set OtherServiceOptions");
03198 #endif
03199 
03200 
03201                 option_d = osoption->getMaxTime();
03202                 ok = osoption2->setMaxTime(option_d) && ok;
03203 #ifdef DEBUG
03204                 if (!ok)
03205                         throw ErrorClass(" error in get/set MaxTime");
03206 #endif
03207 
03208                 optionstring = osoption->getMaxTimeUnit();
03209                 ok = osoption2->setMaxTimeUnit(optionstring) && ok;
03210 #ifdef DEBUG
03211                 if (!ok)
03212                         throw ErrorClass(" error in get/set MaxTimeUnit");
03213 #endif
03214 
03215                 optionstring = osoption->getRequestedStartTime();
03216                 ok = osoption2->setRequestedStartTime(optionstring) && ok;
03217 #ifdef DEBUG
03218                 if (!ok)
03219                         throw ErrorClass(" error in get/set RequestedStartTime");
03220 #endif
03221 
03222                 nopt = osoption->getNumberOfJobDependencies();
03223                 std::string* tJobID = osoption->getJobDependencies();
03224                 ok = osoption2->setJobDependencies(nopt, tJobID) && ok;
03225 #ifdef DEBUG
03226                 if (!ok)
03227                         throw ErrorClass(" error in get/set JobDependencies");
03228 #endif
03229 
03230                 nopt = osoption->getNumberOfRequiredDirectories();
03231                 std::string* reqDir = osoption->getRequiredDirectories();
03232                 ok = osoption2->setRequiredDirectories(nopt, reqDir) && ok;
03233 #ifdef DEBUG
03234                 if (!ok)
03235                         throw ErrorClass(" error in get/set RequiredDirectories");
03236 #endif
03237 
03238                 nopt = osoption->getNumberOfRequiredFiles();
03239                 std::string* reqFil = osoption->getRequiredFiles();
03240                 ok = osoption2->setRequiredFiles(nopt, reqFil) && ok;
03241 #ifdef DEBUG
03242                 if (!ok)
03243                         throw ErrorClass(" error in get/set RequiredFiles");
03244 #endif
03245 
03246                 nopt = osoption->getNumberOfDirectoriesToMake();
03247                 std::string* mkDir = osoption->getDirectoriesToMake();
03248                 ok = osoption2->setDirectoriesToMake(nopt, mkDir) && ok;
03249 #ifdef DEBUG
03250                 if (!ok)
03251                         throw ErrorClass(" error in get/set DirectoriesToMake");
03252 #endif
03253 
03254                 nopt = osoption->getNumberOfFilesToMake();
03255                 std::string* mkFil = osoption->getFilesToMake();
03256                 ok = osoption2->setFilesToMake(nopt, mkFil) && ok;
03257 #ifdef DEBUG
03258                 if (!ok)
03259                         throw ErrorClass(" error in get/set FilesToMake");
03260 #endif
03261 
03262                 nopt = osoption->getNumberOfInputDirectoriesToMove();
03263                 PathPair** inDMv = osoption->getInputDirectoriesToMove();
03264                 ok = osoption2->setInputDirectoriesToMove(nopt, inDMv) && ok;
03265 #ifdef DEBUG
03266                 if (!ok)
03267                         throw ErrorClass(" error in get/set InputDirectoriesToMove");
03268 #endif
03269 
03270                 nopt = osoption->getNumberOfInputFilesToMove();
03271                 PathPair** inFMv = osoption->getInputFilesToMove();
03272                 ok = osoption2->setInputFilesToMove(nopt, inFMv) && ok;
03273 #ifdef DEBUG
03274                 if (!ok)
03275                         throw ErrorClass(" error in get/set InputFilesToMove");
03276 #endif
03277 
03278                 nopt = osoption->getNumberOfOutputFilesToMove();
03279                 PathPair** outFMv = osoption->getOutputFilesToMove();
03280                 ok = osoption2->setOutputFilesToMove(nopt, outFMv) && ok;
03281 #ifdef DEBUG
03282                 if (!ok)
03283                         throw ErrorClass(" error in get/set OutputFilesToMove");
03284 #endif
03285 
03286                 nopt = osoption->getNumberOfOutputDirectoriesToMove();
03287                 PathPair** outDMv = osoption->getOutputDirectoriesToMove();
03288                 ok = osoption2->setOutputDirectoriesToMove(nopt, outDMv) && ok;
03289 #ifdef DEBUG
03290                 if (!ok)
03291                         throw ErrorClass(" error in get/set OutputDirectoriesToMove");
03292 #endif
03293 
03294                 nopt = osoption->getNumberOfFilesToDelete();
03295                 std::string* rmFil = osoption->getFilesToDelete();
03296                 ok = osoption2->setFilesToDelete(nopt, rmFil) && ok;
03297 #ifdef DEBUG
03298                 if (!ok)
03299                         throw ErrorClass(" error in get/set FilesToDelete");
03300 #endif
03301 
03302                 nopt = osoption->getNumberOfDirectoriesToDelete();
03303                 std::string* rmDir = osoption->getDirectoriesToDelete();
03304                 ok = osoption2->setDirectoriesToDelete(nopt, rmDir) && ok;
03305 #ifdef DEBUG
03306                 if (!ok)
03307                         throw ErrorClass(" error in get/set DirectoriesToDelete");
03308 #endif
03309 
03310                 nopt = osoption->getNumberOfProcessesToKill();
03311                 std::string* rmProc = osoption->getProcessesToKill();
03312                 ok = osoption2->setProcessesToKill(nopt, rmProc) && ok;
03313 #ifdef DEBUG
03314                 if (!ok)
03315                         throw ErrorClass(" error in get/set ProcessesToKill");
03316 #endif
03317 
03318                 OtherOption** otherOpt4;
03319                 nopt = osoption->getNumberOfOtherJobOptions();
03320                 otherOpt4 = osoption->getOtherJobOptions();
03321                 ok = osoption2->setOtherJobOptions(nopt, otherOpt4) && ok;
03322 #ifdef DEBUG
03323                 if (!ok)
03324                         throw ErrorClass(" error in get/set OtherJobOptions");
03325 #endif
03326 
03327                 int nvar, nobj, ncon;
03328                 //nvar = osoption->getOptionInt("numberOfVariables");
03329                 //ok = osoption2->setNumberOfVariables(nvar) && ok;
03330                 //nobj = osoption->getOptionInt("numberOfObjectives");
03331                 //ok = osoption2->setNumberOfObjectives(nobj) && ok;
03332                 //ncon = osoption->getOptionInt("numberOfConstraints");
03333                 //ok = osoption2->setNumberOfConstraints(ncon) && ok;
03334                 // eliminate references to numberOfVariables
03335                 nvar = 10; 
03336                 nobj = 1; 
03337                 ncon = 4; 
03338 #ifdef DEBUG
03339                 if (!ok)
03340                         throw ErrorClass(" error in get/set problem dimensions");
03341 #endif
03342  
03343 // for the variables, objectives and constraints use a mixture of dense and sparse methods
03344                 double* IVV;
03345                 IVV = osoption->getInitVarValuesDense(nvar);
03346                 ok = osoption2->setInitVarValuesDense(nvar, IVV) && ok;
03347 #ifdef DEBUG
03348                 if (!ok)
03349                         throw ErrorClass(" error in get/set InitVarValues");
03350 #endif
03351 
03352                 nopt = osoption->getNumberOfInitVarValuesString();
03353                 InitVarValueString** IVV2;
03354                 IVV2 = osoption->getInitVarValuesStringSparse();
03355                 ok = osoption2->setInitVarValuesStringSparse(nopt, IVV2) && ok;         
03356 #ifdef DEBUG
03357                 if (!ok)
03358                         throw ErrorClass(" error in get/set InitVarValuesString");
03359 #endif
03360 
03361                 std::string*  IBS;
03362                 IBS = osoption->getInitBasisStatusDense(nvar);
03363                 ok = osoption2->setInitBasisStatusDense(nvar, IBS) && ok;               
03364 #ifdef DEBUG
03365                 if (!ok)
03366                         throw ErrorClass(" error in get/set InitBasisStatus");
03367 #endif
03368 
03369                 double* IVBW;
03370                 IVBW = osoption->getIntegerVariableBranchingWeightsDense(nvar);
03371                 ok = osoption2->setIntegerVariableBranchingWeightsDense(nvar, IVBW) && ok;              
03372 #ifdef DEBUG
03373                 if (!ok)
03374                         throw ErrorClass(" error in get/set IntegerVariableBranchingWeights");
03375 #endif
03376 
03377                 SOSWeights** sos;
03378                 sos = osoption->getSOSVariableBranchingWeightsSparse();
03379                 nopt = osoption->getNumberOfSOS();
03380                 ok = osoption2->setSOSVariableBranchingWeights(nopt, sos) && ok;
03381 #ifdef DEBUG
03382                 if (!ok)
03383                         throw ErrorClass(" error in get/set SOSVariableBranchingWeights");
03384 #endif
03385 
03386                 OtherVariableOption** otherV;
03387                 otherV = osoption->getAllOtherVariableOptions();
03388                 nopt = osoption->getNumberOfOtherVariableOptions();
03389                 ok = osoption2->setOtherVariableOptions(nopt, otherV) && ok;
03390 #ifdef DEBUG
03391                 if (!ok)
03392                         throw ErrorClass(" error in get/set OtherVariableOptions");
03393 #endif
03394 
03395                 double* IOV;
03396                 IOV = osoption->getInitObjValuesDense(nobj);
03397                 ok = osoption2->setInitObjValuesDense(nobj, IOV) && ok;         
03398 #ifdef DEBUG
03399                 if (!ok)
03400                         throw ErrorClass(" error in get/set InitObjValues");
03401 #endif
03402 
03403                 nopt = osoption->getNumberOfInitObjBounds();
03404                 InitObjBound** IOB;
03405                 IOB = osoption->getInitObjBoundsSparse();
03406                 ok = osoption2->setInitObjBoundsSparse(nopt, IOB) && ok;                
03407 #ifdef DEBUG
03408                 if (!ok)
03409                         throw ErrorClass(" error in get/set InitObjBounds");
03410 #endif
03411 
03412                 OtherObjectiveOption** otherO;
03413                 otherO = osoption->getAllOtherObjectiveOptions();
03414                 nopt = osoption->getNumberOfOtherObjectiveOptions();
03415                 ok = osoption2->setOtherObjectiveOptions(nopt, otherO) && ok;
03416 #ifdef DEBUG
03417                 if (!ok)
03418                         throw ErrorClass(" error in get/set OtherObjectiveOptions");
03419 #endif
03420 
03421                 
03422                 double* ICV;
03423                 ICV = osoption->getInitConValuesDense(ncon);
03424                 ok = osoption2->setInitConValuesDense(ncon, ICV) && ok;         
03425 #ifdef DEBUG
03426                 if (!ok)
03427                         throw ErrorClass(" error in get/set InitConValues");
03428 #endif
03429 
03430                 nopt = osoption->getNumberOfInitDualVarValues();
03431                 InitDualVarValue** IDV;
03432                 IDV = osoption->getInitDualVarValuesSparse();
03433                 ok = osoption2->setInitDualVarValuesSparse(nopt, IDV) && ok;            
03434 #ifdef DEBUG
03435                 if (!ok)
03436                         throw ErrorClass(" error in get/set InitDualVarValues");
03437 #endif
03438 
03439                 OtherConstraintOption** otherC;
03440                 otherC = osoption->getAllOtherConstraintOptions();
03441                 nopt = osoption->getNumberOfOtherConstraintOptions();
03442                 ok = osoption2->setOtherConstraintOptions(nopt, otherC) && ok;
03443 #ifdef DEBUG
03444                 if (!ok)
03445                         throw ErrorClass(" error in get/set OtherConstraintOptions");
03446 #endif
03447 
03448                 SolverOption** SO;
03449                 SO = osoption->getAllSolverOptions();
03450                 nopt = osoption->getNumberOfSolverOptions();
03451                 ok = osoption2->setSolverOptions(nopt, SO) && ok;
03452 #ifdef DEBUG
03453                 if (!ok)
03454                         throw ErrorClass(" error in get/set SolverOptions");
03455 #endif
03456 
03457                 ok = osoption->IsEqual(osoption2) && ok;
03458                 if (!ok)
03459                         throw ErrorClass(" OSOption get() and  set() methods do not work correctly");
03460 
03461                 delete osoption2;
03462                 osoption2 = NULL;
03463 
03464                 cout << "Write the content to a new file" << endl;              
03465                 tmpOSoL = osolwriter->writeOSoL( osoption);
03466                 cout << endl << "Here is tmpOSoL:" <<endl;
03467                 cout << endl << endl << tmpOSoL << endl;
03468                 cout << "-----------------------------------------" << endl << endl;
03469 //              delete osolreader;
03470 //              osolreader = NULL;
03471 
03472                 // make sure we can parse without error
03473                 OSoLReader *osolreader2;
03474                 osolreader2 = new OSoLReader();
03475                 cout << "Read the string back" << endl;
03476 
03477                 OSOption *osoption3 = NULL;
03478                 osoption3 = osolreader2->readOSoL( tmpOSoL);
03479 
03480                 ok = osoption->IsEqual(osoption3);
03481                 if (!ok)
03482                         throw ErrorClass(" Loss of information in OSoL write/read");
03483                 delete osolreader2;
03484                 osolreader2 = NULL;
03485 
03486 
03487                 delete osolwriter;
03488                 osolwriter = NULL;
03489                 delete osolreader;
03490                 osolreader = NULL;
03491                 unitTestResult << 
03492                      "TEST " << nOfTest << ": Successful test of OSoL parser on file parsertest.osol" 
03493                       << std::endl;
03494                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
03495 
03496 
03497                 // now a second example
03498                 cout << endl << "TEST " << ++nOfTest << ": Parse another .osol file" << endl << endl;
03499                 osolwriter = new OSoLWriter();
03500                 osolreader = new OSoLReader();
03501                 cout << "First read the OSoL file into a string" << endl;
03502                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest2.osol"; 
03503                 osol = fileUtil->getFileAsString( osolFileName.c_str() );
03504                 finish = clock();
03505                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
03506                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
03507                 cout << "Parse the OSoL string into an OSOption object" << endl;
03508                 osoption = osolreader->readOSoL( osol);
03509                 tmpOSoL = osolwriter->writeOSoL( osoption) ;
03510                 delete osolreader;
03511                 osolreader = NULL;
03512                 osolreader = new OSoLReader();
03513                 osolreader->readOSoL( tmpOSoL);
03514                 delete osolwriter;
03515                 osolwriter = NULL;
03516                 delete osolreader;
03517                 osolreader = NULL;
03518 
03519                 // and a third example
03520                 cout << "Test parsing another OSoL file" << endl;
03521                 osolwriter = new OSoLWriter();
03522                 osolreader = new OSoLReader();
03523                 cout << "First read the OSoL file into a string" << endl;
03524                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest3.osol"; 
03525                 osol = fileUtil->getFileAsString( osolFileName.c_str() );
03526                 finish = clock();
03527                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
03528                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
03529                 cout << "Parse the OSoL string into an OSOption object" << endl;
03530                 osoption = osolreader->readOSoL( osol);
03531                 tmpOSoL = osolwriter->writeOSoL( osoption) ;
03532                 delete osolreader;
03533                 osolreader = NULL;
03534                 osolreader = new OSoLReader();
03535                 osolreader->readOSoL( tmpOSoL);
03536                 delete osolwriter;
03537                 osolwriter = NULL;
03538                 delete osolreader;
03539                 osolreader = NULL;
03540 
03541 
03542                 // a trivial string
03543                 cout << "Test parsing a trivial string" << endl;
03544                 osolreader = new OSoLReader();
03545                 osol = "<osol></osol>";
03546                 cout << "Parse the OSoL string into an OSOption object" << endl;
03547                 osoption = osolreader->readOSoL( osol);
03548                 delete osolreader;
03549                 osolreader = NULL;
03550 
03551 
03552                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSoL parser" << std::endl;
03553                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
03554 
03555 
03556         }       
03557         
03558         catch(const ErrorClass& eclass){
03559                 cout << endl << endl << endl;
03560                 if(osolwriter != NULL) delete osolwriter;
03561                 if(osolreader != NULL) delete osolreader;
03562                 // " Problem with the test reading OSoL data";
03563                 unitTestResultFailure << eclass.errormsg << endl;
03564                 unitTestResultFailure << "There was a failure in the test for reading OSoL" << endl;
03565         }
03566 
03567 //#endif //!!!  end of #if 0: OSrL parser development
03568 
03576         OSResult *osresult1 = new OSResult();
03577         OSResult *osresult2 = new OSResult();
03578         OSResult *osresult3 = NULL;
03579         try{ 
03580                 cout << endl << "TEST " << ++nOfTest << ": OSrL set() tools" << endl << endl;
03581 
03582                 ok = true;
03583                 ok &= (osresult1->IsEqual(osresult2));
03584                 if (!ok) 
03585                         throw ErrorClass("Empty osresult objects do not compare equal!");
03586 
03587 //      <general> element
03588                 ok &= osresult1->setGeneralStatusType("warning");
03589                 if (!ok) 
03590                         throw ErrorClass("Error during setGeneralStatusType!");
03591                 ok &= (!osresult1->IsEqual(osresult2));
03592                 if (!ok) 
03593                         throw ErrorClass("setGeneralStatusType: osresult objects falsely compare equal!");
03594                 ok &= osresult2->setGeneralStatusType("warning");
03595                 if (!ok) 
03596                         throw ErrorClass("Error during setGeneralStatusType!");
03597                 ok &= (osresult1->IsEqual(osresult2));
03598                 if (!ok) 
03599                         throw ErrorClass("setGeneralStatusType: osresult objects falsely compare unequal!");
03600 
03601                 ok &= osresult1->setGeneralStatusDescription("some nonempty string");
03602                 if (!ok) 
03603                         throw ErrorClass("Error during setGeneralStatusDescription!");
03604                 ok &= (!osresult1->IsEqual(osresult2));
03605                 if (!ok) 
03606                         throw ErrorClass("setGeneralStatusDescription: osresult objects falsely compare equal!");
03607                 ok &= osresult2->setGeneralStatusDescription("some nonempty string");
03608                 if (!ok) 
03609                         throw ErrorClass("Error during setGeneralStatusDescription!");
03610                 ok &= (osresult1->IsEqual(osresult2));
03611                 if (!ok) 
03612                         throw ErrorClass("setGeneralStatusDescription: osresult objects falsely compare unequal!");
03613 
03614                 ok &= osresult1->setNumberOfGeneralSubstatuses(3);
03615                 if (!ok) 
03616                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
03617                 ok &= (!osresult1->IsEqual(osresult2));
03618                 if (!ok) 
03619                         throw ErrorClass("setNumberOfGeneralSubstatuses: osresult objects falsely compare equal!");
03620                 ok &= osresult2->setNumberOfGeneralSubstatuses(3);
03621                 if (!ok) 
03622                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
03623                 ok &= (osresult1->IsEqual(osresult2));
03624                 if (!ok) 
03625                         throw ErrorClass("setNumberOfGeneralSubstatuses: osresult objects falsely compare unequal!");
03626 
03627                 for (int i=0; i < 3; ++i)
03628                 {
03629                         ok &= osresult1->setGeneralSubstatusName(i,"some name");
03630                         if (!ok) 
03631                                 throw ErrorClass("Error during setGeneralSubstatusName!");
03632                         ok &= (!osresult1->IsEqual(osresult2));
03633                         if (!ok) 
03634                                 throw ErrorClass("setGeneralSubstatusName: osresult objects falsely compare equal!");
03635                         ok &= osresult2->setGeneralSubstatusName(i,"some name");
03636                         if (!ok) 
03637                                 throw ErrorClass("Error during setGeneralSubstatusName!");
03638                         ok &= (osresult1->IsEqual(osresult2));
03639                         if (!ok) 
03640                                 throw ErrorClass("setGeneralSubstatusName: osresult objects falsely compare unequal!");
03641 
03642                         ok &= osresult1->setGeneralSubstatusDescription(i,"ABC 123");
03643                         if (!ok) 
03644                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
03645                         ok &= (!osresult1->IsEqual(osresult2));
03646                         if (!ok) 
03647                                 throw ErrorClass("setGeneralSubstatusDescription: osresult objects falsely compare equal!");
03648                         ok &= osresult2->setGeneralSubstatusDescription(i,"ABC 123");
03649                         if (!ok) 
03650                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
03651                         ok &= (osresult1->IsEqual(osresult2));
03652                         if (!ok) 
03653                                 throw ErrorClass("setGeneralSubstatusDescription: osresult objects falsely compare unequal!");
03654                 }
03655 
03656                 ok &= osresult1->setGeneralMessage("testing 123");
03657                 if (!ok) 
03658                         throw ErrorClass("Error during setGeneralMessage!");
03659                 ok &= (!osresult1->IsEqual(osresult2));
03660                 if (!ok) 
03661                         throw ErrorClass("setGeneralMessage: osresult objects falsely compare equal!");
03662                 ok &= osresult2->setGeneralMessage("testing 123");
03663                 if (!ok) 
03664                         throw ErrorClass("Error during setGeneralMessage!");
03665                 ok &= (osresult1->IsEqual(osresult2));
03666                 if (!ok) 
03667                         throw ErrorClass("setGeneralMessage: osresult objects falsely compare unequal!");
03668 
03669                 ok &= osresult1->setServiceName("testing 123");
03670                 if (!ok) 
03671                         throw ErrorClass("Error during setServiceName!");
03672                 ok &= (!osresult1->IsEqual(osresult2));
03673                 if (!ok) 
03674                         throw ErrorClass("setServiceName: osresult objects falsely compare equal!");
03675                 ok &= osresult2->setServiceName("testing 123");
03676                 if (!ok) 
03677                         throw ErrorClass("Error during setServiceName!");
03678                 ok &= (osresult1->IsEqual(osresult2));
03679                 if (!ok) 
03680                         throw ErrorClass("setServiceName: osresult objects falsely compare unequal!");
03681 
03682                 ok &= osresult1->setServiceURI("testing 123");
03683                 if (!ok) 
03684                         throw ErrorClass("Error during setServiceURI!");
03685                 ok &= (!osresult1->IsEqual(osresult2));
03686                 if (!ok) 
03687                         throw ErrorClass("setServiceURI: osresult objects falsely compare equal!");
03688                 ok &= osresult2->setServiceURI("testing 123");
03689                 if (!ok) 
03690                         throw ErrorClass("Error during setServiceURI!");
03691                 ok &= (osresult1->IsEqual(osresult2));
03692                 if (!ok) 
03693                         throw ErrorClass("setServiceURI: osresult objects falsely compare unequal!");
03694 
03695                 ok &= osresult1->setInstanceName("testing 123");
03696                 if (!ok) 
03697                         throw ErrorClass("Error during setInstanceName!");
03698                 ok &= (!osresult1->IsEqual(osresult2));
03699                 if (!ok) 
03700                         throw ErrorClass("setInstanceName: osresult objects falsely compare equal!");
03701                 ok &= osresult2->setInstanceName("testing 123");
03702                 if (!ok) 
03703                         throw ErrorClass("Error during setInstanceName!");
03704                 ok &= (osresult1->IsEqual(osresult2));
03705                 if (!ok) 
03706                         throw ErrorClass("setInstanceName: osresult objects falsely compare unequal!");
03707 
03708                 ok &= osresult1->setJobID("testing 123");
03709                 if (!ok) 
03710                         throw ErrorClass("Error during setJobID!");
03711                 ok &= (!osresult1->IsEqual(osresult2));
03712                 if (!ok) 
03713                         throw ErrorClass("setJobID: osresult objects falsely compare equal!");
03714                 ok &= osresult2->setJobID("testing 123");
03715                 if (!ok) 
03716                         throw ErrorClass("Error during setJobID!");
03717                 ok &= (osresult1->IsEqual(osresult2));
03718                 if (!ok) 
03719                         throw ErrorClass("setJobID: osresult objects falsely compare unequal!");
03720 
03721                 ok &= osresult1->setSolverInvoked("testing 123");
03722                 if (!ok) 
03723                         throw ErrorClass("Error during setSolverInvoked!");
03724                 ok &= (!osresult1->IsEqual(osresult2));
03725                 if (!ok) 
03726                         throw ErrorClass("setSolverInvoked: osresult objects falsely compare equal!");
03727                 ok &= osresult2->setSolverInvoked("testing 123");
03728                 if (!ok) 
03729                         throw ErrorClass("Error during setSolverInvoked!");
03730                 ok &= (osresult1->IsEqual(osresult2));
03731                 if (!ok) 
03732                         throw ErrorClass("setSolverInvoked: osresult objects falsely compare unequal!");
03733 
03734                 ok &= osresult1->setTimeStamp("2001-12-17T09:30:47.0Z");
03735                 if (!ok) 
03736                         throw ErrorClass("Error during setTimeStamp!");
03737                 ok &= (!osresult1->IsEqual(osresult2));
03738                 if (!ok) 
03739                         throw ErrorClass("setTimeStamp: osresult objects falsely compare equal!");
03740                 ok &= osresult2->setTimeStamp("2001-12-17T09:30:47.0Z");
03741                 if (!ok) 
03742                         throw ErrorClass("Error during setTimeStamp!");
03743                 ok &= (osresult1->IsEqual(osresult2));
03744                 if (!ok) 
03745                         throw ErrorClass("setTimeStamp: osresult objects falsely compare unequal!");
03746 
03747                 ok &= osresult1->setNumberOfOtherGeneralResults(3);
03748                 if (!ok) 
03749                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
03750                 ok &= (!osresult1->IsEqual(osresult2));
03751                 if (!ok) 
03752                         throw ErrorClass("setNumberOfOtherGeneralResults: osresult objects falsely compare equal!");
03753                 ok &= osresult2->setNumberOfOtherGeneralResults(3);
03754                 if (!ok) 
03755                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
03756                 ok &= (osresult1->IsEqual(osresult2));
03757                 if (!ok) 
03758                         throw ErrorClass("setNumberOfOtherGeneralResults: osresult objects falsely compare unequal!");
03759 
03760                 for (int i=0; i < 3; ++i)
03761                 {
03762                         ok &= osresult1->setOtherGeneralResultName(i,"some name");
03763                         if (!ok) 
03764                                 throw ErrorClass("Error during setOtherGeneralResultName!");
03765                         ok &= (!osresult1->IsEqual(osresult2));
03766                         if (!ok) 
03767                                 throw ErrorClass("setOtherGeneralResultName: osresult objects falsely compare equal!");
03768                         ok &= osresult2->setOtherGeneralResultName(i,"some name");
03769                         if (!ok) 
03770                                 throw ErrorClass("Error during setOtherGeneralResultName!");
03771                         ok &= (osresult1->IsEqual(osresult2));
03772                         if (!ok) 
03773                                 throw ErrorClass("setOtherGeneralResultName: osresult objects falsely compare unequal!");
03774 
03775                         ok &= osresult1->setOtherGeneralResultValue(i,"some value");
03776                         if (!ok) 
03777                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
03778                         ok &= (!osresult1->IsEqual(osresult2));
03779                         if (!ok) 
03780                                 throw ErrorClass("setOtherGeneralResultValue: osresult objects falsely compare equal!");
03781                         ok &= osresult2->setOtherGeneralResultValue(i,"some value");
03782                         if (!ok) 
03783                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
03784                         ok &= (osresult1->IsEqual(osresult2));
03785                         if (!ok) 
03786                                 throw ErrorClass("setOtherGeneralResultValue: osresult objects falsely compare unequal!");
03787 
03788                         ok &= osresult1->setOtherGeneralResultDescription(i,"ABC 123");
03789                         if (!ok) 
03790                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
03791                         ok &= (!osresult1->IsEqual(osresult2));
03792                         if (!ok) 
03793                                 throw ErrorClass("setOtherGeneralResultDescription: osresult objects falsely compare equal!");
03794                         ok &= osresult2->setOtherGeneralResultDescription(i,"ABC 123");
03795                         if (!ok) 
03796                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
03797                         ok &= (osresult1->IsEqual(osresult2));
03798                         if (!ok) 
03799                                 throw ErrorClass("setOtherGeneralResultDescription: osresult objects falsely compare unequal!");
03800                 }
03801 
03802 // <system> element
03803                 ok &= osresult1->setSystemInformation("testing 123");
03804                 if (!ok) 
03805                         throw ErrorClass("Error during setSystemInformation!");
03806                 ok &= (!osresult1->IsEqual(osresult2));
03807                 if (!ok) 
03808                         throw ErrorClass("setSystemInformation: osresult objects falsely compare equal!");
03809                 ok &= osresult2->setSystemInformation("testing 123");
03810                 if (!ok) 
03811                         throw ErrorClass("Error during setSystemInformation!");
03812                 ok &= (osresult1->IsEqual(osresult2));
03813                 if (!ok) 
03814                         throw ErrorClass("setSystemInformation: osresult objects falsely compare unequal!");
03815 
03816                 ok &= osresult1->setAvailableDiskSpaceUnit("megabyte");
03817                 if (!ok) 
03818                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
03819                 ok &= (!osresult1->IsEqual(osresult2));
03820                 if (!ok) 
03821                         throw ErrorClass("setAvailableDiskSpaceUnit: osresult objects falsely compare equal!");
03822                 ok &= osresult2->setAvailableDiskSpaceUnit("megabyte");
03823                 if (!ok) 
03824                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
03825                 ok &= (osresult1->IsEqual(osresult2));
03826                 if (!ok) 
03827                         throw ErrorClass("setAvailableDiskSpaceUnit: osresult objects falsely compare unequal!");
03828 
03829                 ok &= osresult1->setAvailableDiskSpaceDescription("testing 123");
03830                 if (!ok) 
03831                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
03832                 ok &= (!osresult1->IsEqual(osresult2));
03833                 if (!ok) 
03834                         throw ErrorClass("setAvailableDiskSpaceDescription: osresult objects falsely compare equal!");
03835                 ok &= osresult2->setAvailableDiskSpaceDescription("testing 123");
03836                 if (!ok) 
03837                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
03838                 ok &= (osresult1->IsEqual(osresult2));
03839                 if (!ok) 
03840                         throw ErrorClass("setAvailableDiskSpaceDescription: osresult objects falsely compare unequal!");
03841 
03842                 ok &= osresult1->setAvailableDiskSpaceValue(100.0);
03843                 if (!ok) 
03844                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
03845                 ok &= (!osresult1->IsEqual(osresult2));
03846                 if (!ok) 
03847                         throw ErrorClass("setAvailableDiskSpaceValue: osresult objects falsely compare equal!");
03848                 ok &= osresult2->setAvailableDiskSpaceValue(100.0);
03849                 if (!ok) 
03850                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
03851                 ok &= (osresult1->IsEqual(osresult2));
03852                 if (!ok) 
03853                         throw ErrorClass("setAvailableDiskSpaceValue: osresult objects falsely compare unequal!");
03854 
03855                 ok &= osresult1->setAvailableMemoryUnit("megabyte");
03856                 if (!ok) 
03857                         throw ErrorClass("Error during setAvailableMemoryUnit!");
03858                 ok &= (!osresult1->IsEqual(osresult2));
03859                 if (!ok) 
03860                         throw ErrorClass("setAvailableMemoryUnit: osresult objects falsely compare equal!");
03861                 ok &= osresult2->setAvailableMemoryUnit("megabyte");
03862                 if (!ok) 
03863                         throw ErrorClass("Error during setAvailableMemoryUnit!");
03864                 ok &= (osresult1->IsEqual(osresult2));
03865                 if (!ok) 
03866                         throw ErrorClass("setAvailableMemoryUnit: osresult objects falsely compare unequal!");
03867 
03868                 ok &= osresult1->setAvailableMemoryDescription("testing 123");
03869                 if (!ok) 
03870                         throw ErrorClass("Error during setAvailableMemoryDescription!");
03871                 ok &= (!osresult1->IsEqual(osresult2));
03872                 if (!ok) 
03873                         throw ErrorClass("setAvailableMemoryDescription: osresult objects falsely compare equal!");
03874                 ok &= osresult2->setAvailableMemoryDescription("testing 123");
03875                 if (!ok) 
03876                         throw ErrorClass("Error during setAvailableMemoryDescription!");
03877                 ok &= (osresult1->IsEqual(osresult2));
03878                 if (!ok) 
03879                         throw ErrorClass("setAvailableMemoryDescription: osresult objects falsely compare unequal!");
03880 
03881                 ok &= osresult1->setAvailableMemoryValue(100.0);
03882                 if (!ok) 
03883                         throw ErrorClass("Error during setAvailableMemoryValue!");
03884                 ok &= (!osresult1->IsEqual(osresult2));
03885                 if (!ok) 
03886                         throw ErrorClass("setAvailableMemoryValue: osresult objects falsely compare equal!");
03887                 ok &= osresult2->setAvailableMemoryValue(100.0);
03888                 if (!ok) 
03889                         throw ErrorClass("Error during setAvailableMemoryValue!");
03890                 ok &= (osresult1->IsEqual(osresult2));
03891                 if (!ok) 
03892                         throw ErrorClass("setAvailableMemoryValue: osresult objects falsely compare unequal!");
03893 
03894                 ok &= osresult1->setAvailableCPUSpeedUnit("megahertz");
03895                 if (!ok) 
03896                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
03897                 ok &= (!osresult1->IsEqual(osresult2));
03898                 if (!ok) 
03899                         throw ErrorClass("setAvailableCPUSpeedUnit: osresult objects falsely compare equal!");
03900                 ok &= osresult2->setAvailableCPUSpeedUnit("megahertz");
03901                 if (!ok) 
03902                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
03903                 ok &= (osresult1->IsEqual(osresult2));
03904                 if (!ok) 
03905                         throw ErrorClass("setAvailableCPUSpeedUnit: osresult objects falsely compare unequal!");
03906 
03907                 ok &= osresult1->setAvailableCPUSpeedDescription("testing 123");
03908                 if (!ok) 
03909                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
03910                 ok &= (!osresult1->IsEqual(osresult2));
03911                 if (!ok) 
03912                         throw ErrorClass("setAvailableCPUSpeedDescription: osresult objects falsely compare equal!");
03913                 ok &= osresult2->setAvailableCPUSpeedDescription("testing 123");
03914                 if (!ok) 
03915                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
03916                 ok &= (osresult1->IsEqual(osresult2));
03917                 if (!ok) 
03918                         throw ErrorClass("setAvailableCPUSpeedDescription: osresult objects falsely compare unequal!");
03919 
03920                 ok &= osresult1->setAvailableCPUSpeedValue(100.0);
03921                 if (!ok) 
03922                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
03923                 ok &= (!osresult1->IsEqual(osresult2));
03924                 if (!ok) 
03925                         throw ErrorClass("setAvailableCPUSpeedValue: osresult objects falsely compare equal!");
03926                 ok &= osresult2->setAvailableCPUSpeedValue(100.0);
03927                 if (!ok) 
03928                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
03929                 ok &= (osresult1->IsEqual(osresult2));
03930                 if (!ok) 
03931                         throw ErrorClass("setAvailableCPUSpeedValue: osresult objects falsely compare unequal!");
03932 
03933                 ok &= osresult1->setAvailableCPUNumberDescription("testing 123");
03934                 if (!ok) 
03935                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
03936                 ok &= (!osresult1->IsEqual(osresult2));
03937                 if (!ok) 
03938                         throw ErrorClass("setAvailableCPUNumberDescription: osresult objects falsely compare equal!");
03939                 ok &= osresult2->setAvailableCPUNumberDescription("testing 123");
03940                 if (!ok) 
03941                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
03942                 ok &= (osresult1->IsEqual(osresult2));
03943                 if (!ok) 
03944                         throw ErrorClass("setAvailableCPUNumberDescription: osresult objects falsely compare unequal!");
03945 
03946                 ok &= osresult1->setAvailableCPUNumberValue(100);
03947                 if (!ok) 
03948                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
03949                 ok &= (!osresult1->IsEqual(osresult2));
03950                 if (!ok) 
03951                         throw ErrorClass("setAvailableCPUNumberValue: osresult objects falsely compare equal!");
03952                 ok &= osresult2->setAvailableCPUNumberValue(100);
03953                 if (!ok) 
03954                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
03955                 ok &= (osresult1->IsEqual(osresult2));
03956                 if (!ok) 
03957                         throw ErrorClass("setAvailableCPUNumberValue: osresult objects falsely compare unequal!");
03958 
03959                 ok &= osresult1->setNumberOfOtherSystemResults(3);
03960                 if (!ok) 
03961                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
03962                 ok &= (!osresult1->IsEqual(osresult2));
03963                 if (!ok) 
03964                         throw ErrorClass("setNumberOfOtherSystemResults: osresult objects falsely compare equal!");
03965                 ok &= osresult2->setNumberOfOtherSystemResults(3);
03966                 if (!ok) 
03967                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
03968                 ok &= (osresult1->IsEqual(osresult2));
03969                 if (!ok) 
03970                         throw ErrorClass("setNumberOfOtherSystemResults: osresult objects falsely compare unequal!");
03971 
03972                 for (int i=0; i < 3; ++i)
03973                 {
03974                         ok &= osresult1->setOtherSystemResultName(i,"some name");
03975                         if (!ok) 
03976                                 throw ErrorClass("Error during setOtherSystemResultName!");
03977                         ok &= (!osresult1->IsEqual(osresult2));
03978                         if (!ok) 
03979                                 throw ErrorClass("setOtherSystemResultName: osresult objects falsely compare equal!");
03980                         ok &= osresult2->setOtherSystemResultName(i,"some name");
03981                         if (!ok) 
03982                                 throw ErrorClass("Error during setOtherSystemResultName!");
03983                         ok &= (osresult1->IsEqual(osresult2));
03984                         if (!ok) 
03985                                 throw ErrorClass("setOtherSystemResultName: osresult objects falsely compare unequal!");
03986 
03987                         ok &= osresult1->setOtherSystemResultValue(i,"some value");
03988                         if (!ok) 
03989                                 throw ErrorClass("Error during setOtherSystemResultValue!");
03990                         ok &= (!osresult1->IsEqual(osresult2));
03991                         if (!ok) 
03992                                 throw ErrorClass("setOtherSystemResultValue: osresult objects falsely compare equal!");
03993                         ok &= osresult2->setOtherSystemResultValue(i,"some value");
03994                         if (!ok) 
03995                                 throw ErrorClass("Error during setOtherSystemResultValue!");
03996                         ok &= (osresult1->IsEqual(osresult2));
03997                         if (!ok) 
03998                                 throw ErrorClass("setOtherSystemResultValue: osresult objects falsely compare unequal!");
03999 
04000                         ok &= osresult1->setOtherSystemResultDescription(i,"ABC 123");
04001                         if (!ok) 
04002                                 throw ErrorClass("Error during setSOtherSystemResultDescription!");
04003                         ok &= (!osresult1->IsEqual(osresult2));
04004                         if (!ok) 
04005                                 throw ErrorClass("setOtherSystemResultDescription: osresult objects falsely compare equal!");
04006                         ok &= osresult2->setOtherSystemResultDescription(i,"ABC 123");
04007                         if (!ok) 
04008                                 throw ErrorClass("Error during setOtherSystemResultDescription!");
04009                         ok &= (osresult1->IsEqual(osresult2));
04010                         if (!ok) 
04011                                 throw ErrorClass("setOtherSystemResultDescription: osresult objects falsely compare unequal!");
04012                 }
04013 
04014 //  <service> element
04015                 ok &= osresult1->setCurrentState("busy");
04016                 if (!ok) 
04017                         throw ErrorClass("Error during setCurrentState!");
04018                 ok &= (!osresult1->IsEqual(osresult2));
04019                 if (!ok) 
04020                         throw ErrorClass("setCurrentState: osresult objects falsely compare equal!");
04021                 ok &= osresult2->setCurrentState("busy");
04022                 if (!ok) 
04023                         throw ErrorClass("Error during setCurrentState!");
04024                 ok &= (osresult1->IsEqual(osresult2));
04025                 if (!ok) 
04026                         throw ErrorClass("setCurrentState: osresult objects falsely compare unequal!");
04027 
04028                 ok &= osresult1->setCurrentJobCount(123);
04029                 if (!ok) 
04030                         throw ErrorClass("Error during setCurrentJobCount!");
04031                 ok &= (!osresult1->IsEqual(osresult2));
04032                 if (!ok) 
04033                         throw ErrorClass("setCurrentJobCount: osresult objects falsely compare equal!");
04034                 ok &= osresult2->setCurrentJobCount(123);
04035                 if (!ok) 
04036                         throw ErrorClass("Error during setCurrentJobCount!");
04037                 ok &= (osresult1->IsEqual(osresult2));
04038                 if (!ok) 
04039                         throw ErrorClass("setCurrentJobCount: osresult objects falsely compare unequal!");
04040 
04041                 ok &= osresult1->setTotalJobsSoFar(123);
04042                 if (!ok) 
04043                         throw ErrorClass("Error during setTotalJobsSoFar!");
04044                 ok &= (!osresult1->IsEqual(osresult2));
04045                 if (!ok) 
04046                         throw ErrorClass("setTotalJobsSoFar: osresult objects falsely compare equal!");
04047                 ok &= osresult2->setTotalJobsSoFar(123);
04048                 if (!ok) 
04049                         throw ErrorClass("Error during setTotalJobsSoFar!");
04050                 ok &= (osresult1->IsEqual(osresult2));
04051                 if (!ok) 
04052                         throw ErrorClass("setTotalJobsSoFar: osresult objects falsely compare unequal!");
04053 
04054                 ok &= osresult1->setTimeServiceStarted("2001-12-17T09:30:47.0Z");
04055                 if (!ok) 
04056                         throw ErrorClass("Error during setTimeServiceStarted!");
04057                 ok &= (!osresult1->IsEqual(osresult2));
04058                 if (!ok) 
04059                         throw ErrorClass("setTimeServiceStarted: osresult objects falsely compare equal!");
04060                 ok &= osresult2->setTimeServiceStarted("2001-12-17T09:30:47.0Z");
04061                 if (!ok) 
04062                         throw ErrorClass("Error during setTimeServiceStarted!");
04063                 ok &= (osresult1->IsEqual(osresult2));
04064                 if (!ok) 
04065                         throw ErrorClass("setTimeServiceStarted: osresult objects falsely compare unequal!");
04066 
04067                 ok &= osresult1->setServiceUtilization(0.8);
04068                 if (!ok) 
04069                         throw ErrorClass("Error during setServiceUtilization!");
04070                 ok &= (!osresult1->IsEqual(osresult2));
04071                 if (!ok) 
04072                         throw ErrorClass("setServiceUtilization: osresult objects falsely compare equal!");
04073                 ok &= osresult2->setServiceUtilization(0.8);
04074                 if (!ok) 
04075                         throw ErrorClass("Error during setServiceUtilization!");
04076                 ok &= (osresult1->IsEqual(osresult2));
04077                 if (!ok) 
04078                         throw ErrorClass("setServiceUtilization: osresult objects falsely compare unequal!");
04079 
04080                 ok &= osresult1->setNumberOfOtherServiceResults(3);
04081                 if (!ok) 
04082                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
04083                 ok &= (!osresult1->IsEqual(osresult2));
04084                 if (!ok) 
04085                         throw ErrorClass("setNumberOfOtherServiceResults: osresult objects falsely compare equal!");
04086                 ok &= osresult2->setNumberOfOtherServiceResults(3);
04087                 if (!ok) 
04088                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
04089                 ok &= (osresult1->IsEqual(osresult2));
04090                 if (!ok) 
04091                         throw ErrorClass("setNumberOfOtherServiceResults: osresult objects falsely compare unequal!");
04092 
04093                 for (int i=0; i < 3; ++i)
04094                 {
04095                         ok &= osresult1->setOtherServiceResultName(i,"some name");
04096                         if (!ok) 
04097                                 throw ErrorClass("Error during setOtherServiceResultName!");
04098                         ok &= (!osresult1->IsEqual(osresult2));
04099                         if (!ok) 
04100                                 throw ErrorClass("setOtherServiceResultName: osresult objects falsely compare equal!");
04101                         ok &= osresult2->setOtherServiceResultName(i,"some name");
04102                         if (!ok) 
04103                                 throw ErrorClass("Error during setOtherServiceResultName!");
04104                         ok &= (osresult1->IsEqual(osresult2));
04105                         if (!ok) 
04106                                 throw ErrorClass("setOtherServiceResultName: osresult objects falsely compare unequal!");
04107 
04108                         ok &= osresult1->setOtherServiceResultValue(i,"some value");
04109                         if (!ok) 
04110                                 throw ErrorClass("Error during setOtherServiceResultValue!");
04111                         ok &= (!osresult1->IsEqual(osresult2));
04112                         if (!ok) 
04113                                 throw ErrorClass("setOtherServiceResultValue: osresult objects falsely compare equal!");
04114                         ok &= osresult2->setOtherServiceResultValue(i,"some value");
04115                         if (!ok) 
04116                                 throw ErrorClass("Error during setOtherServiceResultValue!");
04117                         ok &= (osresult1->IsEqual(osresult2));
04118                         if (!ok) 
04119                                 throw ErrorClass("setOtherServiceResultValue: osresult objects falsely compare unequal!");
04120 
04121                         ok &= osresult1->setOtherServiceResultDescription(i,"ABC 123");
04122                         if (!ok) 
04123                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
04124                         ok &= (!osresult1->IsEqual(osresult2));
04125                         if (!ok) 
04126                                 throw ErrorClass("setOtherServiceResultDescription: osresult objects falsely compare equal!");
04127                         ok &= osresult2->setOtherServiceResultDescription(i,"ABC 123");
04128                         if (!ok) 
04129                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
04130                         ok &= (osresult1->IsEqual(osresult2));
04131                         if (!ok) 
04132                                 throw ErrorClass("setOtherServiceResultDescription: osresult objects falsely compare unequal!");
04133                 }
04134 //======================
04135 //      <job> element
04136                 ok &= osresult1->setJobStatus("waiting");
04137                 if (!ok) 
04138                         throw ErrorClass("Error during setJobStatus!");
04139                 ok &= (!osresult1->IsEqual(osresult2));
04140                 if (!ok) 
04141                         throw ErrorClass("setJobStatus: osresult objects falsely compare equal!");
04142                 ok &= osresult2->setJobStatus("waiting");
04143                 if (!ok) 
04144                         throw ErrorClass("Error during setJobStatus!");
04145                 ok &= (osresult1->IsEqual(osresult2));
04146                 if (!ok) 
04147                         throw ErrorClass("setJobStatus: osresult objects falsely compare unequal!");
04148 
04149                 ok &= osresult1->setJobSubmitTime("2001-12-17T09:30:47.0Z");
04150                 if (!ok) 
04151                         throw ErrorClass("Error during setJobSubmitTime!");
04152                 ok &= (!osresult1->IsEqual(osresult2));
04153                 if (!ok) 
04154                         throw ErrorClass("setJobSubmitTime: osresult objects falsely compare equal!");
04155                 ok &= osresult2->setJobSubmitTime("2001-12-17T09:30:47.0Z");
04156                 if (!ok) 
04157                         throw ErrorClass("Error during setJobSubmitTime!");
04158                 ok &= (osresult1->IsEqual(osresult2));
04159                 if (!ok) 
04160                         throw ErrorClass("setJobSubmitTime: osresult objects falsely compare unequal!");
04161 
04162                 ok &= osresult1->setScheduledStartTime("2001-12-17T09:30:47.0Z");
04163                 if (!ok) 
04164                         throw ErrorClass("Error during setScheduledStartTime!");
04165                 ok &= (!osresult1->IsEqual(osresult2));
04166                 if (!ok) 
04167                         throw ErrorClass("setScheduledStartTime: osresult objects falsely compare equal!");
04168                 ok &= osresult2->setScheduledStartTime("2001-12-17T09:30:47.0Z");
04169                 if (!ok) 
04170                         throw ErrorClass("Error during setScheduledStartTime!");
04171                 ok &= (osresult1->IsEqual(osresult2));
04172                 if (!ok) 
04173                         throw ErrorClass("setScheduledStartTime: osresult objects falsely compare unequal!");
04174 
04175                 ok &= osresult1->setActualStartTime("2001-12-17T09:30:47.0Z");
04176                 if (!ok) 
04177                         throw ErrorClass("Error during setActualStartTime!");
04178                 ok &= (!osresult1->IsEqual(osresult2));
04179                 if (!ok) 
04180                         throw ErrorClass("setActualStartTime: osresult objects falsely compare equal!");
04181                 ok &= osresult2->setActualStartTime("2001-12-17T09:30:47.0Z");
04182                 if (!ok) 
04183                         throw ErrorClass("Error during setActualStartTime!");
04184                 ok &= (osresult1->IsEqual(osresult2));
04185                 if (!ok) 
04186                         throw ErrorClass("setActualStartTime: osresult objects falsely compare unequal!");
04187 
04188                 ok &= osresult1->setJobEndTime("2001-12-17T09:30:47.0Z");
04189                 if (!ok) 
04190                         throw ErrorClass("Error during setJobEndTime!");
04191                 ok &= (!osresult1->IsEqual(osresult2));
04192                 if (!ok) 
04193                         throw ErrorClass("setJobEndTime: osresult objects falsely compare equal!");
04194                 ok &= osresult2->setJobEndTime("2001-12-17T09:30:47.0Z");
04195                 if (!ok) 
04196                         throw ErrorClass("Error during setJobEndTime!");
04197                 ok &= (osresult1->IsEqual(osresult2));
04198                 if (!ok) 
04199                         throw ErrorClass("setJobEndTime: osresult objects falsely compare unequal!");
04200 
04201                 ok &= osresult1->setNumberOfTimes(3);
04202                 if (!ok) 
04203                         throw ErrorClass("Error during setNumberOfTimes!");
04204                 ok &= (!osresult1->IsEqual(osresult2));
04205                 if (!ok) 
04206                         throw ErrorClass("setNumberOfTimes: osresult objects falsely compare equal!");
04207                 ok &= osresult2->setNumberOfTimes(3);
04208                 if (!ok) 
04209                         throw ErrorClass("Error during setNumberOfTimes!");
04210                 ok &= (osresult1->IsEqual(osresult2));
04211                 if (!ok) 
04212                         throw ErrorClass("setNumberOfTimes: osresult objects falsely compare unequal!");
04213 
04214                 for (int i=0; i < 3; ++i)
04215                 {
04216                         ok &= osresult1->setTimingInformation(i,"cpuTime","other",/*"tick",*/"second","blabla",3.14);
04217                         if (!ok) 
04218                                 throw ErrorClass("Error during setTimingInformation!");
04219                         ok &= (!osresult1->IsEqual(osresult2));
04220                         if (!ok) 
04221                                 throw ErrorClass("setTimingInformation: osresult objects falsely compare equal!");
04222                         ok &= osresult2->setTimingInformation(i,"cpuTime","other",/*"tick",*/"second","blabla",3.14);
04223                         if (!ok) 
04224                                 throw ErrorClass("Error during setTimingInformation!");
04225                         ok &= (osresult1->IsEqual(osresult2));
04226                         if (!ok) 
04227                                 throw ErrorClass("setTimingInformation: osresult objects falsely compare unequal!");
04228 
04229                 }
04230 
04231                 ok &= osresult1->setUsedDiskSpaceUnit("megabyte");
04232                 if (!ok) 
04233                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
04234                 ok &= (!osresult1->IsEqual(osresult2));
04235                 if (!ok) 
04236                         throw ErrorClass("setUsedDiskSpaceUnit: osresult objects falsely compare equal!");
04237                 ok &= osresult2->setUsedDiskSpaceUnit("megabyte");
04238                 if (!ok) 
04239                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
04240                 ok &= (osresult1->IsEqual(osresult2));
04241                 if (!ok) 
04242                         throw ErrorClass("setUsedDiskSpaceUnit: osresult objects falsely compare unequal!");
04243 
04244                 ok &= osresult1->setUsedDiskSpaceDescription("testing 123");
04245                 if (!ok) 
04246                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
04247                 ok &= (!osresult1->IsEqual(osresult2));
04248                 if (!ok) 
04249                         throw ErrorClass("setUsedDiskSpaceDescription: osresult objects falsely compare equal!");
04250                 ok &= osresult2->setUsedDiskSpaceDescription("testing 123");
04251                 if (!ok) 
04252                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
04253                 ok &= (osresult1->IsEqual(osresult2));
04254                 if (!ok) 
04255                         throw ErrorClass("setUsedDiskSpaceDescription: osresult objects falsely compare unequal!");
04256 
04257                 ok &= osresult1->setUsedDiskSpaceValue(100.0);
04258                 if (!ok) 
04259                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
04260                 ok &= (!osresult1->IsEqual(osresult2));
04261                 if (!ok) 
04262                         throw ErrorClass("setUsedDiskSpaceValue: osresult objects falsely compare equal!");
04263                 ok &= osresult2->setUsedDiskSpaceValue(100.0);
04264                 if (!ok) 
04265                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
04266                 ok &= (osresult1->IsEqual(osresult2));
04267                 if (!ok) 
04268                         throw ErrorClass("setUsedDiskSpaceValue: osresult objects falsely compare unequal!");
04269 
04270                 ok &= osresult1->setUsedMemoryUnit("megabyte");
04271                 if (!ok) 
04272                         throw ErrorClass("Error during setUsedMemoryUnit!");
04273                 ok &= (!osresult1->IsEqual(osresult2));
04274                 if (!ok) 
04275                         throw ErrorClass("setUsedMemoryUnit: osresult objects falsely compare equal!");
04276                 ok &= osresult2->setUsedMemoryUnit("megabyte");
04277                 if (!ok) 
04278                         throw ErrorClass("Error during setUsedMemoryUnit!");
04279                 ok &= (osresult1->IsEqual(osresult2));
04280                 if (!ok) 
04281                         throw ErrorClass("setUsedMemoryUnit: osresult objects falsely compare unequal!");
04282 
04283                 ok &= osresult1->setUsedMemoryDescription("testing 123");
04284                 if (!ok) 
04285                         throw ErrorClass("Error during setUsedMemoryDescription!");
04286                 ok &= (!osresult1->IsEqual(osresult2));
04287                 if (!ok) 
04288                         throw ErrorClass("setUsedMemoryDescription: osresult objects falsely compare equal!");
04289                 ok &= osresult2->setUsedMemoryDescription("testing 123");
04290                 if (!ok) 
04291                         throw ErrorClass("Error during setUsedMemoryDescription!");
04292                 ok &= (osresult1->IsEqual(osresult2));
04293                 if (!ok) 
04294                         throw ErrorClass("setUsedMemoryDescription: osresult objects falsely compare unequal!");
04295 
04296                 ok &= osresult1->setUsedMemoryValue(100.0);
04297                 if (!ok) 
04298                         throw ErrorClass("Error during setUsedMemoryValue!");
04299                 ok &= (!osresult1->IsEqual(osresult2));
04300                 if (!ok) 
04301                         throw ErrorClass("setUsedMemoryValue: osresult objects falsely compare equal!");
04302                 ok &= osresult2->setUsedMemoryValue(100.0);
04303                 if (!ok) 
04304                         throw ErrorClass("Error during setUsedMemoryValue!");
04305                 ok &= (osresult1->IsEqual(osresult2));
04306                 if (!ok) 
04307                         throw ErrorClass("setUsedMemoryValue: osresult objects falsely compare unequal!");
04308 
04309                 ok &= osresult1->setUsedCPUSpeedUnit("megahertz");
04310                 if (!ok) 
04311                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
04312                 ok &= (!osresult1->IsEqual(osresult2));
04313                 if (!ok) 
04314                         throw ErrorClass("setUsedCPUSpeedUnit: osresult objects falsely compare equal!");
04315                 ok &= osresult2->setUsedCPUSpeedUnit("megahertz");
04316                 if (!ok) 
04317                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
04318                 ok &= (osresult1->IsEqual(osresult2));
04319                 if (!ok) 
04320                         throw ErrorClass("setUsedCPUSpeedUnit: osresult objects falsely compare unequal!");
04321 
04322                 ok &= osresult1->setUsedCPUSpeedDescription("testing 123");
04323                 if (!ok) 
04324                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
04325                 ok &= (!osresult1->IsEqual(osresult2));
04326                 if (!ok) 
04327                         throw ErrorClass("setUsedCPUSpeedDescription: osresult objects falsely compare equal!");
04328                 ok &= osresult2->setUsedCPUSpeedDescription("testing 123");
04329                 if (!ok) 
04330                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
04331                 ok &= (osresult1->IsEqual(osresult2));
04332                 if (!ok) 
04333                         throw ErrorClass("setUsedCPUSpeedDescription: osresult objects falsely compare unequal!");
04334 
04335                 ok &= osresult1->setUsedCPUSpeedValue(100.0);
04336                 if (!ok) 
04337                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
04338                 ok &= (!osresult1->IsEqual(osresult2));
04339                 if (!ok) 
04340                         throw ErrorClass("setUsedCPUSpeedValue: osresult objects falsely compare equal!");
04341                 ok &= osresult2->setUsedCPUSpeedValue(100.0);
04342                 if (!ok) 
04343                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
04344                 ok &= (osresult1->IsEqual(osresult2));
04345                 if (!ok) 
04346                         throw ErrorClass("setUsedCPUSpeedValue: osresult objects falsely compare unequal!");
04347 
04348                 ok &= osresult1->setUsedCPUNumberDescription("testing 123");
04349                 if (!ok) 
04350                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
04351                 ok &= (!osresult1->IsEqual(osresult2));
04352                 if (!ok) 
04353                         throw ErrorClass("setUsedCPUNumberDescription: osresult objects falsely compare equal!");
04354                 ok &= osresult2->setUsedCPUNumberDescription("testing 123");
04355                 if (!ok) 
04356                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
04357                 ok &= (osresult1->IsEqual(osresult2));
04358                 if (!ok) 
04359                         throw ErrorClass("setUsedCPUNumberDescription: osresult objects falsely compare unequal!");
04360 
04361                 ok &= osresult1->setUsedCPUNumberValue(100);
04362                 if (!ok) 
04363                         throw ErrorClass("Error during setUsedCPUNumberValue!");
04364                 ok &= (!osresult1->IsEqual(osresult2));
04365                 if (!ok) 
04366                         throw ErrorClass("setUsedCPUNumberValue: osresult objects falsely compare equal!");
04367                 ok &= osresult2->setUsedCPUNumberValue(100);
04368                 if (!ok) 
04369                         throw ErrorClass("Error during setUsedCPUNumberValue!");
04370                 ok &= (osresult1->IsEqual(osresult2));
04371                 if (!ok) 
04372                         throw ErrorClass("setUsedCPUNumberValue: osresult objects falsely compare unequal!");
04373 
04374                 ok &= osresult1->setNumberOfOtherJobResults(3);
04375                 if (!ok) 
04376                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
04377                 ok &= (!osresult1->IsEqual(osresult2));
04378                 if (!ok) 
04379                         throw ErrorClass("setNumberOfOtherJobResults: osresult objects falsely compare equal!");
04380                 ok &= osresult2->setNumberOfOtherJobResults(3);
04381                 if (!ok) 
04382                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
04383                 ok &= (osresult1->IsEqual(osresult2));
04384                 if (!ok) 
04385                         throw ErrorClass("setNumberOfOtherJobResults: osresult objects falsely compare unequal!");
04386 
04387                 for (int i=0; i < 3; ++i)
04388                 {
04389                         ok &= osresult1->setOtherJobResultName(i,"some name");
04390                         if (!ok) 
04391                                 throw ErrorClass("Error during setOtherJobResultName!");
04392                         ok &= (!osresult1->IsEqual(osresult2));
04393                         if (!ok) 
04394                                 throw ErrorClass("setOtherJobResultName: osresult objects falsely compare equal!");
04395                         ok &= osresult2->setOtherJobResultName(i,"some name");
04396                         if (!ok) 
04397                                 throw ErrorClass("Error during setOtherJobResultName!");
04398                         ok &= (osresult1->IsEqual(osresult2));
04399                         if (!ok) 
04400                                 throw ErrorClass("setOtherJobResultName: osresult objects falsely compare unequal!");
04401 
04402                         ok &= osresult1->setOtherJobResultValue(i,"some value");
04403                         if (!ok) 
04404                                 throw ErrorClass("Error during setOtherJobResultValue!");
04405                         ok &= (!osresult1->IsEqual(osresult2));
04406                         if (!ok) 
04407                                 throw ErrorClass("setOtherJobResultValue: osresult objects falsely compare equal!");
04408                         ok &= osresult2->setOtherJobResultValue(i,"some value");
04409                         if (!ok) 
04410                                 throw ErrorClass("Error during setOtherJobResultValue!");
04411                         ok &= (osresult1->IsEqual(osresult2));
04412                         if (!ok) 
04413                                 throw ErrorClass("setOtherJobResultValue: osresult objects falsely compare unequal!");
04414 
04415                         ok &= osresult1->setOtherJobResultDescription(i,"ABC 123");
04416                         if (!ok) 
04417                                 throw ErrorClass("Error during setOtherJobResultDescription!");
04418                         ok &= (!osresult1->IsEqual(osresult2));
04419                         if (!ok) 
04420                                 throw ErrorClass("setOtherJobResultDescription: osresult objects falsely compare equal!");
04421                         ok &= osresult2->setOtherJobResultDescription(i,"ABC 123");
04422                         if (!ok) 
04423                                 throw ErrorClass("Error during setOtherJobResultDescription!");
04424                         ok &= (osresult1->IsEqual(osresult2));
04425                         if (!ok) 
04426                                 throw ErrorClass("setOtherJobResultDescription: osresult objects falsely compare unequal!");
04427                 }
04428 
04429                 ok &= osresult1->setSolutionNumber(2);
04430                 if (!ok) 
04431                         throw ErrorClass("Error during setSolutionNumber!");
04432                 ok &= (!osresult1->IsEqual(osresult2));
04433                 if (!ok) 
04434                         throw ErrorClass("setSolutionNumber: osresult objects falsely compare equal!");
04435                 ok &= osresult2->setSolutionNumber(2);
04436                 if (!ok) 
04437                         throw ErrorClass("Error during setSolutionNumber!");
04438                 ok &= (osresult1->IsEqual(osresult2));
04439                 if (!ok) 
04440                         throw ErrorClass("setSolutionNumber: osresult objects falsely compare unequal!");
04441 
04442                 ok &= osresult1->setVariableNumber(4);
04443                 if (!ok) 
04444                         throw ErrorClass("Error during setVariableNumber!");
04445                 ok &= (!osresult1->IsEqual(osresult2));
04446                 if (!ok) 
04447                         throw ErrorClass("setVariableNumber: osresult objects falsely compare equal!");
04448                 ok &= osresult2->setVariableNumber(4);
04449                 if (!ok) 
04450                         throw ErrorClass("Error during setVariableNumber!");
04451                 ok &= (osresult1->IsEqual(osresult2));
04452                 if (!ok) 
04453                         throw ErrorClass("setVariableNumber: osresult objects falsely compare unequal!");
04454 
04455                 ok &= osresult1->setObjectiveNumber(2);
04456                 if (!ok) 
04457                         throw ErrorClass("Error during setObjectiveNumber!");
04458                 ok &= (!osresult1->IsEqual(osresult2));
04459                 if (!ok) 
04460                         throw ErrorClass("setObjectiveNumber: osresult objects falsely compare equal!");
04461                 ok &= osresult2->setObjectiveNumber(2);
04462                 if (!ok) 
04463                         throw ErrorClass("Error during setObjectiveNumber!");
04464                 ok &= (osresult1->IsEqual(osresult2));
04465                 if (!ok) 
04466                         throw ErrorClass("setObjectiveNumber: osresult objects falsely compare unequal!");
04467 
04468                 ok &= osresult1->setConstraintNumber(3);
04469                 if (!ok) 
04470                         throw ErrorClass("Error during setConstraintNumber!");
04471                 ok &= (!osresult1->IsEqual(osresult2));
04472                 if (!ok) 
04473                         throw ErrorClass("setConstraintNumber: osresult objects falsely compare equal!");
04474                 ok &= osresult2->setConstraintNumber(3);
04475                 if (!ok) 
04476                         throw ErrorClass("Error during setConstraintNumber!");
04477                 ok &= (osresult1->IsEqual(osresult2));
04478                 if (!ok) 
04479                         throw ErrorClass("setConstraintNumber: osresult objects falsely compare unequal!");
04480 
04481                 for (int i=0; i < 2; ++i)
04482                 {
04483                         ok &= osresult1->setSolutionTargetObjectiveIdx(i,-2);
04484                         if (!ok) 
04485                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
04486                         ok &= (!osresult1->IsEqual(osresult2));
04487                         if (!ok) 
04488                                 throw ErrorClass("setSolutionTargetObjectiveIdx: osresult objects falsely compare equal!");
04489                         ok &= osresult2->setSolutionTargetObjectiveIdx(i,-2);
04490                         if (!ok) 
04491                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
04492                         ok &= (osresult1->IsEqual(osresult2));
04493                         if (!ok) 
04494                                 throw ErrorClass("setSolutionTargetObjectiveIdx: osresult objects falsely compare unequal!");
04495 
04496                         ok &= osresult1->setSolutionWeightedObjectives(i,"true");
04497                         if (!ok) 
04498                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
04499                         ok &= (!osresult1->IsEqual(osresult2));
04500                         if (!ok) 
04501                                 throw ErrorClass("setSolutionWeightedObjectives: osresult objects falsely compare equal!");
04502                         ok &= osresult2->setSolutionWeightedObjectives(i,"true");
04503                         if (!ok) 
04504                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
04505                         ok &= (osresult1->IsEqual(osresult2));
04506                         if (!ok) 
04507                                 throw ErrorClass("setSolutionWeightedObjectives: osresult objects falsely compare unequal!");
04508 
04509                         ok &= osresult1->setSolutionStatusType(i,"locallyOptimal");
04510                         if (!ok) 
04511                                 throw ErrorClass("Error during setSolutionStatusType!");
04512                         ok &= (!osresult1->IsEqual(osresult2));
04513                         if (!ok) 
04514                                 throw ErrorClass("setSolutionStatusType: osresult objects falsely compare equal!");
04515                         ok &= osresult2->setSolutionStatusType(i,"locallyOptimal");
04516                         if (!ok) 
04517                                 throw ErrorClass("Error during setSolutionStatusType!");
04518                         ok &= (osresult1->IsEqual(osresult2));
04519                         if (!ok) 
04520                                 throw ErrorClass("setSolutionStatusType: osresult objects falsely compare unequal!");
04521 
04522                         ok &= osresult1->setSolutionStatusDescription(i,"ABC 123");
04523                         if (!ok) 
04524                                 throw ErrorClass("Error during setSolutionStatusDescription!");
04525                         ok &= (!osresult1->IsEqual(osresult2));
04526                         if (!ok) 
04527                                 throw ErrorClass("setSolutionStatusDescription: osresult objects falsely compare equal!");
04528                         ok &= osresult2->setSolutionStatusDescription(i,"ABC 123");
04529                         if (!ok) 
04530                                 throw ErrorClass("Error during setSolutionStatusDescription!");
04531                         ok &= (osresult1->IsEqual(osresult2));
04532                         if (!ok) 
04533                                 throw ErrorClass("setSolutionStatusDescription: osresult objects falsely compare unequal!");
04534 
04535                         ok &= osresult1->setNumberOfSolutionSubstatuses(i,3);
04536                         if (!ok) 
04537                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
04538                         ok &= (!osresult1->IsEqual(osresult2));
04539                         if (!ok) 
04540                                 throw ErrorClass("setNumberOfSolutionSubstatuses: osresult objects falsely compare equal!");
04541                         ok &= osresult2->setNumberOfSolutionSubstatuses(i,3);
04542                         if (!ok) 
04543                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
04544                         ok &= (osresult1->IsEqual(osresult2));
04545                         if (!ok) 
04546                                 throw ErrorClass("setNumberOfSolutionSubstatuses: osresult objects falsely compare unequal!");
04547 
04548                         for (int j=0; j < 3; ++j)
04549                         {
04550                                 ok &= osresult1->setSolutionSubstatusType(i,j,"other");
04551                                 if (!ok) 
04552                                         throw ErrorClass("Error during setSolutionSubstatusType!");
04553                                 ok &= (!osresult1->IsEqual(osresult2));
04554                                 if (!ok) 
04555                                         throw ErrorClass("setSolutionSubstatusType: osresult objects falsely compare equal!");
04556                                 ok &= osresult2->setSolutionSubstatusType(i,j,"other");
04557                                 if (!ok) 
04558                                         throw ErrorClass("Error during setSolutionSubstatusType!");
04559                                 ok &= (osresult1->IsEqual(osresult2));
04560                                 if (!ok) 
04561                                         throw ErrorClass("setSolutionSubstatusType: osresult objects falsely compare unequal!");
04562 
04563                                 ok &= osresult1->setSolutionSubstatusDescription(i,j,"whatever");
04564                                 if (!ok) 
04565                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
04566                                 ok &= (!osresult1->IsEqual(osresult2));
04567                                 if (!ok) 
04568                                         throw ErrorClass("setSolutionSubstatusDescription: osresult objects falsely compare equal!");
04569                                 ok &= osresult2->setSolutionSubstatusDescription(i,j,"whatever");
04570                                 if (!ok) 
04571                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
04572                                 ok &= (osresult1->IsEqual(osresult2));
04573                                 if (!ok) 
04574                                         throw ErrorClass("setSolutionSubstatusDescription: osresult objects falsely compare unequal!");
04575                         }
04576 
04577                         ok &= osresult1->setSolutionMessage(i,"ABC 123");
04578                         if (!ok) 
04579                                 throw ErrorClass("Error during setSolutionMessage!");
04580                         ok &= (!osresult1->IsEqual(osresult2));
04581                         if (!ok) 
04582                                 throw ErrorClass("setSolutionMessage: osresult objects falsely compare equal!");
04583                         ok &= osresult2->setSolutionMessage(i,"ABC 123");
04584                         if (!ok) 
04585                                 throw ErrorClass("Error during setSolutionMessage!");
04586                         ok &= (osresult1->IsEqual(osresult2));
04587                         if (!ok) 
04588                                 throw ErrorClass("setSolutionMessage: osresult objects falsely compare unequal!");
04589 
04590                         ok &= osresult1->setNumberOfVarValues(i,3);
04591                         if (!ok) 
04592                                 throw ErrorClass("Error during setNumberOfVarValues!");
04593                         ok &= (!osresult1->IsEqual(osresult2));
04594                         if (!ok) 
04595                                 throw ErrorClass("setNumberOfVarValues: osresult objects falsely compare equal!");
04596                         ok &= osresult2->setNumberOfVarValues(i,3);
04597                         if (!ok) 
04598                                 throw ErrorClass("Error during setNumberOfVarValues!");
04599                         ok &= (osresult1->IsEqual(osresult2));
04600                         if (!ok) 
04601                                 throw ErrorClass("setNumberOfVarValues: osresult objects falsely compare unequal!");
04602 
04603                         for (int j=0; j < 3; ++j)
04604                         {
04605                                 ok &= osresult1->setVarValue(i,j,j,3.14);
04606                                 if (!ok) 
04607                                         throw ErrorClass("Error during setVarValue!");
04608                                 ok &= (!osresult1->IsEqual(osresult2));
04609                                 if (!ok) 
04610                                         throw ErrorClass("setVarValue: osresult objects falsely compare equal!");
04611                                 ok &= osresult2->setVarValue(i,j,j,3.14);
04612                                 if (!ok) 
04613                                         throw ErrorClass("Error during setVarValue!");
04614                                 ok &= (osresult1->IsEqual(osresult2));
04615                                 if (!ok) 
04616                                         throw ErrorClass("setVarValue: osresult objects falsely compare unequal!");
04617                         }
04618 
04619                         ok &= osresult1->setNumberOfVarValuesString(i,3);
04620                         if (!ok) 
04621                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
04622                         ok &= (!osresult1->IsEqual(osresult2));
04623                         if (!ok) 
04624                                 throw ErrorClass("setNumberOfVarValuesString: osresult objects falsely compare equal!");
04625                         ok &= osresult2->setNumberOfVarValuesString(i,3);
04626                         if (!ok) 
04627                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
04628                         ok &= (osresult1->IsEqual(osresult2));
04629                         if (!ok) 
04630                                 throw ErrorClass("setNumberOfVarValuesString: osresult objects falsely compare unequal!");
04631 
04632                         for (int j=0; j < 3; ++j)
04633                         {
04634                                 ok &= osresult1->setVarValueString(i,j,j,"one");
04635                                 if (!ok) 
04636                                         throw ErrorClass("Error during setVarValueString!");
04637                                 ok &= (!osresult1->IsEqual(osresult2));
04638                                 if (!ok) 
04639                                         throw ErrorClass("setVarValueString: osresult objects falsely compare equal!");
04640                                 ok &= osresult2->setVarValueString(i,j,j,"one");
04641                                 if (!ok) 
04642                                         throw ErrorClass("Error during setVarValueString!");
04643                                 ok &= (osresult1->IsEqual(osresult2));
04644                                 if (!ok) 
04645                                         throw ErrorClass("setVarValueString: osresult objects falsely compare unequal!");
04646                         }
04647 
04648 /*
04649                         ok &= osresult1->setNumberOfBasisVar(i,3);
04650                         if (!ok) 
04651                                 throw ErrorClass("Error during setNumberOfBasisVar!");
04652                         ok &= (!osresult1->IsEqual(osresult2));
04653                         if (!ok) 
04654                                 throw ErrorClass("setNumberOfBasisVar: osresult objects falsely compare equal!");
04655                         ok &= osresult2->setNumberOfBasisVar(i,3);
04656                         if (!ok) 
04657                                 throw ErrorClass("Error during setNumberOfBasisVar!");
04658                         ok &= (osresult1->IsEqual(osresult2));
04659                         if (!ok) 
04660                                 throw ErrorClass("setNumberOfBasisVar: osresult objects falsely compare unequal!");
04661 
04662                         for (int j=0; j < 3; ++j)
04663                         {
04664                                 ok &= osresult1->setBasisVar(i,j,j,"superBasic");
04665                                 if (!ok) 
04666                                         throw ErrorClass("Error during setBasisVar!");
04667                                 ok &= (!osresult1->IsEqual(osresult2));
04668                                 if (!ok) 
04669                                         throw ErrorClass("setBasisVar: osresult objects falsely compare equal!");
04670                                 ok &= osresult2->setBasisVar(i,j,j,"superBasic");
04671                                 if (!ok) 
04672                                         throw ErrorClass("Error during setBasisVar!");
04673                                 ok &= (osresult1->IsEqual(osresult2));
04674                                 if (!ok) 
04675                                         throw ErrorClass("setBasisVar: osresult objects falsely compare unequal!");
04676                         }
04677 */
04678 
04679                         ok &= osresult1->setNumberOfOtherVariableResults(i,3);
04680                         if (!ok) 
04681                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
04682                         ok &= (!osresult1->IsEqual(osresult2));
04683                         if (!ok) 
04684                                 throw ErrorClass("setNumberOfOtherVariableResults: osresult objects falsely compare equal!");
04685                         ok &= osresult2->setNumberOfOtherVariableResults(i,3);
04686                         if (!ok) 
04687                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
04688                         ok &= (osresult1->IsEqual(osresult2));
04689                         if (!ok) 
04690                                 throw ErrorClass("setNumberOfOtherVariableResults: osresult objects falsely compare unequal!");
04691 
04692                         for (int j=0; j < 3; ++j)
04693                         {
04694                                 ok &= osresult1->setOtherVariableResultName(i,j,"other");
04695                                 if (!ok) 
04696                                         throw ErrorClass("Error during setOtherVariableResultName!");
04697                                 ok &= (!osresult1->IsEqual(osresult2));
04698                                 if (!ok) 
04699                                         throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare equal!");
04700                                 ok &= osresult2->setOtherVariableResultName(i,j,"other");
04701                                 if (!ok) 
04702                                         throw ErrorClass("Error during setOtherVariableResultName!");
04703                                 ok &= (osresult1->IsEqual(osresult2));
04704                                 if (!ok) 
04705                                         throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare unequal!");
04706 
04707                                 ok &= osresult1->setOtherVariableResultDescription(i,j,"other");
04708                                 if (!ok) 
04709                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
04710                                 ok &= (!osresult1->IsEqual(osresult2));
04711                                 if (!ok) 
04712                                         throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare equal!");
04713                                 ok &= osresult2->setOtherVariableResultDescription(i,j,"other");
04714                                 if (!ok) 
04715                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
04716                                 ok &= (osresult1->IsEqual(osresult2));
04717                                 if (!ok) 
04718                                         throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare unequal!");
04719 
04720                                 ok &= osresult1->setOtherVariableResultValue(i,j,"other");
04721                                 if (!ok) 
04722                                         throw ErrorClass("Error during setOtherVariableResultValue!");
04723                                 ok &= (!osresult1->IsEqual(osresult2));
04724                                 if (!ok) 
04725                                         throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare equal!");
04726                                 ok &= osresult2->setOtherVariableResultValue(i,j,"other");
04727                                 if (!ok) 
04728                                         throw ErrorClass("Error during setOtherVariableResultValue!");
04729                                 ok &= (osresult1->IsEqual(osresult2));
04730                                 if (!ok) 
04731                                         throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare unequal!");
04732 
04733                                 ok &= osresult1->setOtherVariableResultNumberOfVar(i,j,3);
04734                                 if (!ok) 
04735                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
04736                                 ok &= (!osresult1->IsEqual(osresult2));
04737                                 if (!ok) 
04738                                         throw ErrorClass("setOtherVariableResultNumberOfVar: osresult objects falsely compare equal!");
04739                                 ok &= osresult2->setOtherVariableResultNumberOfVar(i,j,3);
04740                                 if (!ok) 
04741                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
04742                                 ok &= (osresult1->IsEqual(osresult2));
04743                                 if (!ok) 
04744                                         throw ErrorClass("setOtherVariableResultNumberOfVar: osresult objects falsely compare unequal!");
04745 
04746                                 for (int k=0; k < 3; ++k)
04747                                 {
04748                                         ok &= osresult1->setOtherVariableResultVarIdx(i,j,k,k);
04749                                         if (!ok) 
04750                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
04751                                         ok &= (!osresult1->IsEqual(osresult2));
04752                                         if (!ok) 
04753                                                 throw ErrorClass("setOtherVariableResultVarIdx: osresult objects falsely compare equal!");
04754                                         ok &= osresult2->setOtherVariableResultVarIdx(i,j,k,k);
04755                                         if (!ok) 
04756                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
04757                                         ok &= (osresult1->IsEqual(osresult2));
04758                                         if (!ok) 
04759                                                 throw ErrorClass("setOtherVariableResultVarIdx: osresult objects falsely compare unequal!");
04760 
04761                                         ok &= osresult1->setOtherVariableResultVar(i,j,k,"value");
04762                                         if (!ok) 
04763                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
04764                                         ok &= (!osresult1->IsEqual(osresult2));
04765                                         if (!ok) 
04766                                                 throw ErrorClass("setOtherVariableResultVar: osresult objects falsely compare equal!");
04767                                         ok &= osresult2->setOtherVariableResultVar(i,j,k,"value");
04768                                         if (!ok) 
04769                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
04770                                         ok &= (osresult1->IsEqual(osresult2));
04771                                         if (!ok) 
04772                                                 throw ErrorClass("setOtherVariableResultVar: osresult objects falsely compare unequal!");
04773                                 }
04774                         }
04775 
04776                         ok &= osresult1->setNumberOfObjValues(i,2);
04777                         if (!ok) 
04778                                 throw ErrorClass("Error during setNumberOfObjValues!");
04779                         ok &= (!osresult1->IsEqual(osresult2));
04780                         if (!ok) 
04781                                 throw ErrorClass("setNumberOfObjValues: osresult objects falsely compare equal!");
04782                         ok &= osresult2->setNumberOfObjValues(i,2);
04783                         if (!ok) 
04784                                 throw ErrorClass("Error during setNumberOfObjValues!");
04785                         ok &= (osresult1->IsEqual(osresult2));
04786                         if (!ok) 
04787                                 throw ErrorClass("setNumberOfObjValues: osresult objects falsely compare unequal!");
04788 
04789                         for (int j=0; j < 2; ++j)
04790                         {
04791                                 ok &= osresult1->setObjValue(i,j,-2,3.14);
04792                                 if (!ok) 
04793                                         throw ErrorClass("Error during setObjValue!");
04794                                 ok &= (!osresult1->IsEqual(osresult2));
04795                                 if (!ok) 
04796                                         throw ErrorClass("setObjValue: osresult objects falsely compare equal!");
04797                                 ok &= osresult2->setObjValue(i,j,-2,3.14);
04798                                 if (!ok) 
04799                                         throw ErrorClass("Error during setObjValue!");
04800                                 ok &= (osresult1->IsEqual(osresult2));
04801                                 if (!ok) 
04802                                         throw ErrorClass("setObjValue: osresult objects falsely compare unequal!");
04803                         }
04804 
04805                         ok &= osresult1->setNumberOfOtherObjectiveResults(i,3);
04806                         if (!ok) 
04807                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
04808                         ok &= (!osresult1->IsEqual(osresult2));
04809                         if (!ok) 
04810                                 throw ErrorClass("setNumberOfOtherObjectiveResults: osresult objects falsely compare equal!");
04811                         ok &= osresult2->setNumberOfOtherObjectiveResults(i,3);
04812                         if (!ok) 
04813                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
04814                         ok &= (osresult1->IsEqual(osresult2));
04815                         if (!ok) 
04816                                 throw ErrorClass("setNumberOfOtherObjectiveResults: osresult objects falsely compare unequal!");
04817 
04818                         for (int j=0; j < 3; ++j)
04819                         {
04820                                 ok &= osresult1->setOtherObjectiveResultName(i,j,"other");
04821                                 if (!ok) 
04822                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
04823                                 ok &= (!osresult1->IsEqual(osresult2));
04824                                 if (!ok) 
04825                                         throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare equal!");
04826                                 ok &= osresult2->setOtherObjectiveResultName(i,j,"other");
04827                                 if (!ok) 
04828                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
04829                                 ok &= (osresult1->IsEqual(osresult2));
04830                                 if (!ok) 
04831                                         throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare unequal!");
04832 
04833                                 ok &= osresult1->setOtherObjectiveResultDescription(i,j,"other");
04834                                 if (!ok) 
04835                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
04836                                 ok &= (!osresult1->IsEqual(osresult2));
04837                                 if (!ok) 
04838                                         throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare equal!");
04839                                 ok &= osresult2->setOtherObjectiveResultDescription(i,j,"other");
04840                                 if (!ok) 
04841                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
04842                                 ok &= (osresult1->IsEqual(osresult2));
04843                                 if (!ok) 
04844                                         throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare unequal!");
04845 
04846                                 ok &= osresult1->setOtherObjectiveResultValue(i,j,"other");
04847                                 if (!ok) 
04848                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
04849                                 ok &= (!osresult1->IsEqual(osresult2));
04850                                 if (!ok) 
04851                                         throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare equal!");
04852                                 ok &= osresult2->setOtherObjectiveResultValue(i,j,"other");
04853                                 if (!ok) 
04854                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
04855                                 ok &= (osresult1->IsEqual(osresult2));
04856                                 if (!ok) 
04857                                         throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare unequal!");
04858 
04859                                 ok &= osresult1->setOtherObjectiveResultNumberOfObj(i,j,2);
04860                                 if (!ok) 
04861                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
04862                                 ok &= (!osresult1->IsEqual(osresult2));
04863                                 if (!ok) 
04864                                         throw ErrorClass("setOtherObjectiveResultNumberOfObj: osresult objects falsely compare equal!");
04865                                 ok &= osresult2->setOtherObjectiveResultNumberOfObj(i,j,2);
04866                                 if (!ok) 
04867                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
04868                                 ok &= (osresult1->IsEqual(osresult2));
04869                                 if (!ok) 
04870                                         throw ErrorClass("setOtherObjectiveResultNumberOfObj: osresult objects falsely compare unequal!");
04871 
04872                                 for (int k=0; k < 2; ++k)
04873                                 {
04874                                         ok &= osresult1->setOtherObjectiveResultObjIdx(i,j,k,-2);
04875                                         if (!ok) 
04876                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
04877                                         ok &= (!osresult1->IsEqual(osresult2));
04878                                         if (!ok) 
04879                                                 throw ErrorClass("setOtherObjectiveResultObjIdx: osresult objects falsely compare equal!");
04880                                         ok &= osresult2->setOtherObjectiveResultObjIdx(i,j,k,-2);
04881                                         if (!ok) 
04882                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
04883                                         ok &= (osresult1->IsEqual(osresult2));
04884                                         if (!ok) 
04885                                                 throw ErrorClass("setOtherObjectiveResultObjIdx: osresult objects falsely compare unequal!");
04886 
04887                                         ok &= osresult1->setOtherObjectiveResultObj(i,j,k,"value");
04888                                         if (!ok) 
04889                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
04890                                         ok &= (!osresult1->IsEqual(osresult2));
04891                                         if (!ok) 
04892                                                 throw ErrorClass("setOtherObjectiveResultObj: osresult objects falsely compare equal!");
04893                                         ok &= osresult2->setOtherObjectiveResultObj(i,j,k,"value");
04894                                         if (!ok) 
04895                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
04896                                         ok &= (osresult1->IsEqual(osresult2));
04897                                         if (!ok) 
04898                                                 throw ErrorClass("setOtherObjectiveResultObj: osresult objects falsely compare unequal!");
04899                                 }
04900                         }
04901 
04902                         ok &= osresult1->setNumberOfDualValues(i,3);
04903                         if (!ok) 
04904                                 throw ErrorClass("Error during setNumberOfDualValues!");
04905                         ok &= (!osresult1->IsEqual(osresult2));
04906                         if (!ok) 
04907                                 throw ErrorClass("setNumberOfDualValues: osresult objects falsely compare equal!");
04908                         ok &= osresult2->setNumberOfDualValues(i,3);
04909                         if (!ok) 
04910                                 throw ErrorClass("Error during setNumberOfDualValues!");
04911                         ok &= (osresult1->IsEqual(osresult2));
04912                         if (!ok) 
04913                                 throw ErrorClass("setNumberOfDualValues: osresult objects falsely compare unequal!");
04914 
04915                         for (int j=0; j < 3; ++j)
04916                         {
04917                                 ok &= osresult1->setDualValue(i,j,j,3.14);
04918                                 if (!ok) 
04919                                         throw ErrorClass("Error during setDualValue!");
04920                                 ok &= (!osresult1->IsEqual(osresult2));
04921                                 if (!ok) 
04922                                         throw ErrorClass("setDualValue: osresult objects falsely compare equal!");
04923                                 ok &= osresult2->setDualValue(i,j,j,3.14);
04924                                 if (!ok) 
04925                                         throw ErrorClass("Error during setDualValue!");
04926                                 ok &= (osresult1->IsEqual(osresult2));
04927                                 if (!ok) 
04928                                         throw ErrorClass("setDualValue: osresult objects falsely compare unequal!");
04929                         }
04930 
04931                         ok &= osresult1->setNumberOfOtherConstraintResults(i,3);
04932                         if (!ok) 
04933                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
04934                         ok &= (!osresult1->IsEqual(osresult2));
04935                         if (!ok) 
04936                                 throw ErrorClass("setNumberOfOtherConstraintResults: osresult objects falsely compare equal!");
04937                         ok &= osresult2->setNumberOfOtherConstraintResults(i,3);
04938                         if (!ok) 
04939                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
04940                         ok &= (osresult1->IsEqual(osresult2));
04941                         if (!ok) 
04942                                 throw ErrorClass("setNumberOfOtherConstraintResults: osresult objects falsely compare unequal!");
04943 
04944                         for (int j=0; j < 3; ++j)
04945                         {
04946                                 ok &= osresult1->setOtherConstraintResultName(i,j,"other");
04947                                 if (!ok) 
04948                                         throw ErrorClass("Error during setOtherConstraintResultName!");
04949                                 ok &= (!osresult1->IsEqual(osresult2));
04950                                 if (!ok) 
04951                                         throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare equal!");
04952                                 ok &= osresult2->setOtherConstraintResultName(i,j,"other");
04953                                 if (!ok) 
04954                                         throw ErrorClass("Error during setOtherConstraintResultName!");
04955                                 ok &= (osresult1->IsEqual(osresult2));
04956                                 if (!ok) 
04957                                         throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare unequal!");
04958 
04959                                 ok &= osresult1->setOtherConstraintResultDescription(i,j,"other");
04960                                 if (!ok) 
04961                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
04962                                 ok &= (!osresult1->IsEqual(osresult2));
04963                                 if (!ok) 
04964                                         throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare equal!");
04965                                 ok &= osresult2->setOtherConstraintResultDescription(i,j,"other");
04966                                 if (!ok) 
04967                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
04968                                 ok &= (osresult1->IsEqual(osresult2));
04969                                 if (!ok) 
04970                                         throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare unequal!");
04971 
04972                                 ok &= osresult1->setOtherConstraintResultValue(i,j,"other");
04973                                 if (!ok) 
04974                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
04975                                 ok &= (!osresult1->IsEqual(osresult2));
04976                                 if (!ok) 
04977                                         throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare equal!");
04978                                 ok &= osresult2->setOtherConstraintResultValue(i,j,"other");
04979                                 if (!ok) 
04980                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
04981                                 ok &= (osresult1->IsEqual(osresult2));
04982                                 if (!ok) 
04983                                         throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare unequal!");
04984 
04985                                 ok &= osresult1->setOtherConstraintResultNumberOfCon(i,j,3);
04986                                 if (!ok) 
04987                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
04988                                 ok &= (!osresult1->IsEqual(osresult2));
04989                                 if (!ok) 
04990                                         throw ErrorClass("setOtherConstraintResultNumberOfCon: osresult objects falsely compare equal!");
04991                                 ok &= osresult2->setOtherConstraintResultNumberOfCon(i,j,3);
04992                                 if (!ok) 
04993                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
04994                                 ok &= (osresult1->IsEqual(osresult2));
04995                                 if (!ok) 
04996                                         throw ErrorClass("setOtherConstraintResultNumberOfCon: osresult objects falsely compare unequal!");
04997 
04998                                 for (int k=0; k < 3; ++k)
04999                                 {
05000                                         ok &= osresult1->setOtherConstraintResultConIdx(i,j,k,k);
05001                                         if (!ok) 
05002                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
05003                                         ok &= (!osresult1->IsEqual(osresult2));
05004                                         if (!ok) 
05005                                                 throw ErrorClass("setOtherConstraintResultConIdx: osresult objects falsely compare equal!");
05006                                         ok &= osresult2->setOtherConstraintResultConIdx(i,j,k,k);
05007                                         if (!ok) 
05008                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
05009                                         ok &= (osresult1->IsEqual(osresult2));
05010                                         if (!ok) 
05011                                                 throw ErrorClass("setOtherConstraintResultConIdx: osresult objects falsely compare unequal!");
05012 
05013                                         ok &= osresult1->setOtherConstraintResultCon(i,j,k,"value");
05014                                         if (!ok) 
05015                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
05016                                         ok &= (!osresult1->IsEqual(osresult2));
05017                                         if (!ok) 
05018                                                 throw ErrorClass("setOtherConstraintResultCon: osresult objects falsely compare equal!");
05019                                         ok &= osresult2->setOtherConstraintResultCon(i,j,k,"value");
05020                                         if (!ok) 
05021                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
05022                                         ok &= (osresult1->IsEqual(osresult2));
05023                                         if (!ok) 
05024                                                 throw ErrorClass("setOtherConstraintResultCon: osresult objects falsely compare unequal!");
05025                                 }
05026                         }
05027 
05028                         ok &= osresult1->setNumberOfOtherSolutionResults(i,3);
05029                         if (!ok) 
05030                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
05031                         ok &= (!osresult1->IsEqual(osresult2));
05032                         if (!ok) 
05033                                 throw ErrorClass("setNumberOfOtherSolutionResults: osresult objects falsely compare equal!");
05034                         ok &= osresult2->setNumberOfOtherSolutionResults(i,3);
05035                         if (!ok) 
05036                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
05037                         ok &= (osresult1->IsEqual(osresult2));
05038                         if (!ok) 
05039                                 throw ErrorClass("setNumberOfOtherSolutionResults: osresult objects falsely compare unequal!");
05040 
05041                         for (int j=0; j < 3; ++j)
05042                         {
05043                                 ok &= osresult1->setOtherSolutionResultName(i,j,"other");
05044                                 if (!ok) 
05045                                         throw ErrorClass("Error during setOtherSolutionResultName!");
05046                                 ok &= (!osresult1->IsEqual(osresult2));
05047                                 if (!ok) 
05048                                         throw ErrorClass("setOtherSolutionResultName: osresult objects falsely compare equal!");
05049                                 ok &= osresult2->setOtherSolutionResultName(i,j,"other");
05050                                 if (!ok) 
05051                                         throw ErrorClass("Error during setOtherSolutionResultName!");
05052                                 ok &= (osresult1->IsEqual(osresult2));
05053                                 if (!ok) 
05054                                         throw ErrorClass("setOtherSolutionResultName: osresult objects falsely compare unequal!");
05055 
05056                                 ok &= osresult1->setOtherSolutionResultCategory(i,j,"other");
05057                                 if (!ok) 
05058                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
05059                                 ok &= (!osresult1->IsEqual(osresult2));
05060                                 if (!ok) 
05061                                         throw ErrorClass("setOtherSolutionResultCategory: osresult objects falsely compare equal!");
05062                                 ok &= osresult2->setOtherSolutionResultCategory(i,j,"other");
05063                                 if (!ok) 
05064                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
05065                                 ok &= (osresult1->IsEqual(osresult2));
05066                                 if (!ok) 
05067                                         throw ErrorClass("setOtherSolutionResultCategory: osresult objects falsely compare unequal!");
05068 
05069                                 ok &= osresult1->setOtherSolutionResultDescription(i,j,"other");
05070                                 if (!ok) 
05071                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
05072                                 ok &= (!osresult1->IsEqual(osresult2));
05073                                 if (!ok) 
05074                                         throw ErrorClass("setOtherSolutionResultDescription: osresult objects falsely compare equal!");
05075                                 ok &= osresult2->setOtherSolutionResultDescription(i,j,"other");
05076                                 if (!ok) 
05077                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
05078                                 ok &= (osresult1->IsEqual(osresult2));
05079                                 if (!ok) 
05080                                         throw ErrorClass("setOtherSolutionResultDescription: osresult objects falsely compare unequal!");
05081 
05082                                 ok &= osresult1->setOtherSolutionResultNumberOfItems(i,j,3);
05083                                 if (!ok) 
05084                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
05085                                 ok &= (!osresult1->IsEqual(osresult2));
05086                                 if (!ok) 
05087                                         throw ErrorClass("setOtherSolutionResultNumberOfItems: osresult objects falsely compare equal!");
05088                                 ok &= osresult2->setOtherSolutionResultNumberOfItems(i,j,3);
05089                                 if (!ok) 
05090                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
05091                                 ok &= (osresult1->IsEqual(osresult2));
05092                                 if (!ok) 
05093                                         throw ErrorClass("setOtherSolutionResultNumberOfItems: osresult objects falsely compare unequal!");
05094 
05095                                 for (int k=0; k < 3; ++k)
05096                                 {
05097                                         ok &= osresult1->setOtherSolutionResultItem(i,j,k,"blabla");
05098                                         if (!ok) 
05099                                                 throw ErrorClass("Error during setOtherSolutionResultItem!");
05100                                         ok &= (!osresult1->IsEqual(osresult2));
05101                                         if (!ok) 
05102                                                 throw ErrorClass("setOtherSolutionResultItem: osresult objects falsely compare equal!");
05103                                         ok &= osresult2->setOtherSolutionResultItem(i,j,k,"blabla");
05104                                         if (!ok) 
05105                                                 throw ErrorClass("Error during setOtherSolutionResultItem!");
05106                                         ok &= (osresult1->IsEqual(osresult2));
05107                                         if (!ok) 
05108                                                 throw ErrorClass("setOtherSolutionResultItem: osresult objects falsely compare unequal!");
05109                                 }
05110                         }
05111                 }
05112 
05113                 ok &= osresult1->setNumberOfSolverOutputs(3);
05114                 if (!ok) 
05115                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
05116                 ok &= (!osresult1->IsEqual(osresult2));
05117                 if (!ok) 
05118                         throw ErrorClass("setNumberOfSolverOutputs: osresult objects falsely compare equal!");
05119                 ok &= osresult2->setNumberOfSolverOutputs(3);
05120                 if (!ok) 
05121                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
05122                 ok &= (osresult1->IsEqual(osresult2));
05123                 if (!ok) 
05124                         throw ErrorClass("setNumberOfSolverOutputs: osresult objects falsely compare unequal!");
05125 
05126                 for (int i=0; i < 3; ++i)
05127                 {
05128                         ok &= osresult1->setSolverOutputName(i,"some name");
05129                         if (!ok) 
05130                                 throw ErrorClass("Error during setSolverOutputName!");
05131                         ok &= (!osresult1->IsEqual(osresult2));
05132                         if (!ok) 
05133                                 throw ErrorClass("setSolverOutputName: osresult objects falsely compare equal!");
05134                         ok &= osresult2->setSolverOutputName(i,"some name");
05135                         if (!ok) 
05136                                 throw ErrorClass("Error during setSolverOutputName!");
05137                         ok &= (osresult1->IsEqual(osresult2));
05138                         if (!ok) 
05139                                 throw ErrorClass("setSolverOutputName: osresult objects falsely compare unequal!");
05140 
05141                         ok &= osresult1->setSolverOutputCategory(i,"some name");
05142                         if (!ok) 
05143                                 throw ErrorClass("Error during setSolverOutputCategory!");
05144                         ok &= (!osresult1->IsEqual(osresult2));
05145                         if (!ok) 
05146                                 throw ErrorClass("setSolverOutputCategory: osresult objects falsely compare equal!");
05147                         ok &= osresult2->setSolverOutputCategory(i,"some name");
05148                         if (!ok) 
05149                                 throw ErrorClass("Error during setSolverOutputCategory!");
05150                         ok &= (osresult1->IsEqual(osresult2));
05151                         if (!ok) 
05152                                 throw ErrorClass("setSolverOutputCategory: osresult objects falsely compare unequal!");
05153 
05154                         ok &= osresult1->setSolverOutputDescription(i,"some name");
05155                         if (!ok) 
05156                                 throw ErrorClass("Error during setSolverOutputDescription!");
05157                         ok &= (!osresult1->IsEqual(osresult2));
05158                         if (!ok) 
05159                                 throw ErrorClass("setSolverOutputDescription: osresult objects falsely compare equal!");
05160                         ok &= osresult2->setSolverOutputDescription(i,"some name");
05161                         if (!ok) 
05162                                 throw ErrorClass("Error during setSolverOutputDescription!");
05163                         ok &= (osresult1->IsEqual(osresult2));
05164                         if (!ok) 
05165                                 throw ErrorClass("setSolverOutputDescription: osresult objects falsely compare unequal!");
05166 
05167                         ok &= osresult1->setSolverOutputNumberOfItems(i,3);
05168                         if (!ok) 
05169                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
05170                         ok &= (!osresult1->IsEqual(osresult2));
05171                         if (!ok) 
05172                                 throw ErrorClass("setSolverOutputNumberOfItems: osresult objects falsely compare equal!");
05173                         ok &= osresult2->setSolverOutputNumberOfItems(i,3);
05174                         if (!ok) 
05175                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
05176                         ok &= (osresult1->IsEqual(osresult2));
05177                         if (!ok) 
05178                                 throw ErrorClass("setSolverOutputNumberOfItems: osresult objects falsely compare unequal!");
05179 
05180                         for (int j=0; j < 3; ++j)
05181                         {
05182                                 ok &= osresult1->setSolverOutputItem(i,j,"other");
05183                                 if (!ok) 
05184                                         throw ErrorClass("Error during setSolverOutputItem!");
05185                                 ok &= (!osresult1->IsEqual(osresult2));
05186                                 if (!ok) 
05187                                         throw ErrorClass("setSolverOutputItem: osresult objects falsely compare equal!");
05188                                 ok &= osresult2->setSolverOutputItem(i,j,"other");
05189                                 if (!ok) 
05190                                         throw ErrorClass("Error during setSolverOutputItem!");
05191                                 ok &= (osresult1->IsEqual(osresult2));
05192                                 if (!ok) 
05193                                         throw ErrorClass("setSolverOutputItem: osresult objects falsely compare unequal!");
05194                         }
05195                 }
05196 
05197                 if (!ok)
05198                         throw ErrorClass("Unspecified error while testing set() methods");
05199 
05200                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrL set() tools" << std::endl;
05201                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05202 
05203                 cout << endl << "TEST " << ++nOfTest << ": OSrLWriter and OSrLReader " << endl << endl;
05204 
05205 
05206                 osrlwriter = new OSrLWriter();
05207                 osrlreader = new OSrLReader();
05208                 std::string tempOSrL;
05209 
05210                 tempOSrL = osrlwriter->writeOSrL( osresult1);
05211                 osresult3 = osrlreader->readOSrL( tempOSrL);
05212                 ok &= (osresult1->IsEqual(osresult3));
05213                 if (!ok) 
05214                         throw ErrorClass("Writing an osresult then reading leads to loss of data");
05215 
05216                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrLWriter and OSrLReader" << std::endl;
05217                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05218 
05224                 cout << endl << "TEST " << ++nOfTest << ": OSrL get() methods" << endl << endl;
05225 
05226                 if (osresult2  != NULL) delete osresult2;
05227                 osresult2 = new OSResult();
05228 
05229                 std::string tempStr;
05230                 double tempDbl;
05231                 int tempInt;
05232 
05233                 tempStr = osresult1->getGeneralStatusType();
05234                 ok &= osresult2->setGeneralStatusType(tempStr);
05235                 if (!ok) 
05236                         throw ErrorClass("Error during setGeneralStatusType!");
05237                 tempStr = osresult1->getGeneralStatusDescription();
05238                 ok &= osresult2->setGeneralStatusDescription(tempStr);
05239                 if (!ok) 
05240                         throw ErrorClass("Error during setGeneralStatusDescription!");
05241 
05242                 tempInt = osresult1->getNumberOfGeneralSubstatuses();
05243                 ok &= osresult2->setNumberOfGeneralSubstatuses(tempInt);
05244                 if (!ok) 
05245                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
05246                 for (int i=0; i < tempInt; i++)
05247                 {
05248                         tempStr = osresult1->getGeneralSubstatusName(i);
05249                         ok &= osresult2->setGeneralSubstatusName(i,tempStr);
05250                         if (!ok) 
05251                                 throw ErrorClass("Error during setGeneralSubstatusName!");
05252                         tempStr = osresult1->getGeneralSubstatusDescription(i);
05253                         ok &= osresult2->setGeneralSubstatusDescription(i,tempStr);
05254                         if (!ok) 
05255                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
05256                 }
05257 
05258                 tempStr = osresult1->getGeneralMessage();
05259                 ok &= osresult2->setGeneralMessage(tempStr);
05260                 if (!ok) 
05261                         throw ErrorClass("Error during setGeneralMessage!");
05262                 tempStr = osresult1->getServiceURI();
05263                 ok &= osresult2->setServiceURI(tempStr);
05264                 if (!ok) 
05265                         throw ErrorClass("Error during setServiceURI!");
05266                 tempStr = osresult1->getServiceName();
05267                 ok &= osresult2->setServiceName(tempStr);
05268                 if (!ok) 
05269                         throw ErrorClass("Error during setServiceName!");
05270                 tempStr = osresult1->getInstanceName();
05271                 ok &= osresult2->setInstanceName(tempStr);
05272                 if (!ok) 
05273                         throw ErrorClass("Error during setInstanceName!");
05274                 tempStr = osresult1->getJobID();
05275                 ok &= osresult2->setJobID(tempStr);
05276                 if (!ok) 
05277                         throw ErrorClass("Error during setJobID!");
05278                 tempStr = osresult1->getSolverInvoked();
05279                 ok &= osresult2->setSolverInvoked(tempStr);
05280                 if (!ok) 
05281                         throw ErrorClass("Error during setSolverInvoked!");
05282                 tempStr = osresult1->getTimeStamp();
05283                 ok &= osresult2->setTimeStamp(tempStr);
05284                 if (!ok) 
05285                         throw ErrorClass("Error during setTimeStamp!");
05286 
05287                 tempInt = osresult1->getNumberOfOtherGeneralResults();
05288                 ok &= osresult2->setNumberOfOtherGeneralResults(tempInt);
05289                 if (!ok) 
05290                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
05291                 for (int i=0; i < tempInt; i++)
05292                 {
05293                         tempStr = osresult1->getOtherGeneralResultName(i);
05294                         ok &= osresult2->setOtherGeneralResultName(i,tempStr);
05295                         if (!ok) 
05296                                 throw ErrorClass("Error during setOtherGeneralResultName!");
05297                         tempStr = osresult1->getOtherGeneralResultValue(i);
05298                         ok &= osresult2->setOtherGeneralResultValue(i,tempStr);
05299                         if (!ok) 
05300                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
05301                         tempStr = osresult1->getOtherGeneralResultDescription(i);
05302                         ok &= osresult2->setOtherGeneralResultDescription(i,tempStr);
05303                         if (!ok) 
05304                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
05305                 }
05306 
05307                 tempStr = osresult1->getSystemInformation();
05308                 ok &= osresult2->setSystemInformation(tempStr);
05309                 if (!ok) 
05310                         throw ErrorClass("Error during setSystemInformation!");
05311                 tempStr = osresult1->getAvailableDiskSpaceUnit();
05312                 ok &= osresult2->setAvailableDiskSpaceUnit(tempStr);
05313                 if (!ok) 
05314                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
05315                 tempStr = osresult1->getAvailableDiskSpaceDescription();
05316                 ok &= osresult2->setAvailableDiskSpaceDescription(tempStr);
05317                 if (!ok) 
05318                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
05319                 tempDbl = osresult1->getAvailableDiskSpaceValue();
05320                 ok &= osresult2->setAvailableDiskSpaceValue(tempDbl);
05321                 if (!ok) 
05322                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
05323                 tempStr = osresult1->getAvailableMemoryUnit();
05324                 ok &= osresult2->setAvailableMemoryUnit(tempStr);
05325                 if (!ok) 
05326                         throw ErrorClass("Error during setAvailableMemoryUnit!");
05327                 tempStr = osresult1->getAvailableMemoryDescription();
05328                 ok &= osresult2->setAvailableMemoryDescription(tempStr);
05329                 if (!ok) 
05330                         throw ErrorClass("Error during setAvailableMemoryDescription!");
05331                 tempDbl = osresult1->getAvailableMemoryValue();
05332                 ok &= osresult2->setAvailableMemoryValue(tempDbl);
05333                 if (!ok) 
05334                         throw ErrorClass("Error during setAvailableMemoryValue!");
05335                 tempStr = osresult1->getAvailableCPUSpeedUnit();
05336                 ok &= osresult2->setAvailableCPUSpeedUnit(tempStr);
05337                 if (!ok) 
05338                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
05339                 tempStr = osresult1->getAvailableCPUSpeedDescription();
05340                 ok &= osresult2->setAvailableCPUSpeedDescription(tempStr);
05341                 if (!ok) 
05342                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
05343                 tempDbl = osresult1->getAvailableCPUSpeedValue();
05344                 ok &= osresult2->setAvailableCPUSpeedValue(tempDbl);
05345                 if (!ok) 
05346                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
05347                 tempStr = osresult1->getAvailableCPUNumberDescription();
05348                 ok &= osresult2->setAvailableCPUNumberDescription(tempStr);
05349                 if (!ok) 
05350                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
05351                 tempInt = osresult1->getAvailableCPUNumberValue();
05352                 ok &= osresult2->setAvailableCPUNumberValue(tempInt);
05353                 if (!ok) 
05354                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
05355 
05356                 tempInt = osresult1->getNumberOfOtherSystemResults();
05357                 ok &= osresult2->setNumberOfOtherSystemResults(tempInt);
05358                 if (!ok) 
05359                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
05360                 for (int i=0; i < tempInt; i++)
05361                 {
05362                         tempStr = osresult1->getOtherSystemResultName(i);
05363                         ok &= osresult2->setOtherSystemResultName(i,tempStr);
05364                         if (!ok) 
05365                                 throw ErrorClass("Error during setOtherSystemResultName!");
05366                         tempStr = osresult1->getOtherSystemResultValue(i);
05367                         ok &= osresult2->setOtherSystemResultValue(i,tempStr);
05368                         if (!ok) 
05369                                 throw ErrorClass("Error during setOtherSystemResultValue!");
05370                         tempStr = osresult1->getOtherSystemResultDescription(i);
05371                         ok &= osresult2->setOtherSystemResultDescription(i,tempStr);
05372                         if (!ok) 
05373                                 throw ErrorClass("Error during setOtherSystemResultDescription!");
05374                 }
05375 
05376                 tempStr = osresult1->getCurrentState();
05377                 ok &= osresult2->setCurrentState(tempStr);
05378                 if (!ok) 
05379                         throw ErrorClass("Error during setCurrentState!");
05380                 tempInt = osresult1->getCurrentJobCount();
05381                 ok &= osresult2->setCurrentJobCount(tempInt);
05382                 if (!ok) 
05383                         throw ErrorClass("Error during setCurrentJobCount!");
05384                 tempInt = osresult1->getTotalJobsSoFar();
05385                 ok &= osresult2->setTotalJobsSoFar(tempInt);
05386                 if (!ok) 
05387                         throw ErrorClass("Error during setTotalJobsSoFar!");
05388                 tempStr = osresult1->getTimeServiceStarted();
05389                 ok &= osresult2->setTimeServiceStarted(tempStr);
05390                 if (!ok) 
05391                         throw ErrorClass("Error during setTimeServiceStarted!");
05392                 tempDbl = osresult1->getServiceUtilization();
05393                 ok &= osresult2->setServiceUtilization(tempDbl);
05394                 if (!ok) 
05395                         throw ErrorClass("Error during setServiceUtilization!");
05396 
05397                 tempInt = osresult1->getNumberOfOtherServiceResults();
05398                 ok &= osresult2->setNumberOfOtherServiceResults(tempInt);
05399                 if (!ok) 
05400                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
05401                 for (int i=0; i < tempInt; i++)
05402                 {
05403                         tempStr = osresult1->getOtherServiceResultName(i);
05404                         ok &= osresult2->setOtherServiceResultName(i,tempStr);
05405                         if (!ok) 
05406                                 throw ErrorClass("Error during setOtherServiceResultName!");
05407                         tempStr = osresult1->getOtherServiceResultValue(i);
05408                         ok &= osresult2->setOtherServiceResultValue(i,tempStr);
05409                         if (!ok) 
05410                                 throw ErrorClass("Error during setOtherServiceResultValue!");
05411                         tempStr = osresult1->getOtherServiceResultDescription(i);
05412                         ok &= osresult2->setOtherServiceResultDescription(i,tempStr);
05413                         if (!ok) 
05414                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
05415                 }
05416 
05417                 tempStr = osresult1->getJobStatus();
05418                 ok &= osresult2->setJobStatus(tempStr);
05419                 if (!ok) 
05420                         throw ErrorClass("Error during setJobStatus!");
05421                 tempStr = osresult1->getJobSubmitTime();
05422                 ok &= osresult2->setJobSubmitTime(tempStr);
05423                 if (!ok) 
05424                         throw ErrorClass("Error during setJobSubmitTime!");
05425                 tempStr = osresult1->getScheduledStartTime();
05426                 ok &= osresult2->setScheduledStartTime(tempStr);
05427                 if (!ok) 
05428                         throw ErrorClass("Error during setScheduledStartTime!");
05429                 tempStr = osresult1->getActualStartTime();
05430                 ok &= osresult2->setActualStartTime(tempStr);
05431                 if (!ok) 
05432                         throw ErrorClass("Error during setActualStartTime!");
05433                 tempStr = osresult1->getJobEndTime();
05434                 ok &= osresult2->setJobEndTime(tempStr);
05435                 if (!ok) 
05436                         throw ErrorClass("Error during setJobEndTime!");
05437 
05438                 tempInt = osresult1->getNumberOfTimes();
05439                 ok &= osresult2->setNumberOfTimes(tempInt);
05440                 if (!ok) 
05441                         throw ErrorClass("Error during setNumberOfTimes!");
05442                 for (int i=0; i < tempInt; i++)
05443                 {
05444                         string tempStr1,tempStr2,tempStr3,tempStr4;
05445                         tempStr1 = osresult1->getTimingInfoType(i);
05446                         tempStr2 = osresult1->getTimingInfoCategory(i);
05447                         tempStr3 = osresult1->getTimingInfoUnit(i);
05448                         tempStr4 = osresult1->getTimingInfoDescription(i);
05449                         tempDbl  = osresult1->getTimingInfoValue(i);
05450                         ok &= osresult2->setTimingInformation(i,tempStr1,tempStr2,tempStr3,tempStr4,tempDbl);
05451                         if (!ok) 
05452                                 throw ErrorClass("Error during setTimingInformation!");
05453                 }
05454 
05455                 tempStr = osresult1->getUsedDiskSpaceUnit();
05456                 ok &= osresult2->setUsedDiskSpaceUnit(tempStr);
05457                 if (!ok) 
05458                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
05459                 tempStr = osresult1->getUsedDiskSpaceDescription();
05460                 ok &= osresult2->setUsedDiskSpaceDescription(tempStr);
05461                 if (!ok) 
05462                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
05463                 tempDbl = osresult1->getUsedDiskSpaceValue();
05464                 ok &= osresult2->setUsedDiskSpaceValue(tempDbl);
05465                 if (!ok) 
05466                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
05467                 tempStr = osresult1->getUsedMemoryUnit();
05468                 ok &= osresult2->setUsedMemoryUnit(tempStr);
05469                 if (!ok) 
05470                         throw ErrorClass("Error during setUsedMemoryUnit!");
05471                 tempStr = osresult1->getUsedMemoryDescription();
05472                 ok &= osresult2->setUsedMemoryDescription(tempStr);
05473                 if (!ok) 
05474                         throw ErrorClass("Error during setUsedMemoryDescription!");
05475                 tempDbl = osresult1->getUsedMemoryValue();
05476                 ok &= osresult2->setUsedMemoryValue(tempDbl);
05477                 if (!ok) 
05478                         throw ErrorClass("Error during setUsedMemoryValue!");
05479                 tempStr = osresult1->getUsedCPUSpeedUnit();
05480                 ok &= osresult2->setUsedCPUSpeedUnit(tempStr);
05481                 if (!ok) 
05482                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
05483                 tempStr = osresult1->getUsedCPUSpeedDescription();
05484                 ok &= osresult2->setUsedCPUSpeedDescription(tempStr);
05485                 if (!ok) 
05486                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
05487                 tempDbl = osresult1->getUsedCPUSpeedValue();
05488                 ok &= osresult2->setUsedCPUSpeedValue(tempDbl);
05489                 if (!ok) 
05490                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
05491                 tempStr = osresult1->getUsedCPUNumberDescription();
05492                 ok &= osresult2->setUsedCPUNumberDescription(tempStr);
05493                 if (!ok) 
05494                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
05495                 tempInt = osresult1->getUsedCPUNumberValue();
05496                 ok &= osresult2->setUsedCPUNumberValue(tempInt);
05497                 if (!ok) 
05498                         throw ErrorClass("Error during setUsedCPUNumberValue!");
05499 
05500                 tempInt = osresult1->getNumberOfOtherJobResults();
05501                 ok &= osresult2->setNumberOfOtherJobResults(tempInt);
05502                 if (!ok) 
05503                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
05504                 for (int i=0; i < tempInt; i++)
05505                 {
05506                         tempStr = osresult1->getOtherJobResultName(i);
05507                         ok &= osresult2->setOtherJobResultName(i,tempStr);
05508                         if (!ok) 
05509                                 throw ErrorClass("Error during setOtherJobResultName!");
05510                         tempStr = osresult1->getOtherJobResultValue(i);
05511                         ok &= osresult2->setOtherJobResultValue(i,tempStr);
05512                         if (!ok) 
05513                                 throw ErrorClass("Error during setOtherJobResultValue!");
05514                         tempStr = osresult1->getOtherJobResultDescription(i);
05515                         ok &= osresult2->setOtherJobResultDescription(i,tempStr);
05516                         if (!ok) 
05517                                 throw ErrorClass("Error during setOtherJobResultDescription!");
05518                 }
05519 
05520                 tempInt = osresult1->getSolutionNumber();
05521                 ok &= osresult2->setSolutionNumber(tempInt);
05522                 if (!ok) 
05523                         throw ErrorClass("Error during setSolutionNumber!");
05524                 int nSoln = tempInt;
05525                 int nVar, nObj, nCon, nOther, nItem;
05526 
05527                 tempInt = osresult1->getVariableNumber();
05528                 ok &= osresult2->setVariableNumber(tempInt);
05529                 if (!ok) 
05530                         throw ErrorClass("Error during setVariableNumber!");
05531                 tempInt = osresult1->getObjectiveNumber();
05532                 ok &= osresult2->setObjectiveNumber(tempInt);
05533                 if (!ok) 
05534                         throw ErrorClass("Error during setObjectiveNumber!");
05535                 tempInt = osresult1->getConstraintNumber();
05536                 ok &= osresult2->setConstraintNumber(tempInt);
05537                 if (!ok) 
05538                         throw ErrorClass("Error during setConstraintNumber!");
05539 
05540                 for (int i=0; i < nSoln; ++i)
05541                 {
05542                         tempInt = osresult1->getSolutionTargetObjectiveIdx(i);
05543                         ok &= osresult2->setSolutionTargetObjectiveIdx(i,tempInt);
05544                         if (!ok) 
05545                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
05546                         bool tempLog = osresult1->getSolutionWeightedObjectives(i);
05547                         ok &= osresult2->setSolutionWeightedObjectives(i,tempLog);
05548                         if (!ok) 
05549                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
05550                         tempStr = osresult1->getSolutionStatusType(i);
05551                         ok &= osresult2->setSolutionStatusType(i,tempStr);
05552                         if (!ok) 
05553                                 throw ErrorClass("Error during setSolutionStatusType!");
05554                         tempStr = osresult1->getSolutionStatusDescription(i);
05555                         ok &= osresult2->setSolutionStatusDescription(i,tempStr);
05556                         if (!ok) 
05557                                 throw ErrorClass("Error during setSolutionStatusDescription!");
05558                         
05559                         tempInt = osresult1->getNumberOfSolutionSubstatuses(i);
05560                         ok &= osresult2->setNumberOfSolutionSubstatuses(i,tempInt);
05561                         if (!ok) 
05562                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
05563 
05564                         for (int j=0; j < tempInt; ++j)
05565                         {
05566                                 tempStr = osresult1->getSolutionSubstatusType(i,j);
05567                                 ok &= osresult2->setSolutionSubstatusType(i,j,tempStr);
05568                                 if (!ok) 
05569                                         throw ErrorClass("Error during setSolutionSubstatusType!");
05570                                 tempStr = osresult1->getSolutionSubstatusDescription(i,j);
05571                                 ok &= osresult2->setSolutionSubstatusDescription(i,j,tempStr);
05572                                 if (!ok) 
05573                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
05574                         }
05575 
05576                         tempStr = osresult1->getSolutionMessage(i);
05577                         ok &= osresult2->setSolutionMessage(i,tempStr);
05578                         if (!ok) 
05579                                 throw ErrorClass("Error during setSolutionMessage!");
05580 
05581                         tempInt = osresult1->getNumberOfVarValues(i);
05582                         ok &= osresult2->setNumberOfVarValues(i,tempInt);
05583                         if (!ok) 
05584                                 throw ErrorClass("Error during setNumberOfVarValues!");
05585                         nVar = tempInt;
05586                         for (int j=0; j < nVar; ++j)
05587                         {
05588                                 tempInt = osresult1->getVarValueIdx(i,j);
05589                                 tempDbl = osresult1->getVarValue(i,j);
05590                                 ok &= osresult2->setVarValue(i,j,tempInt,tempDbl);
05591                                 if (!ok) 
05592                                         throw ErrorClass("Error during setVarValue!");
05593                         }
05594 
05595                         tempInt = osresult1->getNumberOfVarValuesString(i);
05596                         ok &= osresult2->setNumberOfVarValuesString(i,tempInt);
05597                         if (!ok) 
05598                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
05599                         nVar = tempInt;
05600                         for (int j=0; j < nVar; ++j)
05601                         {
05602                                 tempInt = osresult1->getVarValueStringIdx(i,j);
05603                                 tempStr = osresult1->getVarValueString(i,j);
05604                                 ok &= osresult2->setVarValueString(i,j,tempInt,tempStr);
05605                                 if (!ok) 
05606                                         throw ErrorClass("Error during setVarValueString!");
05607                         }
05608 
05609 /*
05610                         tempInt = osresult1->getNumberOfBasisVar(i);
05611                         ok &= osresult2->setNumberOfBasisVar(i,tempInt);
05612                         if (!ok) 
05613                                 throw ErrorClass("Error during setNumberOfBasisVar!");
05614                         nVar = tempInt;
05615                         for (int j=0; j < nVar; ++j)
05616                         {
05617                                 tempInt = osresult1->getBasisVarIdx(i,j);
05618                                 tempStr = osresult1->getBasisVar(i,j);
05619                                 ok &= osresult2->setBasisVar(i,j,tempInt,tempStr);
05620                                 if (!ok) 
05621                                         throw ErrorClass("Error during setBasisVar!");
05622                         }
05623 */
05624 
05625                         tempInt = osresult1->getNumberOfOtherVariableResults(i);
05626                         ok &= osresult2->setNumberOfOtherVariableResults(i,tempInt);
05627                         if (!ok) 
05628                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
05629                         nOther = tempInt;
05630                         for (int j=0; j < nOther; ++j)
05631                         {
05632                                 tempStr = osresult1->getOtherVariableResultName(i,j);
05633                                 ok &= osresult2->setOtherVariableResultName(i,j,tempStr);
05634                                 if (!ok) 
05635                                         throw ErrorClass("Error during setOtherVariableResultName!");
05636                                 tempStr = osresult1->getOtherVariableResultDescription(i,j);
05637                                 ok &= osresult2->setOtherVariableResultDescription(i,j,tempStr);
05638                                 if (!ok) 
05639                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
05640                                 tempStr = osresult1->getOtherVariableResultValue(i,j);
05641                                 ok &= osresult2->setOtherVariableResultValue(i,j,tempStr);
05642                                 if (!ok) 
05643                                         throw ErrorClass("Error during setOtherVariableResultValue!");
05644                                 tempInt = osresult1->getOtherVariableResultNumberOfVar(i,j);
05645                                 ok &= osresult2->setOtherVariableResultNumberOfVar(i,j,tempInt);
05646                                 if (!ok) 
05647                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
05648 
05649                                 int nVar = tempInt;
05650                                 for (int k=0; k < nVar; ++k)
05651                                 {
05652                                         tempInt = osresult1->getOtherVariableResultVarIdx(i,j,k);
05653                                         ok &= osresult2->setOtherVariableResultVarIdx(i,j,k,tempInt);
05654                                         if (!ok) 
05655                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
05656                                         tempStr = osresult1->getOtherVariableResultVar(i,j,k);
05657                                         ok &= osresult2->setOtherVariableResultVar(i,j,k,tempStr);
05658                                         if (!ok) 
05659                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
05660                                 }
05661                         }
05662 
05663                         tempInt = osresult1->getNumberOfObjValues(i);
05664                         ok &= osresult2->setNumberOfObjValues(i,tempInt);
05665                         if (!ok) 
05666                                 throw ErrorClass("Error during setNumberOfObjValues!");
05667                         nObj = tempInt;
05668                         for (int j=0; j < nObj; ++j)
05669                         {
05670                                 tempInt = osresult1->getObjValueIdx(i,j);
05671                                 tempDbl = osresult1->getObjValue(i,j);
05672                                 ok &= osresult2->setObjValue(i,j,tempInt,tempDbl);
05673                                 if (!ok) 
05674                                         throw ErrorClass("Error during setObjValue!");
05675                         }
05676 
05677                         tempInt = osresult1->getNumberOfOtherObjectiveResults(i);
05678                         ok &= osresult2->setNumberOfOtherObjectiveResults(i,tempInt);
05679                         if (!ok) 
05680                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
05681                         nOther = tempInt;
05682                         for (int j=0; j < nOther; ++j)
05683                         {
05684                                 tempStr = osresult1->getOtherObjectiveResultName(i,j);
05685                                 ok &= osresult2->setOtherObjectiveResultName(i,j,tempStr);
05686                                 if (!ok) 
05687                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
05688                                 tempStr = osresult1->getOtherObjectiveResultDescription(i,j);
05689                                 ok &= osresult2->setOtherObjectiveResultDescription(i,j,tempStr);
05690                                 if (!ok) 
05691                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
05692                                 tempStr = osresult1->getOtherObjectiveResultValue(i,j);
05693                                 ok &= osresult2->setOtherObjectiveResultValue(i,j,tempStr);
05694                                 if (!ok) 
05695                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
05696                                 tempInt = osresult1->getOtherObjectiveResultNumberOfObj(i,j);
05697                                 ok &= osresult2->setOtherObjectiveResultNumberOfObj(i,j,tempInt);
05698                                 if (!ok) 
05699                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
05700 
05701                                 nObj = tempInt;
05702                                 for (int k=0; k < nObj; ++k)
05703                                 {
05704                                         tempInt = osresult1->getOtherObjectiveResultObjIdx(i,j,k);
05705                                         ok &= osresult2->setOtherObjectiveResultObjIdx(i,j,k,tempInt);
05706                                         if (!ok) 
05707                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
05708                                         tempStr = osresult1->getOtherObjectiveResultObj(i,j,k);
05709                                         ok &= osresult2->setOtherObjectiveResultObj(i,j,k,tempStr);
05710                                         if (!ok) 
05711                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
05712                                 }
05713                         }
05714 
05715                         tempInt = osresult1->getNumberOfDualValues(i);
05716                         ok &= osresult2->setNumberOfDualValues(i,tempInt);
05717                         if (!ok) 
05718                                 throw ErrorClass("Error during setNumberOfDualValues!");
05719                         nCon = tempInt;
05720                         for (int j=0; j < nCon; ++j)
05721                         {
05722                                 tempInt = osresult1->getDualValueIdx(i,j);
05723                                 tempDbl = osresult1->getDualValue(i,j);
05724                                 ok &= osresult2->setDualValue(i,j,tempInt,tempDbl);
05725                                 if (!ok) 
05726                                         throw ErrorClass("Error during setDualValue!");
05727                         }
05728 
05729                         tempInt = osresult1->getNumberOfOtherConstraintResults(i);
05730                         ok &= osresult2->setNumberOfOtherConstraintResults(i,tempInt);
05731                         if (!ok) 
05732                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
05733                         nOther = tempInt;
05734                         for (int j=0; j < nOther; ++j)
05735                         {
05736                                 tempStr = osresult1->getOtherConstraintResultName(i,j);
05737                                 ok &= osresult2->setOtherConstraintResultName(i,j,tempStr);
05738                                 if (!ok) 
05739                                         throw ErrorClass("Error during setOtherConstraintResultName!");
05740                                 tempStr = osresult1->getOtherConstraintResultDescription(i,j);
05741                                 ok &= osresult2->setOtherConstraintResultDescription(i,j,tempStr);
05742                                 if (!ok) 
05743                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
05744                                 tempStr = osresult1->getOtherConstraintResultValue(i,j);
05745                                 ok &= osresult2->setOtherConstraintResultValue(i,j,tempStr);
05746                                 if (!ok) 
05747                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
05748                                 tempInt = osresult1->getOtherConstraintResultNumberOfCon(i,j);
05749                                 ok &= osresult2->setOtherConstraintResultNumberOfCon(i,j,tempInt);
05750                                 if (!ok) 
05751                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
05752 
05753                                 nCon = tempInt;
05754                                 for (int k=0; k < nCon; ++k)
05755                                 {
05756                                         tempInt = osresult1->getOtherConstraintResultConIdx(i,j,k);
05757                                         ok &= osresult2->setOtherConstraintResultConIdx(i,j,k,tempInt);
05758                                         if (!ok) 
05759                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
05760                                         tempStr = osresult1->getOtherConstraintResultCon(i,j,k);
05761                                         ok &= osresult2->setOtherConstraintResultCon(i,j,k,tempStr);
05762                                         if (!ok) 
05763                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
05764                                 }
05765                         }
05766 
05767                         tempInt = osresult1->getNumberOfOtherSolutionResults(i);
05768                         ok &= osresult2->setNumberOfOtherSolutionResults(i,tempInt);
05769                         if (!ok) 
05770                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
05771                         nOther = tempInt;
05772                         for (int j=0; j < nOther; ++j)
05773                         {
05774                                 tempStr = osresult1->getOtherSolutionResultName(i,j);
05775                                 ok &= osresult2->setOtherSolutionResultName(i,j,tempStr);
05776                                 if (!ok) 
05777                                         throw ErrorClass("Error during setOtherSolutionResultName!");
05778                                 tempStr = osresult1->getOtherSolutionResultCategory(i,j);
05779                                 ok &= osresult2->setOtherSolutionResultCategory(i,j,tempStr);
05780                                 if (!ok) 
05781                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
05782                                 tempStr = osresult1->getOtherSolutionResultDescription(i,j);
05783                                 ok &= osresult2->setOtherSolutionResultDescription(i,j,tempStr);
05784                                 if (!ok) 
05785                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
05786                                 tempInt = osresult1->getOtherSolutionResultNumberOfItems(i,j);
05787                                 ok &= osresult2->setOtherSolutionResultNumberOfItems(i,j,tempInt);
05788                                 if (!ok) 
05789                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
05790 
05791                                 nItem = tempInt;
05792                                 for (int k=0; k < nItem; ++k)
05793                                 {
05794                                         tempStr = osresult1->getOtherSolutionResultItem(i,j,k);
05795                                         ok &= osresult2->setOtherSolutionResultItem(i,j,k,tempStr);
05796                                         if (!ok) 
05797                                                 throw ErrorClass("Error during setSolutionResultItem!");
05798                                 }
05799                         }
05800                 }
05801 
05802                 tempInt = osresult1->getNumberOfSolverOutputs();
05803                 ok &= osresult2->setNumberOfSolverOutputs(tempInt);
05804                 if (!ok) 
05805                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
05806                 nOther = tempInt;
05807                 for (int i=0; i < nOther; ++i)
05808                 {
05809                         tempStr = osresult1->getSolverOutputName(i);
05810                         ok &= osresult2->setSolverOutputName(i,tempStr);
05811                         if (!ok) 
05812                                 throw ErrorClass("Error during setSolverOutputName!");
05813                         tempStr = osresult1->getSolverOutputCategory(i);
05814                         ok &= osresult2->setSolverOutputCategory(i,tempStr);
05815                         if (!ok) 
05816                                 throw ErrorClass("Error during setSolverOutputCategory!");
05817                         tempStr = osresult1->getSolverOutputDescription(i);
05818                         ok &= osresult2->setSolverOutputDescription(i,tempStr);
05819                         if (!ok) 
05820                                 throw ErrorClass("Error during setSolverOutputDescription!");
05821                         tempInt = osresult1->getSolverOutputNumberOfItems(i);
05822                         ok &= osresult2->setSolverOutputNumberOfItems(i,tempInt);
05823                         if (!ok) 
05824                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
05825                         for (int j=0; j < tempInt; ++j)
05826                         {
05827                                 tempStr = osresult1->getSolverOutputItem(i,j);
05828                                 ok &= osresult2->setSolverOutputItem(i,j,tempStr);
05829                                 if (!ok) 
05830                                         throw ErrorClass("Error during setSolverOutputItem!");
05831                         }
05832                 }
05833 
05834                 ok &= osresult1->IsEqual(osresult2);
05835                 if (!ok)
05836                         throw ErrorClass("Error duplicating OSResult object using get() and set() methods");
05837 
05838                 std::cout << "OSResult object duplicated with get() and set() methods" << std::endl;
05839 
05840                 if (osrlwriter != NULL) delete osrlwriter;
05841                 if (osrlreader != NULL) delete osrlreader;
05842                 if (osresult1  != NULL) delete osresult1;
05843                 if (osresult2  != NULL) delete osresult2;
05844 
05845                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrL tools" << std::endl;
05846                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05847         }       
05848         
05849         catch(const ErrorClass& eclass){
05850                 cout << endl << endl << endl;
05851                 if (osrlwriter != NULL) delete osrlwriter;
05852                 if (osrlreader != NULL) delete osrlreader;
05853                 if (osresult1  != NULL) delete osresult1;
05854                 if (osresult2  != NULL) delete osresult2;
05855                 // " Problem with the test reading OSoL data";
05856                 unitTestResultFailure << eclass.errormsg << endl;
05857                 unitTestResultFailure << "There was a failure in the test of OSrL get() methods" << endl;
05858         }
05859 
05860         // Now test the OSrL parser
05861         try{ 
05870                 cout << endl << "TEST " << ++nOfTest << ": OSrL parser" << endl << endl;
05871                 std::string tmpOSrL;
05872                 clock_t start, finish;
05873                 double duration;
05874                 std::string osrl;
05875                 OSResult *osresult = NULL;
05876                 osrlwriter = new OSrLWriter();
05877                 osrlreader = new OSrLReader();
05878                 //osresult = new OSResult(); 
05879                 cout << "Test parsing an OSrL file" << endl;
05880                 cout << "First read the OSrL file into a string" << endl;
05881                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest.osrl"; 
05882                 start = clock();
05883                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05884                 finish = clock();
05885                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05886                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05887                 cout << osrl << endl;
05888                 start = clock();
05889                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05890                 osresult = osrlreader->readOSrL( osrl);
05891                 cout << "Finished read; write OSResult object to temporary string" << endl;
05892 
05893                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05894                 cout << tmpOSrL << endl;
05895 
05896 
05897                 // make sure we can parse without error
05898                 delete osrlreader;
05899                 osrlreader = NULL;
05900                 osrlreader = new OSrLReader();
05901                 cout << "Parse temporary string" << endl;
05902                 osrlreader->readOSrL( tmpOSrL);
05903                 delete osrlwriter;
05904                 osrlwriter = NULL;
05905                 delete osrlreader;
05906                 osrlreader = NULL;
05907 
05908 
05909 /*              // now a second example
05910                 cout << endl << "Test parsing another OSrL file" << endl;
05911                 osrlwriter = new OSrLWriter();
05912                 osrlreader = new OSrLReader();
05913                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05914                 //errorExample.osrl -- check to see if we read an error message correctly;
05915                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "errorExample.osrl"; 
05916                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05917                 finish = clock();
05918                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05919                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05920                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05921                 osresult = osrlreader->readOSrL( osrl);
05922                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05923                 delete osrlreader;
05924                 osrlreader = NULL;
05925                 osrlreader = new OSrLReader();
05926                 osrlreader->readOSrL( tmpOSrL);
05927                 delete osrlwriter;
05928                 osrlwriter = NULL;
05929                 delete osrlreader;
05930                 osrlreader = NULL;
05931 
05932                 // ... and another
05933                 cout << endl << "parserTest1.osrl" << endl;
05934                 osrlwriter = new OSrLWriter();
05935                 osrlreader = new OSrLReader();
05936                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05937                 //errorExample.osrl -- check to see if we read an error message correctly;
05938                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest1.osrl"; 
05939                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05940                 finish = clock();
05941                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05942                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05943                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05944                 osresult = osrlreader->readOSrL( osrl);
05945                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05946                 delete osrlreader;
05947                 osrlreader = NULL;
05948                 osrlreader = new OSrLReader();
05949                 osrlreader->readOSrL( tmpOSrL);
05950                 delete osrlwriter;
05951                 osrlwriter = NULL;
05952                 delete osrlreader;
05953                 osrlreader = NULL;
05954 
05955                 // ... and another
05956                 cout << endl << "parserTest2.osrl" << endl;
05957                 osrlwriter = new OSrLWriter();
05958                 osrlreader = new OSrLReader();
05959                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05960                 //errorExample.osrl -- check to see if we read an error message correctly;
05961                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest2.osrl"; 
05962                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05963                 finish = clock();
05964                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05965                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05966                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05967                 osresult = osrlreader->readOSrL( osrl);
05968                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05969                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05970                 delete osrlreader;
05971                 osrlreader = NULL;
05972                 osrlreader = new OSrLReader();
05973                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05974                 osrlreader->readOSrL( tmpOSrL);
05975                 delete osrlwriter;
05976                 osrlwriter = NULL;
05977                 delete osrlreader;
05978                 osrlreader = NULL;
05979 
05980                 // ... and another
05981                 cout << endl << "parserTest3.osrl" << endl;
05982                 osrlwriter = new OSrLWriter();
05983                 osrlreader = new OSrLReader();
05984                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05985                 //errorExample.osrl -- check to see if we read an error message correctly;
05986                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest3.osrl"; 
05987                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05988                 finish = clock();
05989                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05990                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05991                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05992                 osresult = osrlreader->readOSrL( osrl);
05993                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05994                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05995                 delete osrlreader;
05996                 osrlreader = NULL;
05997                 osrlreader = new OSrLReader();
05998                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05999                 osrlreader->readOSrL( tmpOSrL);
06000                 delete osrlwriter;
06001                 osrlwriter = NULL;
06002                 delete osrlreader;
06003                 osrlreader = NULL;
06004 
06005                 // ... and another
06006                 cout << endl << "parserTest4.osrl" << endl;
06007                 osrlwriter = new OSrLWriter();
06008                 osrlreader = new OSrLReader();
06009                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06010                 //errorExample.osrl -- check to see if we read an error message correctly;
06011                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest4.osrl"; 
06012                 start = clock();
06013                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06014                 finish = clock();
06015                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06016                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06017                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06018                 osresult = osrlreader->readOSrL( osrl);
06019                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06020                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06021                 delete osrlreader;
06022                 osrlreader = NULL;
06023                 osrlreader = new OSrLReader();
06024                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06025                 osrlreader->readOSrL( tmpOSrL);
06026                 delete osrlwriter;
06027                 osrlwriter = NULL;
06028                 delete osrlreader;
06029                 osrlreader = NULL;
06030 
06031                 // ... and another
06032                 cout << endl << "parserTest5.osrl" << endl;
06033                 osrlwriter = new OSrLWriter();
06034                 osrlreader = new OSrLReader();
06035                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06036                 //errorExample.osrl -- check to see if we read an error message correctly;
06037                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest5.osrl"; 
06038                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06039                 finish = clock();
06040                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06041                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06042                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06043                 osresult = osrlreader->readOSrL( osrl);
06044                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06045                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06046                 delete osrlreader;
06047                 osrlreader = NULL;
06048                 osrlreader = new OSrLReader();
06049                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06050                 osrlreader->readOSrL( tmpOSrL);
06051                 delete osrlwriter;
06052                 osrlwriter = NULL;
06053                 delete osrlreader;
06054                 osrlreader = NULL;
06055 
06056                 // ... and another
06057                 cout << endl << "parserTest6.osrl" << endl;
06058                 osrlwriter = new OSrLWriter();
06059                 osrlreader = new OSrLReader();
06060                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06061                 //errorExample.osrl -- check to see if we read an error message correctly;
06062                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest6.osrl"; 
06063                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06064                 finish = clock();
06065                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06066                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06067                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06068                 osresult = osrlreader->readOSrL( osrl);
06069                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06070                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06071                 delete osrlreader;
06072                 osrlreader = NULL;
06073                 osrlreader = new OSrLReader();
06074                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06075                 osrlreader->readOSrL( tmpOSrL);
06076                 delete osrlwriter;
06077                 osrlwriter = NULL;
06078                 delete osrlreader;
06079                 osrlreader = NULL;
06080 
06081                 // ... and another
06082                 cout << endl << "parserTest7.osrl" << endl;
06083                 osrlwriter = new OSrLWriter();
06084                 osrlreader = new OSrLReader();
06085                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06086                 //errorExample.osrl -- check to see if we read an error message correctly;
06087                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest7.osrl"; 
06088                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06089                 finish = clock();
06090                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06091                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06092                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06093                 osresult = osrlreader->readOSrL( osrl);
06094                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06095                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06096                 delete osrlreader;
06097                 osrlreader = NULL;
06098                 osrlreader = new OSrLReader();
06099                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06100                 osrlreader->readOSrL( tmpOSrL);
06101                 delete osrlwriter;
06102                 osrlwriter = NULL;
06103                 delete osrlreader;
06104                 osrlreader = NULL;
06105 
06106                 // ... and another
06107                 cout << endl << "parserTest8.osrl" << endl;
06108                 osrlwriter = new OSrLWriter();
06109                 osrlreader = new OSrLReader();
06110                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06111                 //errorExample.osrl -- check to see if we read an error message correctly;
06112                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest8.osrl"; 
06113                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06114                 finish = clock();
06115                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06116                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06117                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06118                 osresult = osrlreader->readOSrL( osrl);
06119                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06120                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06121                 delete osrlreader;
06122                 osrlreader = NULL;
06123                 osrlreader = new OSrLReader();
06124                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06125                 osrlreader->readOSrL( tmpOSrL);
06126                 delete osrlwriter;
06127                 osrlwriter = NULL;
06128                 delete osrlreader;
06129                 osrlreader = NULL;
06130 
06131                 // ... and another
06132                 cout << endl << "parserTest9.osrl" << endl;
06133                 osrlwriter = new OSrLWriter();
06134                 osrlreader = new OSrLReader();
06135                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06136                 //errorExample.osrl -- check to see if we read an error message correctly;
06137                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest9.osrl"; 
06138                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06139                 finish = clock();
06140                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06141                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06142                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06143                 osresult = osrlreader->readOSrL( osrl);
06144                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06145                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06146                 delete osrlreader;
06147                 osrlreader = NULL;
06148                 osrlreader = new OSrLReader();
06149                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06150                 osrlreader->readOSrL( tmpOSrL);
06151                 delete osrlwriter;
06152                 osrlwriter = NULL;
06153                 delete osrlreader;
06154                 osrlreader = NULL;
06155 
06156 
06157                 // ... last file...
06158                 cout << endl << "parserTest10.osrl" << endl;
06159                 osrlwriter = new OSrLWriter();
06160                 osrlreader = new OSrLReader();
06161                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
06162                 //errorExample.osrl -- check to see if we read an error message correctly;
06163                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest10.osrl"; 
06164                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
06165                 finish = clock();
06166                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
06167                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
06168                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06169                 osresult = osrlreader->readOSrL( osrl);
06170                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
06171                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
06172                 delete osrlreader;
06173                 osrlreader = NULL;
06174                 osrlreader = new OSrLReader();
06175                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
06176                 osrlreader->readOSrL( tmpOSrL);
06177                 delete osrlwriter;
06178                 osrlwriter = NULL;
06179                 delete osrlreader;
06180                 osrlreader = NULL;
06181 */
06182 
06183                 unitTestResult << 
06184                      "TEST " << nOfTest << ": Successful test of OSrL parser on file parserTest.osrl" 
06185                       << std::endl;
06186                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06187         }       
06188         catch(const ErrorClass& eclass){
06189 
06190                 cout << endl << endl << endl;
06191                 if(osrlwriter != NULL) delete osrlwriter;
06192                 if(osrlreader != NULL) delete osrlreader;
06193                 // " Problem with the test reading OSrL data";
06194                 unitTestResultFailure << eclass.errormsg << endl;
06195                 unitTestResultFailure << "There was a failure in the test for reading OSrL" << endl;
06196         }
06197 
06198 }       // PARSER_TESTS
06199 
06200         delete fileUtil;
06201         fileUtil = NULL;
06202             
06203         if(unitTestResultFailure.str().length() > 0){
06204                 cout << endl << "THE UNIT TEST PASSED THE FOLLOWING:" << endl << endl;
06205                 cout << unitTestResult.str() << endl << endl;
06206                 cout << "UNFORTUNATELY, YOU FAILED ON THE FOLLOWING:" << endl << endl;
06207                 cout << unitTestResultFailure.str() << endl << endl;
06208                 cout << "Conclusion: FAILURE" << endl;
06209                 return 1;
06210         }
06211         else{
06212                 cout << endl << "THE UNIT TEST PASSED THE FOLLOWING:" << endl << endl;
06213                 cout << unitTestResult.str() << endl << endl;
06214                 cout << "All tests completed successfully" <<  endl <<  endl;
06215 #ifdef GUS_DEBUG
06216                 cout << "Make sure to #undef GUS_DEBUG before committing!!!" <<  endl <<  endl;
06217 #endif
06218                 return 0;
06219         }
06220 }//end main
06221 
06222 double getObjVal( std::string osrl){
06223         std::string sObjVal;
06224         double dObjVal;
06225         string::size_type pos2;
06226         string::size_type pos1 = osrl.find( "<obj ");
06227         if(pos1 != std::string::npos){
06228                 // get the end of the obj start tag
06229                 pos1 = osrl.find(">", pos1 + 1);
06230                 if(pos1 != std::string::npos){
06231                         // get the start of obj end tag
06232                         pos2 = osrl.find( "</obj", pos1 + 1);
06233                         if( pos2 != std::string::npos){
06234                                 // get the substring
06235                                 sObjVal = osrl.substr( pos1 + 1, pos2 - pos1 - 1);
06236                                 //std::cout << "HERE IS THE OBJECTIVE FUNCTION VALUE SUBSTRING  " << sObjVal<< std::endl; 
06237                                 // return dObjVal = strtod(sObjVal.c_str(), NULL);
06238                                 return dObjVal = os_strtod(sObjVal.c_str(), NULL); 
06239                         }
06240                         else return OSNAN;
06241                 }
06242                 else return OSNAN;
06243         }
06244         else return OSNAN;
06245 }

Generated on Fri Jan 7 03:24:44 2011 by  doxygen 1.4.7