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

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

Generated on Mon May 3 03:05:34 2010 by  doxygen 1.4.7