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

Go to the documentation of this file.
00001 /* $Id: unitTest.cpp 4210 2011-06-28 09:44:54Z stefan $ */
00121 #define DEBUG
00122 //#define GUS_DEBUG
00123 
00124 #include "OSConfig.h"
00125 #ifdef OS_HAS_CPPAD
00126 #include <cppad/cppad.hpp> 
00127 #endif
00128 //#include "CoinUtilsConfig.h"
00129 #include "OSCoinSolver.h"
00130 #include "OSmps2osil.h" 
00131 #include "OSResult.h" 
00132 #include "OSOption.h"
00133 #include "OSiLReader.h"        
00134 #include "OSiLWriter.h" 
00135 #include "OSoLReader.h"        
00136 #include "OSoLWriter.h" 
00137 #include "OSrLReader.h"          
00138 #include "OSrLWriter.h"      
00139 #include "OSInstance.h"  
00140 #include "OSFileUtil.h"  
00141 #include "CoinError.hpp"
00142 
00143 #include "OSDefaultSolver.h"  
00144 #include "OSWSUtil.h" 
00145 #include "OSSolverAgent.h"   
00146 #include "OShL.h"     
00147 #include "OSErrorClass.h"
00148 #include "OSBase64.h"
00149 #include "OSMathUtil.h"
00150 
00151 
00152 #include <CoinMpsIO.hpp>
00153 #include <CoinPackedMatrix.hpp>
00154 
00155 
00156 #include "CoinError.hpp"
00157 #include "CoinHelperFunctions.hpp"
00158 
00159 
00160 
00161 #ifdef COIN_HAS_GLPK
00162 #include <OsiGlpkSolverInterface.hpp>
00163 #endif
00164 
00165 #ifdef COIN_HAS_COUENNE    
00166 #include "OSCouenneSolver.h"
00167 #endif
00168 
00169 #ifdef COIN_HAS_ASL
00170 #include "OSnl2osil.h"
00171 #endif
00172 
00173 #ifdef COIN_HAS_LINDO    
00174 #include "OSLindoSolver.h"
00175 #endif  
00176 
00177 #ifdef COIN_HAS_IPOPT    
00178 #include "OSIpoptSolver.h"
00179 #endif 
00180 
00181 #ifdef COIN_HAS_BONMIN    
00182 #include "OSBonminSolver.h"
00183 #endif 
00184 
00185 #ifdef COIN_HAS_GAMSUTILS
00186 #include "OSgams2osil.hpp"
00187 #endif
00188 
00189 #ifdef HAVE_CTIME
00190 # include <ctime>
00191 #else
00192 # ifdef HAVE_TIME_H
00193 #  include <time.h>
00194 # else
00195 #  error "don't have header file for time"
00196 # endif
00197 #endif
00198 
00199 
00200 #ifdef HAVE_CMATH
00201 # include <cmath>
00202 #else
00203 # ifdef HAVE_CMATH_H
00204 #  include <cmath.h>
00205 # endif
00206 #endif
00207 
00208 
00209 
00210 #ifdef HAVE_CSTDIO
00211 # include <cstdio>
00212 #else
00213 # ifdef HAVE_STDIO_H
00214 #  include <stdio.h>
00215 # else
00216 #  error "don't have header file for stdio"
00217 # endif
00218 #endif
00219 
00220 //#ifdef HAVE_WINDOWS_H
00221 //#include <windows.h>
00222 //#endif
00223 
00224 using std::cout;   
00225 using std::endl;
00226 using std::ostringstream;
00227 using std::string;
00228 
00229 
00230 int main(int argC, char* argV[])
00231 {
00232 //#ifdef HAVE_WINDOWS_H
00233 //   SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
00234 //#endif 
00235         WindowsErrorPopupBlocker();
00236         double getObjVal(std::string osrl);
00237         void tempPrintArrays(OSResult* os); //  OSrl parser development only
00238         //using CppAD::NearEqual;
00239         bool ok;
00240         double check;
00241 
00242         
00243         bool BASIC_TESTS;  // minimal functionality tests
00244         bool SOLVER_TESTS; // at least one problem for each solver
00245         bool THOROUGH;     // multiple problems for some solvers
00246         bool PARSER_TESTS; // test parser logic
00247         bool OTHER_TESTS;  // other input formats, b64 conversion, etc.
00248         
00249         //set level of testing
00250       
00251         std::string testConfig = "install";
00252         int testLevel = 1;
00253         if( argC > 2){
00254                 std::cout << "Too Many Input Parameters" << std::endl;
00255                 return 1;
00256         }
00257         if(argC == 2){
00258                 testConfig = argV[ 1];
00259                 std::cout << "test configuration = \'" <<  testConfig << "\'"<< std::endl;
00260         }
00261 
00262 #ifdef GUS_DEBUG
00263         testConfig = "parser";
00264 #endif
00265 
00266         if (testConfig == "install") testLevel = 1;
00267         if (testConfig == "parser" ) testLevel = 2;
00268         if (testConfig == "parsers") testLevel = 2;
00269         if (testConfig == "solver" ) testLevel = 3;
00270         if (testConfig == "solvers") testLevel = 3;
00271         if (testConfig == "release") testLevel = 4;
00272         if (testConfig == "nightlyBuild") testLevel = 4;
00273         if (testConfig == "all") testLevel = 4;
00274         if (testConfig == "NB") testLevel = 4;
00275         if (testConfig == "nb") testLevel = 4;
00276 
00277         switch (testLevel){
00278         case 1:
00279                 BASIC_TESTS  = true;  
00280                 SOLVER_TESTS = true; 
00281                 THOROUGH     = false;     
00282                 PARSER_TESTS = false; 
00283                 OTHER_TESTS  = false;  
00284                 break;
00285         case 2:
00286                 BASIC_TESTS  = false;  
00287                 SOLVER_TESTS = false; 
00288                 THOROUGH     = false;     
00289                 PARSER_TESTS = true; 
00290                 OTHER_TESTS  = false;  
00291                 break;
00292         case 3:
00293                 BASIC_TESTS  = false;  
00294                 SOLVER_TESTS = true; 
00295                 THOROUGH     = true;     
00296                 PARSER_TESTS = false; 
00297                 OTHER_TESTS  = false;  
00298                 break;
00299         case 4:
00300         default:
00301                 BASIC_TESTS  = true;  
00302                 SOLVER_TESTS = true; 
00303                 THOROUGH     = true;     
00304                 PARSER_TESTS = true; 
00305                 OTHER_TESTS  = true;  
00306                 break;
00307         }
00308         
00309         if (BASIC_TESTS) std::cout << "Perform basic tests" << std::endl;
00310         if (SOLVER_TESTS) {
00311                 if (THOROUGH)
00312                         std::cout << "Perform thorough solver tests" << std::endl;
00313                 else
00314                         std::cout << "Perform simple solver tests" << std::endl;
00315         }
00316         if (PARSER_TESTS) std::cout << "Perform parser tests" << std::endl;
00317         if (OTHER_TESTS) std::cout << "Perform other tests" << std::endl;
00318         std::cout << std::endl << std::endl;
00319 
00320         // end level of testing 
00321         
00322         cout << "START UNIT TEST" << endl;
00323         int nOfTest = 0;
00324         // define the classes
00325         FileUtil *fileUtil = NULL;  
00326 #ifdef COIN_HAS_ASL
00327         OSnl2osil *nl2osil = NULL;
00328 #endif 
00329         OSmps2osil *mps2osil = NULL;
00330         DefaultSolver *solver  = NULL;
00331         OSiLReader *osilreader = NULL;
00332         OSiLWriter *osilwriter = NULL;
00333         OSoLReader *osolreader = NULL;
00334         OSoLReader *osolreader2 = NULL;
00335         OSrLReader *osrlreader = NULL;
00336         OSrLWriter *osrlwriter = NULL;
00337         OSInstance *osinstance = NULL;
00338         OSOption *osoption = NULL;
00339         OSOption *osoption2 = NULL;
00340         OSOption *osoption3 = NULL;
00341 
00342         //common arrays
00343         std::string *nodeNames1 = NULL;
00344         std::string *nodeNames2 = NULL;
00345         double *x = NULL;
00346 
00347         //other common variables
00348         std::string osilFileName;
00349         std::string osolFileName;
00350         std::string osrlFileName;
00351         std::string nlFileName; 
00352         std::string mpsFileName;     
00353         std::string osil;
00354         std::string osol; 
00355         ostringstream unitTestResult;
00356         ostringstream unitTestResultFailure;
00357 
00358         // get the input files
00359          const char dirsep =  CoinFindDirSeparator();
00360         // Set directory containing data files.
00361         std::string dataDir;
00362     dataDir = dirsep == '/' ? "../data/" : "..\\data\\";
00363 #ifdef GUS_DEBUG
00364         dataDir = "C:\\datafiles\\research\\OS\\OS-trunk-work\\OS\\data\\";
00365 #endif
00366 
00367         fileUtil = new FileUtil();
00368 
00369 
00370 if(BASIC_TESTS == true){
00371 
00372         //first make sure we can read files
00373         try{
00374                 std::cout << endl << "TEST " << ++nOfTest << ": Try to read a sample file" << endl << endl;
00375                 osilFileName =  dataDir  + "osilFiles" + dirsep +  "parincLinearByRow.osil";
00376                 //osilFileName =  dataDir  + "osilFiles" + dirsep +  "parincLinear.osil";
00377                 std::cout << "The file is: " ;
00378                 std::cout <<  osilFileName << std::endl;
00379                 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00380                 std::cout << "Done reading the test file" << std::endl;
00381                 osilreader = new OSiLReader(); 
00382                 osinstance = osilreader->readOSiL( osil);
00383                 //osinstance->initForAlgDiff();
00384                 unitTestResult << "TEST " << nOfTest << ": Reading files successfully" << std::endl;
00385                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00386                 osilwriter = new OSiLWriter();
00387                 osilwriter->m_bWhiteSpace = true;
00388                 std::cout << osilwriter->writeOSiL( osinstance) << std::endl;
00389                 delete osilreader;
00390                 osilreader = NULL;
00391                 delete osilwriter;
00392                 osilwriter = NULL;
00393         }
00394         catch(const ErrorClass& eclass){
00395                 unitTestResultFailure << "Sorry Unit Test Failed Reading a file: "  + eclass.errormsg<< endl; 
00396                 //no point continuing -- we can't even read a file
00397                 unitTestResultFailure << "Since we can't read files we are terminating"  << endl; 
00398                 cout << unitTestResultFailure.str() << endl << endl;
00399                 cout << "Conclusion: FAILURE" << endl;
00400                 if (osilreader != NULL)
00401                 {
00402                         delete osilreader;
00403                         osilreader = NULL;
00404                 }
00405                 if (osilwriter != NULL)
00406                 {
00407                         delete osilwriter;
00408                         osilwriter = NULL;
00409                 }
00410                 return 1;
00411         }       
00412                 
00413 // Make sure we can read and write without loss of precision
00414         try{
00415                 cout << endl << "TEST " << ++nOfTest << ": Lossless I/O" << endl << endl;
00416                 osilwriter = new OSiLWriter();
00417                 osilreader = new OSiLReader();
00418                 //mpsFileName =  dataDir + "mpsFiles" + dirsep + "testfile2.mps";
00419                 mpsFileName =  dataDir + "mpsFiles" + dirsep + "parinc.mps";
00420                 mps2osil = new OSmps2osil( mpsFileName);
00421                 // create the first in-memory OSInstance
00422                 mps2osil->createOSInstance() ;
00423                 // write the instance to a string
00424                 OSInstance *osinstance1 = mps2osil->osinstance;
00425                 std::string sOSiL = osilwriter->writeOSiL( osinstance1  );
00426 #ifdef DEBUG
00427                 cout << sOSiL << endl;
00428 #endif
00430                 // now create a second object
00431                 OSInstance *osinstance2 = osilreader->readOSiL( sOSiL);
00432                 // now compare the elements in the A matrix for the two instances
00433                 int nvals = osinstance1->instanceData->linearConstraintCoefficients->numberOfValues;
00434                 double theDiff, theMax;
00435                 int theIndex = -1;
00436                 theMax = 0;
00437                 for(int i = 0; i < nvals; i++){
00438                         theDiff = fabs(osinstance1->instanceData->linearConstraintCoefficients->value->el[ i] -
00439                                 osinstance2->instanceData->linearConstraintCoefficients->value->el[ i])/ fabs(osinstance1->instanceData->linearConstraintCoefficients->value->el[ i]);
00440                         if(theDiff > theMax){
00441                                 theMax = theDiff;
00442                                 theIndex = i;
00443                         }
00444                         //std::cout << theDiff << std::endl;
00445                 }
00446                 std::cout << "MAXIMUM DIFF = " << theMax << std::endl;
00447                 if(theMax > 0) 
00448                 {
00449                         std::cout << "MAXIMUM DIFF INDEX  = " << theIndex << std::endl;
00450                         unitTestResult << "WARNING:  you do not have lossless IO" << std::endl;
00451                 }
00452                 else 
00453                 {
00454                         unitTestResult << "TEST " << nOfTest << ": Passed lossless IO test" << std::endl;
00455                         cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00456                 }
00457                 delete mps2osil;
00458                 mps2osil = NULL;
00459                 delete osilreader;
00460                 osilreader = NULL;
00461                 delete osilwriter;
00462                 osilwriter = NULL;
00463 
00464         }
00465         catch(const ErrorClass& eclass){
00466                 unitTestResultFailure << "Unit Test Failed Lossless I/O test: "  + eclass.errormsg<< endl; 
00467                 if (mps2osil != NULL)
00468                         delete mps2osil;
00469                 mps2osil = NULL;
00470                 if (osilreader != NULL)
00471                         delete osilreader;
00472                 osilreader = NULL;
00473                 if (osilwriter != NULL)
00474                         delete osilwriter;
00475                 osilwriter = NULL;
00476         }       
00477 
00478 
00479         // now test the nonlinear operators     
00480         try{
00481                 cout << endl << "TEST " << ++nOfTest << ": nonlinear operators" << endl << endl;
00482                 ok = true;
00483                 std::string operatorTest =  dataDir  + "osilFiles" + dirsep + "testOperators.osil";
00484                 osil = fileUtil->getFileAsString( operatorTest.c_str() );
00485                 OSInstance *osinstance = NULL;
00486                 //osinstance = new OSInstance();
00487                 OSiLReader *osilreader = NULL;
00488                 osilreader = new OSiLReader();
00489                 OSiLWriter *osilwriter = NULL;
00490                 osilwriter = new OSiLWriter();
00491 //              cout << "Read testOperators.osil...";
00492                 osinstance = osilreader->readOSiL( osil);
00493                 
00494                 cout << "Done" << endl;
00495                 OSExpressionTree* expTree = osinstance->getNonlinearExpressionTree( -1);
00496                 std::vector<OSnLNode*> postfixVec;
00497                 postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
00498                 int n = postfixVec.size();
00499                 nodeNames1 = new std::string[ n];
00500                 for (int i = 0 ; i < n; i++){
00501                 //      std::cout << postfixVec[i]->getTokenName() << std::endl;
00502                         nodeNames1[i] = postfixVec[i]->getTokenName();
00503                 }
00504 //              std::cout << std::endl << std::endl;
00505 //              std::cout << osilwriter->writeOSiL( osinstance) << std::endl;
00506                 // now test value
00507                 x = new double[2];
00508                 x[0] = 1;
00509                 x[1] = 2;
00510 //              double parserTestVal = expTree->m_treeRoot->calculateFunction( x);
00511 //              std::cout << "ParserTest Val = " << parserTestVal << std::endl;
00512                 check = 11;
00513                 //ok &= NearEqual(expTree->m_treeRoot->calculateFunction( x) , check,  1e-10 , 1e-10);
00514                 ok = ( fabs(check -  expTree->m_treeRoot->calculateFunction( x))/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00515                 delete[] x;
00516                 delete[] nodeNames1;
00517                 delete osilreader;
00518                 osilreader = NULL;
00519                 delete osilwriter;
00520                 osilwriter = NULL;
00521                 osinstance = NULL;
00522 
00523                 if (ok == false) throw ErrorClass(" Problem evaluating expression tree");
00524                 unitTestResult << "TEST " << nOfTest << ": Successful test of nonlinear operators using file testOperators.osil" << std::endl;
00525                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00526         }
00527         catch(const ErrorClass& eclass){
00528                 cout << endl << endl << endl;
00529                 unitTestResultFailure << eclass.errormsg << endl;
00530                 if (x != NULL)
00531                         delete[] x;
00532                 if (nodeNames1 != NULL)
00533                         delete[] nodeNames1;
00534                 if (osilreader != NULL)
00535                         delete osilreader;
00536                 osilreader = NULL;
00537                 if (osilwriter != NULL)
00538                         delete osilwriter;
00539                 osilwriter = NULL;
00540         }
00541 
00542         
00543         // Automatic differentiation
00544         try{
00545                 cout << endl << "TEST " << ++nOfTest << ": Automatic differentiation" << endl << endl;
00546 //              std::cout << std::endl << std::endl;
00547 //              std::cout << "Testing AD Features " << std::endl;
00548                 std::string expTreeTest =  dataDir  + "osilFiles" + dirsep + "CppADTestLag.osil";
00549                 /*
00550                 min x0^2 + 9*x1   -- w[0]
00551                 s.t. 
00552                 33 - 105 + 1.37*x1 + 2*x3 + 5*x1 <= 10  -- y[0]
00553                 ln(x0*x3)  + 7*x2 >= 10  -- y[1]
00554                 Note: in the first constraint 33 is a constant term and 105 
00555                 is part of the nl node
00556                 */
00557                 osil = fileUtil->getFileAsString( expTreeTest.c_str() );
00558                 OSInstance *osinstance = NULL;
00559                 //osinstance = new OSInstance();
00560                 OSiLReader *osilreader = NULL;
00561                 osilreader = new OSiLReader();
00562                 //create an osinstance
00563                 osinstance = osilreader->readOSiL( osil);
00564                 double *x;
00565                 x = new double[ 4];
00566                 x[0] = 1;
00567                 x[1] = 5;
00568                 x[2] = 10;
00569                 x[3] = 5;
00570                 SparseVector *sp;
00571                 // get the gradient for constraint 1
00572                 osinstance->getJacobianSparsityPattern();
00573                 sp = osinstance->calculateConstraintFunctionGradient(x, 1, true);
00574 //              for(int i = 0; i < sp->number; i++){
00575 //                      std::cout << "gradient value " << sp->values[i] << std::endl;
00576 //              }
00577                 ok = true;
00578                 //check gradient for constraint with index 1
00579                 double checkPartial2Con1 = 7.0 ;
00580                 //ok &= NearEqual( sp->values[ 0], checkPartial2Con1, 1e-10, 1e-10); 
00581                 ok = ( fabs(checkPartial2Con1 - sp->values[ 0] )/(fabs( checkPartial2Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00582                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
00583                 double checkPartial0Con1 = (1./x[0])  ;
00584                 //ok &= NearEqual(sp->values[ 1], checkPartial0Con1, 1e-10, 1e-10); 
00585                 ok = ( fabs(checkPartial0Con1 - sp->values[ 1] )/(fabs( checkPartial0Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00586                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
00587                 double checkPartial3Con1 = (1./x[3]) ;
00588                 //ok &= NearEqual( sp->values[ 2], checkPartial3Con1, 1e-10, 1e-10); 
00589                 ok = ( fabs(checkPartial3Con1 - sp->values[ 2] )/(fabs( checkPartial3Con1) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00590                 if(ok == false) throw ErrorClass(" Fail testing gradient calculation");
00591                 delete sp;
00592                 sp = NULL;
00593                 SparseHessianMatrix *sh;
00594                 // calcuate Hessian of objective function (index = -1)
00595                 osinstance->getLagrangianHessianSparsityPattern( );
00596                 sh = osinstance->calculateHessian(x, -1, true);
00597 //              for(int i = 0; i < sh->hessDimension; i++){
00598 //                      std::cout << "Hessian value " << sh->hessValues[i] << std::endl;
00599 //              }
00600                 //ok &= NearEqual( sh->hessValues[ 0], 2., 1e-10, 1e-10);
00601                 ok = ( fabs(2. - sh->hessValues[0] )/(2. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00602                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation"); 
00603                 //ok &= NearEqual( sh->hessValues[ 1], 0., 1e-10, 1e-10);
00604                 ok = ( fabs(0. - sh->hessValues[ 1] )/(0. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00605                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation");
00606                 //ok &= NearEqual( sh->hessValues[ 2], 0., 1e-10, 1e-10);
00607                 ok = ( fabs(0. - sh->hessValues[2] )/(0. + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
00608                 if(ok == false) throw ErrorClass(" Fail testing Hessian calculation");
00609                 delete[] x;
00610                 delete osilreader;
00611                 osilreader = NULL;
00612                 unitTestResult << "TEST " << nOfTest << ": Successful test of AD gradient and Hessian calculations" << std::endl;
00613                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00614         }       
00615         catch(const ErrorClass& eclass){
00616                 cout << endl << endl << endl;
00617                 unitTestResultFailure << eclass.errormsg << endl;
00618                 if (x != NULL)
00619                         delete[] x;
00620                 if (osilreader != NULL)
00621                 delete osilreader;
00622                 osilreader = NULL;
00623         }
00624 } // end of if (BASIC_TESTS)
00625 
00626 
00627         //
00628         // Now test the parsers --- OSiL parser first
00629 if (PARSER_TESTS){
00630 
00631 //#if 0   //!!!  OSrL parser development
00632         try{ 
00633                 cout << endl << "TEST " << ++nOfTest << ": Test parsing an OSiL file (parincLinear.osil)" << endl << endl;
00634                 clock_t start, finish;
00635                 double duration;
00636                 osilwriter = new OSiLWriter();
00637                 //delete fileUtil;
00638                 //fileUtil = NULL;
00639                 //fileUtil = new FileUtil();
00640                 cout << "Test parsing a model" << endl;
00641                 cout << "First read the file into a string" << endl;
00642                 start = clock();
00643                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
00644                 osil = fileUtil->getFileAsString( osilFileName.c_str());
00645                 finish = clock();
00646                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
00647                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
00648                 OSiLReader *osilreader = NULL;
00649                 osilreader = new OSiLReader(); 
00650                 start = clock();
00651                 cout << "PARSE THE OSIL STRING INTO AN OSINSTANCE OBJECT" << endl;
00652                 osilreader->readOSiL( osil);
00653                 //cout << osilwriter->writeOSiL( osilreader->readOSiL( osil)) << endl;
00654                 delete osilreader;
00655                 osilreader = NULL;
00656                 delete osilwriter;
00657                 osilwriter = NULL;
00658                 finish = clock();
00659                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
00660                 cout << "Parsing took (seconds): "<< duration << endl;
00661                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSiL parser on problem parincLinear.osil" << std::endl;
00662                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00663         }       
00664         catch(const ErrorClass& eclass){
00665                 cout << endl << endl << endl;
00666                 cout << eclass.errormsg << endl;
00667                 unitTestResultFailure << "Sorry Unit Test Failed Testing An OSiL Parser" << endl;
00668 
00669                 if (osilreader != NULL)
00670                         delete osilreader;
00671                 osilreader = NULL;
00672                 if (osilwriter != NULL)
00673                         delete osilwriter;
00674                 osilwriter = NULL;
00675         }       
00676 
00677 #if 0
00678         //
00679         // Now test the extensions to the OSiL format: <timeDomain>, etc.
00680 
00681         // some pointer declarations
00682         std::string *sncheck = new std::string[6];
00683         int *nvcheck = new int[6];
00684         int *nccheck = new int[6];
00685         int *nocheck = new int[6];
00686         int **lvcheck = new int*[6];
00687         int **lccheck = new int*[6];
00688         int **locheck = new int*[6];
00689         std::string *sn1 = new std::string[6];
00690         int *nv1= new int[6];
00691         int *nc1 = new int[6];
00692         int *no1 = new int[6];
00693         int **lv1 = new int*[6];
00694         int **lc1 = new int*[6];
00695         int **lo1 = new int*[6];
00696         int *nelem = new int[4];
00697         int *startIdx = new int[4];
00698         int **VI = new int*[4];
00699 
00700         try{ 
00701                 cout << endl << "TEST " << ++nOfTest << ": Stochastic extensions to OSiL" << endl << endl;
00702                 clock_t start, finish;
00703                 double duration;
00704                 OSiLWriter *osilwriter = NULL;
00705                 osilwriter = new OSiLWriter();
00706                 //delete fileUtil;
00707                 //fileUtil = NULL;
00708                 //fileUtil = new FileUtil();
00709                 cout << "\nTest parsing a stochastic model" << endl;
00710                 cout << "First read the file into a string" << endl;
00711                 start = clock();
00712                 osilFileName = dataDir  + "osilFiles" + dirsep + "finplan1.osil";
00713                 osil = fileUtil->getFileAsString( &osilFileName[0]);
00714                 finish = clock();
00715                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
00716                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
00717                 OSiLReader *osilreader = NULL;
00718                 osilreader = new OSiLReader(); 
00719                 start = clock();
00720                 cout << "PARSE THE OSIL STRING INTO AN OSINSTANCE OBJECT" << endl;
00721                 osilreader->readOSiL( osil);
00722                 //cout << osilwriter->writeOSiL( osilreader->readOSiL( &osil)) << endl;
00723                 delete osilreader;
00724                 osilreader = NULL;
00725                 delete osilwriter;
00726                 osilwriter = NULL;
00727                 finish = clock();
00728                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
00729                 cout << "Parsing took (seconds): "<< duration << endl;
00730                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSiL parser on problem finplan1.osil" << std::endl;
00731                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
00732         }       
00733         catch(const ErrorClass& eclass){
00734                 cout << endl << endl << endl;
00735                 cout << eclass.errormsg << endl;
00736                 unitTestResultFailure << "Error parsing an osil file with time domain information" << endl;             
00737 
00738                 if (osilreader != NULL)
00739                         delete osilreader;
00740                 osilreader = NULL;
00741                 if (osilwriter != NULL)
00742                         delete osilwriter;
00743                 osilwriter = NULL;
00744         }       
00748         try{ 
00749                 cout << endl << "TEST " << ++nOfTest << ": GET() AND SET() METHODS FOR TimeDomain OBJECT" << endl << endl;
00750                 OSInstance *osinstance = NULL;
00751                 //osinstance = new OSInstance();
00752                 //OSiLReader *osilreader = NULL;
00753                 osilreader = new OSiLReader();
00754                 //create an osinstance
00755                 osinstance = osilreader->readOSiL( osil);
00756                 std::string f = osinstance->getTimeDomainFormat();
00757                 ok = (f == "stages");
00758                 int n = osinstance->getTimeDomainStageNumber();
00759                 ok &= (n == 6);
00760 
00761                 sncheck[0] = "";
00762                 sncheck[1] = "";
00763                 sncheck[2] = "";
00764                 sncheck[3] = "test";
00765                 sncheck[4] = "Wha'zzup?";
00766                 sncheck[5] = "";
00767 
00768                 std::string* sn = osinstance->getTimeDomainStageNames();
00769 
00770                 for (int i = 0; i < 6; i++)
00771                         ok &= (sn[i] == sncheck[i]);
00772 
00773                 int* nv = osinstance->getTimeDomainStageNumberOfVariables();
00774 
00775                 nvcheck[0] = 2;
00776                 nvcheck[1] = 2;
00777                 nvcheck[2] = 0;
00778                 nvcheck[3] = 0;
00779                 nvcheck[4] = 2;
00780                 nvcheck[5] = 2;
00781 
00782                 for (int i = 0; i < 6; i++)
00783                         ok &= (nv[i] == nvcheck[i]);
00784 
00785                 int* nc = osinstance->getTimeDomainStageNumberOfConstraints();
00786 
00787                 nccheck[0] = 1;
00788                 nccheck[1] = 1;
00789                 nccheck[2] = 0;
00790                 nccheck[3] = 0;
00791                 nccheck[4] = 1;
00792                 nccheck[5] = 1;
00793 
00794                 for (int i = 0; i < 6; i++)
00795                         ok &= (nc[i] == nccheck[i]);
00796 
00797                 int* no = osinstance->getTimeDomainStageNumberOfObjectives();
00798 
00799                 nocheck[0] = 1;
00800                 nocheck[1] = 1;
00801                 nocheck[2] = 1;
00802                 nocheck[3] = 0;
00803                 nocheck[4] = 1;
00804                 nocheck[5] = 1;
00805 
00806                 for (int i = 0; i < 6; i++)
00807                         ok &= (no[i] == nocheck[i]);
00808 
00809                 int** lv = osinstance->getTimeDomainStageVarList();
00810                 int** lc = osinstance->getTimeDomainStageConList();
00811                 int** lo = osinstance->getTimeDomainStageObjList();
00812 
00813                 for (int i = 0; i < 6; i++)
00814                 {
00815                         lvcheck[i] = new int[2];
00816                         lccheck[i] = new int[2];
00817                         locheck[i] = new int[2];
00818                 };
00819                 lvcheck[0][0] = 0;
00820                 lvcheck[0][1] = 1;
00821                 lvcheck[1][0] = 2;
00822                 lvcheck[1][1] = 3;
00823                 lvcheck[4][0] = 4;
00824                 lvcheck[4][1] = 5;
00825                 lvcheck[5][0] = 6;
00826                 lvcheck[5][1] = 7;
00827                 lccheck[0][0] = 0;
00828                 lccheck[1][0] = 1;
00829                 lccheck[4][0] = 2;
00830                 lccheck[5][0] = 3;
00831                 locheck[0][0] = -1;
00832                 locheck[1][0] = -1;
00833                 locheck[2][0] = -1;
00834                 locheck[4][0] = -1;
00835                 locheck[5][0] = -1;
00836 
00837                 for (int i = 0; i < 6; i++) {
00838                         for (int j = 0; j < nv[i]; j++) 
00839                                 ok &= (lvcheck[i][j] == lv[i][j]);
00840                         for (int j = 0; j < nc[i]; j++) 
00841                                 ok &= (lccheck[i][j] == lc[i][j]);
00842                         for (int j = 0; j < no[i]; j++) 
00843                                 ok &= (locheck[i][j] == lo[i][j]);
00844                 };
00845 
00846 
00847                 for (int i = 0; i < 6; i++) {
00848                         sn1[i] = sn[i];
00849                         nv1[i] = nv[i];
00850                         nc1[i] = nc[i];
00851                         no1[i] = no[i];
00852                         lv1[i] = new int[2];
00853                         lc1[i] = new int[2];
00854                         lo1[i] = new int[2];
00855                         for (int j = 0; j < nv[i]; j++) {
00856                                 lv1[i][j] = lv[i][j];
00857                         };
00858                         for (int j = 0; j < nc[i]; j++) {
00859                                 lc1[i][j] = lc[i][j];
00860                         };
00861                         for (int j = 0; j < no[i]; j++) {
00862                                 lo1[i][j] = lo[i][j];
00863                         };
00864                 };
00865 
00866                 ok &= osinstance->setTimeDomain("none");
00867                 n = 0;
00868                 ok &= osinstance->setTimeDomainStages(n,NULL);
00869                 ok &= osinstance->setTimeDomainStages(4,NULL);
00870 
00871                 n = osinstance->getTimeDomainStageNumber();
00872                 ok &= (n == 4);
00873 
00874                 for (int i = 0; i < 4; i++)
00875                 {       nelem[i] = 2;
00876                         startIdx[i] = 2*i;
00877                         VI[i] = new int[2];
00878                         VI[i][0] = 2*i;
00879                         VI[i][1] = 2*i + 1;
00880                 };
00881                 ok &= osinstance->setTimeDomainStageVariablesUnordered(4,nelem,VI);
00882 
00883                 for (int i = 0; i < 4; i++)
00884                 {       nelem[i] = 1;
00885                         startIdx[i] = i;
00886                 };
00887                 ok &= osinstance->setTimeDomainStageConstraintsOrdered(4,nelem,startIdx);
00888 
00889                 for (int i = 0; i < 4; i++)
00890                 {       nelem[i] = 1;
00891                         startIdx[i] = -1;
00892                 };
00893                 ok &= osinstance->setTimeDomainStageObjectivesOrdered(4,nelem,startIdx);
00894 
00895                 ok &= osinstance->setTimeDomain("none");
00896 
00897                 ok &= osinstance->setTimeDomain("interval");
00898 
00899                 ok &= osinstance->setTimeDomainInterval(0.0, 1.0);
00900                 double lower = osinstance->getTimeDomainIntervalStart();
00901                 ok &= (lower == 0.0);
00902                 double upper = osinstance->getTimeDomainIntervalHorizon();
00903                 ok &= (upper == 1.0);
00904 
00905                 ok &= osinstance->setTimeDomain("none");
00906 
00907                 ok &= osinstance->setTimeDomainStages(6,sncheck);
00908                 ok &= osinstance->setTimeDomainStageVariablesUnordered(6,nvcheck,lvcheck);
00909                 ok &= osinstance->setTimeDomainStageObjectivesUnordered(6,nocheck,locheck);
00910                 ok &= osinstance->setTimeDomainStageConstraintsUnordered(6,nccheck,lccheck);
00911                 int n2 = osinstance->getTimeDomainStageNumber();
00912                 ok &= (n2 == 6);
00913                 std::string* sn2 = osinstance->getTimeDomainStageNames();
00914                 int* nv2 = osinstance->getTimeDomainStageNumberOfVariables();
00915                 int* nc2 = osinstance->getTimeDomainStageNumberOfConstraints();
00916                 int* no2 = osinstance->getTimeDomainStageNumberOfObjectives();
00917                 int** lv2 = osinstance->getTimeDomainStageVarList();
00918                 int** lc2 = osinstance->getTimeDomainStageConList();
00919                 int** lo2 = osinstance->getTimeDomainStageObjList();
00920                 for (int i = 0; i < n2; i++)
00921                 {       ok &= (sn2[i] == sncheck[i]);
00922                         ok &= (nv2[i] == nvcheck[i]);
00923                         ok &= (nc2[i] == nccheck[i]);
00924                         ok &= (no2[i] == nocheck[i]);
00925                         for (int j = 0; j < nv2[i]; j++)
00926                                 ok &= (lv2[i][j] == lvcheck[i][j]);
00927                         for (int j = 0; j < nc2[i]; j++)
00928                                 ok &= (lc2[i][j] == lccheck[i][j]);
00929                         for (int j = 0; j < no2[i]; j++)
00930                                 ok &= (lo2[i][j] == locheck[i][j]);
00931                 };
00932                 // Garbage Collection
00933                 if (sncheck != NULL)
00934                         delete [] sncheck;
00935                 sncheck = NULL;
00936                 if (nvcheck != NULL)
00937                         delete [] nvcheck;
00938                 nvcheck = NULL;
00939                 if (nccheck != NULL)
00940                         delete [] nccheck;
00941                 nccheck = NULL;
00942                 if (nocheck != NULL)
00943                         delete [] nocheck;
00944                 nocheck = NULL;
00945         
00946                 for (int i = 0; i < 6; i++) {
00947                         if (lvcheck[i] != NULL)
00948                                 delete [] lvcheck[i];
00949                         if (lccheck[i] != NULL)
00950                                 delete [] lccheck[i];
00951                         if (locheck[i] != NULL)
00952                                 delete [] locheck[i];
00953                         if (lv1[i] != NULL)
00954                                 delete [] lv1[i];
00955                         if (lc1[i] != NULL)
00956                                 delete [] lc1[i];
00957                         if (lo1[i] != NULL)
00958                                 delete [] lo1[i];
00959                         };
00960                 if (lvcheck != NULL)
00961                         delete [] lvcheck;
00962                 lvcheck = NULL;
00963                 if (lccheck != NULL)
00964                         delete [] lccheck;
00965                 lccheck = NULL;
00966                 if (locheck != NULL)
00967                         delete [] locheck;
00968                 locheck = NULL;
00969                 if (lv1 != NULL)
00970                         delete [] lv1;
00971                 lv1 = NULL;
00972                 if (lc1 != NULL)
00973                         delete [] lc1;
00974                 lc1 = NULL;
00975                 if (lo1 != NULL)
00976                         delete [] lo1;
00977                 lo1 = NULL;
00978                 if (sn1 != NULL)
00979                         delete [] sn1;
00980                 sn1 = NULL;
00981                 if (nv1 != NULL)
00982                         delete[] nv1;
00983                 nv1 = NULL;
00984                 if (nc1 != NULL)
00985                         delete[] nc1;
00986                 nc1 = NULL;
00987                 if (no1 != NULL)
00988                         delete[] no1;
00989                 no1 = NULL;
00990                 if (nelem != NULL)
00991                         delete [] nelem;
00992                 nelem = NULL;
00993                 if (startIdx != NULL)
00994                         delete [] startIdx;
00995                 startIdx = NULL;
00996                 if (VI != NULL)
00997                 {
00998                         for (int i = 0; i < 4; i++) {
00999                                 if (VI[i] != NULL)
01000                                         delete [] VI[i];
01001                         };
01002                         delete [] VI;
01003                         VI = NULL;
01004                 }       
01005 
01006                 if (osilreader != NULL)
01007                         delete osilreader;
01008                 osilreader = NULL;
01009                 unitTestResult << "TEST " << nOfTest << ": Successful test of osinstance get() and set() methods" << std::endl;
01010                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01011         }       
01012         catch(const ErrorClass& eclass){
01013                 cout << endl << endl << endl;
01014                 cout << eclass.errormsg << endl;
01015                 unitTestResultFailure << "Sorry Unit Test Failed osinstance get() and set() Methods" << endl;           
01016                 // Garbage Collection
01017                 if (sncheck != NULL)
01018                         delete [] sncheck;
01019                 sncheck = NULL;
01020                 if (nvcheck != NULL)
01021                         delete [] nvcheck;
01022                 nvcheck = NULL;
01023                 if (nccheck != NULL)
01024                         delete [] nccheck;
01025                 nccheck = NULL;
01026                 if (nocheck != NULL)
01027                         delete [] nocheck;
01028                 nocheck = NULL;
01029 
01030                 for (int i = 0; i < 6; i++) {
01031                         if (lvcheck[i] != NULL)
01032                                 delete [] lvcheck[i];
01033                         if (lccheck[i] != NULL)
01034                                 delete [] lccheck[i];
01035                         if (locheck[i] != NULL)
01036                                 delete [] locheck[i];
01037                         if (lv1[i] != NULL)
01038                                 delete [] lv1[i];
01039                         if (lc1[i] != NULL)
01040                                 delete [] lc1[i];
01041                         if (lo1[i] != NULL)
01042                                 delete [] lo1[i];
01043                         };
01044                 if (lvcheck != NULL)
01045                         delete [] lvcheck;
01046                 lvcheck = NULL;
01047                 if (lccheck != NULL)
01048                         delete [] lccheck;
01049                 lccheck = NULL;
01050                 if (locheck != NULL)
01051                         delete [] locheck;
01052                 locheck = NULL;
01053                 if (lv1 != NULL)
01054                         delete [] lv1;
01055                 lv1 = NULL;
01056                 if (lc1 != NULL)
01057                         delete [] lc1;
01058                 lc1 = NULL;
01059                 if (lo1 != NULL)
01060                         delete [] lo1;
01061                 lo1 = NULL;
01062                 if (sn1 != NULL)
01063                         delete [] sn1;
01064                 sn1 = NULL;
01065                 if (nv1 != NULL)
01066                         delete[] nv1;
01067                 nv1 = NULL;
01068                 if (nc1 != NULL)
01069                         delete[] nc1;
01070                 nc1 = NULL;
01071                 if (no1 != NULL)
01072                         delete[] no1;
01073                 no1 = NULL;
01074                 if (nelem != NULL)
01075                         delete [] nelem;
01076                 nelem = NULL;
01077                 if (startIdx != NULL)
01078                         delete [] startIdx;
01079                 startIdx = NULL;
01080                 if (VI != NULL)
01081                 {
01082                         for (int i = 0; i < 4; i++) {
01083                                 if (VI[i] != NULL)
01084                                         delete [] VI[i];
01085                         };
01086                         delete [] VI;
01087                         VI = NULL;
01088                 }       
01089 
01090                 if (osilreader != NULL)
01091                         delete osilreader;
01092                 osilreader = NULL;
01093         }       
01094 #endif // test of <timeDomain> and various set() and get) methods
01095 
01096         //
01097         // Now test the OSoL parser
01098         OSoLWriter *osolwriter = NULL;
01099 //      OSoLReader *osolreader = NULL;
01100         //osolwriter = new OSoLWriter();
01101         //osolreader = new OSoLReader();
01102 
01103         try{ 
01117                 cout << endl << "TEST " << ++nOfTest << ": OSoL parser" << endl << endl;
01118                 std::string tmpOSoL;
01119                 clock_t start, finish;
01120                 double duration;
01121                 osolwriter = new OSoLWriter();
01122                 osolreader = new OSoLReader();
01123                 //osoption = new OSOption(); 
01124                 cout << "Test parsing an OSoL file" << endl;
01125                 cout << "First read the OSoL file into a string" << endl;
01126                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest.osol"; 
01127                 cout << osolFileName << endl;
01128                 start = clock();
01129                 std::string osol = fileUtil->getFileAsString( osolFileName.c_str() );
01130                 finish = clock();
01131                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
01132                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
01133                 start = clock();
01134                 cout << "PARSE THE OSOL STRING INTO AN OSOPTION OBJECT" << endl;
01135                 osoption = osolreader->readOSoL( osol);
01136 
01137                 //Pad all the arrays
01138                 cout << endl << "Test the add() methods" << endl;
01139                 
01140                 ok = osoption->setAnOtherGeneralOption("testing","one","two  three");
01141                 ok = osoption->setOtherSystemOptions(0,NULL) && ok; 
01142                 ok = osoption->setAnOtherSystemOption("Ho Ho Ho","","") && ok;
01143                 ok = osoption->setAnOtherServiceOption("OneMore","Option","To Go") && ok;
01144                 ok = osoption->setAnotherJobDependency("DoReMi") && ok;
01145                 ok = osoption->setAnotherRequiredDirectory("C:\\MSYS") && ok;
01146                 ok = osoption->setAnotherRequiredFile("C:\\MSYS\\junk.tmp") && ok;
01147                 ok = osoption->setAnotherDirectoryToMake("C:\\tempdir") && ok;
01148                 ok = osoption->setAnotherFileToMake("C:\\tempdir\\temp.tmp") && ok;
01149                 ok = osoption->setAnotherInputDirectoryToMove("C:\\tempdir","C:\\OS\\calc",true) && ok;
01150                 ok = osoption->setAnotherInputFileToMove("C:\\OS\\parinc.osil","C:\\OS\\calc\\input.osil",true) && ok;
01151                 ok = osoption->setAnotherOutputFileToMove("C:\\OS\\calc\\putput.osrl","C:\\OS\\parinc.osol",false) && ok;
01152                 ok = osoption->setAnotherOutputDirectoryToMove("C:\\OS\\calc","C:\\OS\\save",false) && ok;
01153                 ok = osoption->setAnotherFileToDelete("C:\\OS\\calc\\input.osil") && ok;
01154                 ok = osoption->setAnotherDirectoryToDelete("C:\\tempdir") && ok;
01155                 ok = osoption->setAnotherProcessToKill("ABC123") && ok;
01156                 ok = osoption->setAnOtherJobOption("DoReMi","ABC","One Two Three") && ok;
01157                 ok = osoption->setAnotherInitVarValue(5,12.3) && ok;
01158                 ok = osoption->setAnotherInitVarValueString(6,"BLUE") && ok;
01159                 ok = osoption->setAnotherInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,6,ENUM_BASIS_STATUS_unknown) && ok;
01160                 ok = osoption->setAnotherInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,-1,ENUM_BASIS_STATUS_basic) && ok;
01161                 ok = osoption->setAnotherInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,3,ENUM_BASIS_STATUS_superbasic) && ok;
01162                 ok = osoption->setAnotherIntegerVariableBranchingWeight(5,100.) && ok;
01163 
01164                 int SOS3idx[2];
01165                 double SOS3val[2];
01166                 std::string SOS3nam[2];
01167                 SOS3idx[0] = 3;
01168                 SOS3idx[1] = 6;
01169                 SOS3val[0] = 1.0;
01170                 SOS3val[1] = 2.0;
01171                 SOS3nam[0] = "a name";
01172                 SOS3nam[1] = "another";
01173                 int tnvar;
01174                 tnvar = osoption->getNumberOfSOS(); 
01175                 ok = osoption->setAnotherSOSVariableBranchingWeight(3,2,1.0,SOS3idx,SOS3val,SOS3nam) && ok;
01176                 assert (osoption->getNumberOfSOS() == (tnvar + 1));
01177                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[0]->idx == 3);
01178                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[1]->idx == 6);
01179                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[0]->value == 1.0);
01180                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[1]->value == 2.0);
01181                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[0]->name == "a name");
01182                 assert (osoption->optimization->variables->sosVariableBranchingWeights->sos[tnvar]->var[1]->name == "another");
01183 #ifdef DEBUG
01184                 cout << endl << "another SOS has been added" << endl << endl;
01185 #endif
01186 
01187                 OtherVariableOption *varopt;
01188                 varopt = new OtherVariableOption();
01189                 varopt->name = "testVarOpt";
01190                 varopt->numberOfVar = 2;
01191                 varopt->numberOfEnumerations = 0;
01192                 varopt->var = new OtherVarOption*[2];
01193                 varopt->var[0] = new OtherVarOption();
01194                 varopt->var[0]->idx = 0;
01195                 varopt->var[0]->value = "3.0";
01196                 varopt->var[1] = new OtherVarOption();
01197                 varopt->var[1]->idx = 1;
01198                 varopt->var[1]->lbValue = "0.0";
01199                 varopt->var[1]->ubValue = "10.0";
01200                 ok = osoption->setAnOtherVariableOption(varopt) && ok;
01201                 delete varopt;
01202                 varopt = NULL;
01203 #ifdef DEBUG
01204                 cout << endl << "another variable option has been added" << endl << endl;
01205 #endif
01206 
01207                 OtherObjectiveOption *objopt;
01208                 objopt = new OtherObjectiveOption();
01209                 objopt->name = "testObjOpt";
01210                 objopt->numberOfObj = 0;
01211                 objopt->numberOfEnumerations = 0;
01212                 ok = osoption->setAnOtherObjectiveOption(objopt) && ok;
01213                 delete objopt;
01214                 objopt = NULL;
01215 #ifdef DEBUG
01216                 cout << endl << "another objective option has been added" << endl << endl;
01217 #endif
01218 
01219                 ok = osoption->setAnotherInitConValue(2,17.0) && ok;
01220                 ok = osoption->setAnotherInitDualVarValue(2,0.0,DBL_MAX) && ok;
01221 
01222                 OtherConstraintOption *conopt;
01223                 conopt = new OtherConstraintOption();
01224                 conopt->name = "testConOpt";
01225 
01226                 conopt->numberOfCon = 0;
01227                 conopt->numberOfEnumerations = 1;
01228 
01229                 conopt->enumeration = new OtherOptionEnumeration*[1];
01230                 conopt->enumeration[0] = new OtherOptionEnumeration();
01231                 conopt->enumeration[0]->numberOfEl = 3;
01232                 conopt->enumeration[0]->value = "test";
01233                 conopt->enumeration[0]->description = "this is not a test";
01234                 conopt->enumeration[0]->numberOfEl = 3;
01235                 conopt->enumeration[0]->el = new int[3];
01236                 conopt->enumeration[0]->el[0] = 1;
01237                 conopt->enumeration[0]->el[1] = 3;
01238                 conopt->enumeration[0]->el[2] = 5;
01239 
01240                 ok = osoption->setAnOtherConstraintOption(conopt) && ok;
01241                 delete conopt;
01242                 conopt = NULL;
01243 #ifdef DEBUG
01244                 cout << endl << "another constraint option has been added" << endl << endl;
01245 #endif
01246 
01247                 ok = osoption->setAnotherSolverOption("HoHum","gus","PhoNY","","test","") && ok;
01248 
01249                 if (!ok)
01250                         throw ErrorClass(" Could not add to osoption data structure");
01251 
01252                 //Now transfer to another osoption using get() and set() methods
01253                 std::string optionstring, fileName, fileSource, fileDescription, fileCreator, fileLicence;
01254                 int option_i;
01255                 double option_d;
01256 //              OSOption* osoption2;
01257                 osoption2= new OSOption();
01258 
01259                 cout << endl << "transfer osoption to another OSOption object" << endl;
01260                 
01261                 fileName        = osoption->getFileName();
01262                 fileSource      = osoption->getFileSource();
01263                 fileDescription = osoption->getFileDescription();
01264                 fileCreator     = osoption->getFileCreator();
01265                 fileLicence     = osoption->getFileLicence();
01266                 ok = osoption2->setOptionHeader(fileName, fileSource, fileDescription, fileCreator, fileLicence);
01267 #ifdef DEBUG
01268                 if (!ok)
01269                         throw ErrorClass(" error in get/set option header");
01270 #endif
01271 
01272 
01273                 optionstring = osoption->getServiceURI();
01274                 ok = osoption2->setServiceURI(optionstring);
01275 #ifdef DEBUG
01276                 if (!ok)
01277                         throw ErrorClass(" error in get/set ServiceURI");
01278 #endif
01279 
01280                 optionstring = osoption->getServiceName();
01281                 ok = osoption2->setServiceName(optionstring) && ok;
01282 #ifdef DEBUG
01283                 if (!ok)
01284                         throw ErrorClass(" error in get/set ServiceName");
01285 #endif
01286 
01287                 optionstring = osoption->getInstanceName();
01288                 ok = osoption2->setInstanceName(optionstring) && ok;
01289 #ifdef DEBUG
01290                 if (!ok)
01291                         throw ErrorClass(" error in get/set InstanceName");
01292 #endif
01293 
01294                 optionstring = osoption->getInstanceLocation();
01295                 ok = osoption2->setInstanceLocation(optionstring) && ok;
01296 #ifdef DEBUG
01297                 if (!ok)
01298                         throw ErrorClass(" error in get/set InstanceLocation");
01299 #endif
01300 
01301                 optionstring = osoption->getInstanceLocationType();
01302                 ok = osoption2->setInstanceLocationType(optionstring) && ok;
01303 #ifdef DEBUG
01304                 if (!ok)
01305                         throw ErrorClass(" error in get/set InstanceLocationtype");
01306 #endif
01307 
01308                 optionstring = osoption->getJobID();
01309                 ok = osoption2->setJobID(optionstring) && ok;
01310 #ifdef DEBUG
01311                 if (!ok)
01312                         throw ErrorClass(" error in get/set JobID");
01313 #endif
01314 
01315                 optionstring = osoption->getSolverToInvoke();
01316                 ok = osoption2->setSolverToInvoke(optionstring) && ok;
01317 #ifdef DEBUG
01318                 if (!ok)
01319                         throw ErrorClass(" error in get/set SolverToInvoke");
01320 #endif
01321 
01322                 optionstring = osoption->getInstanceLocationType();
01323                 ok = osoption2->setInstanceLocationType(optionstring) && ok;
01324 #ifdef DEBUG
01325                 if (!ok)
01326                         throw ErrorClass(" error in get/set InstanceLocationType");
01327 #endif
01328 
01329                 optionstring = osoption->getUserName();
01330                 ok = osoption2->setUserName(optionstring) && ok;
01331 #ifdef DEBUG
01332                 if (!ok)
01333                         throw ErrorClass(" error in get/set UserName");
01334 #endif
01335 
01336                 optionstring = osoption->getPassword();
01337 #ifdef DEBUG
01338                 if (!ok)
01339                         throw ErrorClass(" error in get/set Password");
01340 #endif
01341                 ok = osoption2->setPassword(optionstring) && ok;
01342 
01343                 optionstring = osoption->getContact();
01344                 ok = osoption2->setContact(optionstring) && ok;
01345 #ifdef DEBUG
01346                 if (!ok)
01347                         throw ErrorClass(" error in get/set Contact");
01348 #endif
01349                 
01350                 optionstring = osoption->getContactTransportType();
01351                 ok = osoption2->setContactTransportType(optionstring) && ok;
01352 #ifdef DEBUG
01353                 if (!ok)
01354                         throw ErrorClass(" error in get/set TransportType");
01355 #endif
01356 
01357                 int nopt;
01358                 OtherOption** otherOpt;
01359                 nopt = osoption->getNumberOfOtherGeneralOptions();
01360                 otherOpt = osoption->getOtherGeneralOptions();
01361                 ok = osoption2->setOtherGeneralOptions(nopt, otherOpt) && ok;
01362 #ifdef DEBUG
01363                 if (!ok)
01364                         throw ErrorClass(" error in get/set OtherGeneralOption");
01365 #endif
01366                 
01367                 std::string tempDescription;
01368 
01369                 optionstring = osoption->getMinDiskSpaceUnit();
01370                 tempDescription = osoption->getMinDiskSpaceDescription();
01371                 option_d = osoption->getMinDiskSpace();
01372                 ok = osoption2->setMinDiskSpace(optionstring,tempDescription,option_d) && ok;
01373 #ifdef DEBUG
01374                 if (!ok)
01375                         throw ErrorClass(" error in get/set MinDiskSpace");
01376 #endif
01377 
01378                 optionstring = osoption->getMinMemoryUnit();
01379                 tempDescription = osoption->getMinMemoryDescription();
01380                 option_d = osoption->getMinMemorySize();
01381                 ok = osoption2->setMinMemorySize(optionstring,tempDescription,option_d) && ok;
01382 #ifdef DEBUG
01383                 if (!ok)
01384                         throw ErrorClass(" error in get/set MinMemorySize");
01385 #endif
01386 
01387                 optionstring = osoption->getMinCPUSpeedUnit();
01388                 tempDescription = osoption->getMinCPUSpeedDescription();
01389                 option_d = osoption->getMinCPUSpeed();
01390                 ok = osoption2->setMinCPUSpeed(optionstring,tempDescription,option_d) && ok;
01391 #ifdef DEBUG
01392                 if (!ok)
01393                         throw ErrorClass(" error in get/set MinCPUSpeed");
01394 #endif
01395 
01396                 option_i = osoption->getMinCPUNumber();
01397                 optionstring = osoption->getMinCPUNumberDescription();
01398                 ok = osoption2->setMinCPUNumber(option_i, optionstring) && ok;
01399 #ifdef DEBUG
01400                 if (!ok)
01401                         throw ErrorClass(" error in get/set MinCPUNumber");
01402 #endif
01403 
01404                 OtherOption** otherOpt2;
01405                 nopt = osoption->getNumberOfOtherSystemOptions();
01406                 otherOpt2 = osoption->getOtherSystemOptions();
01407                 ok = osoption2->setOtherSystemOptions(nopt, otherOpt2) && ok;
01408 #ifdef DEBUG
01409                 if (!ok)
01410                         throw ErrorClass(" error in get/set OtherSystemOptions");
01411 #endif
01412 
01413 
01414                 optionstring = osoption->getServiceType();
01415                 ok = osoption2->setServiceType(optionstring) && ok;
01416 #ifdef DEBUG
01417                 if (!ok)
01418                         throw ErrorClass(" error in get/set ServiceType");
01419 #endif
01420 
01421                 OtherOption** otherOpt3;
01422                 nopt = osoption->getNumberOfOtherServiceOptions();
01423                 otherOpt3 = osoption->getOtherServiceOptions();
01424                 ok = osoption2->setOtherServiceOptions(nopt, otherOpt3) && ok;
01425 #ifdef DEBUG
01426                 if (!ok)
01427                         throw ErrorClass(" error in get/set OtherServiceOptions");
01428 #endif
01429 
01430 
01431                 option_d = osoption->getMaxTime();
01432                 ok = osoption2->setMaxTime(option_d) && ok;
01433 #ifdef DEBUG
01434                 if (!ok)
01435                         throw ErrorClass(" error in get/set MaxTime");
01436 #endif
01437 
01438                 optionstring = osoption->getMaxTimeUnit();
01439                 ok = osoption2->setMaxTimeUnit(optionstring) && ok;
01440 #ifdef DEBUG
01441                 if (!ok)
01442                         throw ErrorClass(" error in get/set MaxTimeUnit");
01443 #endif
01444 
01445                 optionstring = osoption->getRequestedStartTime();
01446                 ok = osoption2->setRequestedStartTime(optionstring) && ok;
01447 #ifdef DEBUG
01448                 if (!ok)
01449                         throw ErrorClass(" error in get/set RequestedStartTime");
01450 #endif
01451 
01452                 nopt = osoption->getNumberOfJobDependencies();
01453                 std::string* tJobID = osoption->getJobDependencies();
01454                 ok = osoption2->setJobDependencies(nopt, tJobID) && ok;
01455 #ifdef DEBUG
01456                 if (!ok)
01457                         throw ErrorClass(" error in get/set JobDependencies");
01458 #endif
01459 
01460                 nopt = osoption->getNumberOfRequiredDirectories();
01461                 std::string* reqDir = osoption->getRequiredDirectories();
01462                 ok = osoption2->setRequiredDirectories(nopt, reqDir) && ok;
01463 #ifdef DEBUG
01464                 if (!ok)
01465                         throw ErrorClass(" error in get/set RequiredDirectories");
01466 #endif
01467 
01468                 nopt = osoption->getNumberOfRequiredFiles();
01469                 std::string* reqFil = osoption->getRequiredFiles();
01470                 ok = osoption2->setRequiredFiles(nopt, reqFil) && ok;
01471 #ifdef DEBUG
01472                 if (!ok)
01473                         throw ErrorClass(" error in get/set RequiredFiles");
01474 #endif
01475 
01476                 nopt = osoption->getNumberOfDirectoriesToMake();
01477                 std::string* mkDir = osoption->getDirectoriesToMake();
01478                 ok = osoption2->setDirectoriesToMake(nopt, mkDir) && ok;
01479 #ifdef DEBUG
01480                 if (!ok)
01481                         throw ErrorClass(" error in get/set DirectoriesToMake");
01482 #endif
01483 
01484                 nopt = osoption->getNumberOfFilesToMake();
01485                 std::string* mkFil = osoption->getFilesToMake();
01486                 ok = osoption2->setFilesToMake(nopt, mkFil) && ok;
01487 #ifdef DEBUG
01488                 if (!ok)
01489                         throw ErrorClass(" error in get/set FilesToMake");
01490 #endif
01491 
01492                 nopt = osoption->getNumberOfInputDirectoriesToMove();
01493                 PathPair** inDMv = osoption->getInputDirectoriesToMove();
01494                 ok = osoption2->setInputDirectoriesToMove(nopt, inDMv) && ok;
01495 #ifdef DEBUG
01496                 if (!ok)
01497                         throw ErrorClass(" error in get/set InputDirectoriesToMove");
01498 #endif
01499 
01500                 nopt = osoption->getNumberOfInputFilesToMove();
01501                 PathPair** inFMv = osoption->getInputFilesToMove();
01502                 ok = osoption2->setInputFilesToMove(nopt, inFMv) && ok;
01503 #ifdef DEBUG
01504                 if (!ok)
01505                         throw ErrorClass(" error in get/set InputFilesToMove");
01506 #endif
01507 
01508                 nopt = osoption->getNumberOfOutputFilesToMove();
01509                 PathPair** outFMv = osoption->getOutputFilesToMove();
01510                 ok = osoption2->setOutputFilesToMove(nopt, outFMv) && ok;
01511 #ifdef DEBUG
01512                 if (!ok)
01513                         throw ErrorClass(" error in get/set OutputFilesToMove");
01514 #endif
01515 
01516                 nopt = osoption->getNumberOfOutputDirectoriesToMove();
01517                 PathPair** outDMv = osoption->getOutputDirectoriesToMove();
01518                 ok = osoption2->setOutputDirectoriesToMove(nopt, outDMv) && ok;
01519 #ifdef DEBUG
01520                 if (!ok)
01521                         throw ErrorClass(" error in get/set OutputDirectoriesToMove");
01522 #endif
01523 
01524                 nopt = osoption->getNumberOfFilesToDelete();
01525                 std::string* rmFil = osoption->getFilesToDelete();
01526                 ok = osoption2->setFilesToDelete(nopt, rmFil) && ok;
01527 #ifdef DEBUG
01528                 if (!ok)
01529                         throw ErrorClass(" error in get/set FilesToDelete");
01530 #endif
01531 
01532                 nopt = osoption->getNumberOfDirectoriesToDelete();
01533                 std::string* rmDir = osoption->getDirectoriesToDelete();
01534                 ok = osoption2->setDirectoriesToDelete(nopt, rmDir) && ok;
01535 #ifdef DEBUG
01536                 if (!ok)
01537                         throw ErrorClass(" error in get/set DirectoriesToDelete");
01538 #endif
01539 
01540                 nopt = osoption->getNumberOfProcessesToKill();
01541                 std::string* rmProc = osoption->getProcessesToKill();
01542                 ok = osoption2->setProcessesToKill(nopt, rmProc) && ok;
01543 #ifdef DEBUG
01544                 if (!ok)
01545                         throw ErrorClass(" error in get/set ProcessesToKill");
01546 #endif
01547 
01548                 OtherOption** otherOpt4;
01549                 nopt = osoption->getNumberOfOtherJobOptions();
01550                 otherOpt4 = osoption->getOtherJobOptions();
01551                 ok = osoption2->setOtherJobOptions(nopt, otherOpt4) && ok;
01552 #ifdef DEBUG
01553                 if (!ok)
01554                         throw ErrorClass(" error in get/set OtherJobOptions");
01555 #endif
01556 
01557                 int nvar, nobj, ncon;
01558                 nvar = osoption->getOptionInt("numberOfVariables");
01559                 ok = osoption2->setNumberOfVariables(nvar) && ok;
01560                 nobj = osoption->getOptionInt("numberOfObjectives");
01561                 ok = osoption2->setNumberOfObjectives(nobj) && ok;
01562                 ncon = osoption->getOptionInt("numberOfConstraints");
01563                 ok = osoption2->setNumberOfConstraints(ncon) && ok;
01564                 // eliminate references to numberOfVariables
01565                 nvar = 10; 
01566                 nobj = 2; 
01567                 ncon = 8; 
01568 #ifdef DEBUG
01569                 if (!ok)
01570                         throw ErrorClass(" error in get/set problem dimensions");
01571 #endif
01572  
01573 // use sparse methods only because some schema elements allow NaN
01574                 nopt = osoption->getNumberOfInitVarValues();
01575                 InitVarValue** IVV;
01576                 IVV = osoption->getInitVarValuesSparse();
01577                 ok = osoption2->setInitVarValuesSparse(nopt, IVV) && ok;
01578 #ifdef DEBUG
01579                 if (!ok)
01580                         throw ErrorClass(" error in get/set InitVarValues");
01581 #endif
01582 
01583                 nopt = osoption->getNumberOfInitVarValuesString();
01584                 InitVarValueString** IVV2;
01585                 IVV2 = osoption->getInitVarValuesStringSparse();
01586                 ok = osoption2->setInitVarValuesStringSparse(nopt, IVV2) && ok;         
01587 #ifdef DEBUG
01588                 if (!ok)
01589                         throw ErrorClass(" error in get/set InitVarValuesString");
01590 #endif
01591 
01592                 int*  IBS;
01593 
01594                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic);
01595                 if (nvar > 0)
01596                 {
01597                         IBS = new int[nvar];
01598                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic,IBS);
01599                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic, IBS, nvar) && ok;
01600                         delete[] IBS;
01601 #ifdef DEBUG
01602                         if (!ok)
01603                                 throw ErrorClass(" error in get/set InitBasisStatus");
01604 #endif
01605                 }
01606 
01607                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower);
01608                 if (nvar > 0)
01609                 {
01610                         IBS = new int[nvar];
01611                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower,IBS);
01612                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower, IBS, nvar) && ok;
01613                         delete[] IBS;
01614 #ifdef DEBUG
01615                         if (!ok)
01616                                 throw ErrorClass(" error in get/set InitBasisStatus");
01617 #endif
01618                 }
01619 
01620                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper);
01621                 if (nvar > 0)
01622                 {
01623                         IBS = new int[nvar];
01624                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper,IBS);
01625                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper, IBS, nvar) && ok;
01626                         delete[] IBS;
01627 #ifdef DEBUG
01628                         if (!ok)
01629                                 throw ErrorClass(" error in get/set InitBasisStatus");
01630 #endif
01631                 }
01632 
01633                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree);
01634                 if (nvar > 0)
01635                 {
01636                         IBS = new int[nvar];
01637                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree,IBS);
01638                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree, IBS, nvar) && ok;
01639                         delete[] IBS;
01640 #ifdef DEBUG
01641                         if (!ok)
01642                                 throw ErrorClass(" error in get/set InitBasisStatus");
01643 #endif
01644                 }
01645 
01646                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic);
01647                 if (nvar > 0)
01648                 {
01649                         IBS = new int[nvar];
01650                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic,IBS);
01651                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic, IBS, nvar) && ok;
01652                         delete[] IBS;
01653 #ifdef DEBUG
01654                         if (!ok)
01655                                 throw ErrorClass(" error in get/set InitBasisStatus");
01656 #endif
01657                 }
01658 
01659                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown);
01660                 if (nvar > 0)
01661                 {
01662                         IBS = new int[nvar];
01663                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown,IBS);
01664                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown, IBS, nvar) && ok;
01665                         delete[] IBS;
01666 #ifdef DEBUG
01667                         if (!ok)
01668                                 throw ErrorClass(" error in get/set InitBasisStatus");
01669 #endif
01670                 }
01671 
01672 
01673                 BranchingWeight** BW;
01674                 BW = osoption->getIntegerVariableBranchingWeightsSparse();
01675                 nopt = osoption->getNumberOfIntegerVariableBranchingWeights();
01676                 ok = osoption2->setIntegerVariableBranchingWeightsSparse(nopt, BW) && ok;
01677 #ifdef DEBUG
01678                 if (!ok)
01679                         throw ErrorClass(" error in get/set IntegerVariableBranchingWeights");
01680 #endif
01681 
01682                 SOSWeights** sos;
01683                 sos = osoption->getSOSVariableBranchingWeightsSparse();
01684                 nopt = osoption->getNumberOfSOS();
01685                 ok = osoption2->setSOSVariableBranchingWeights(nopt, sos) && ok;
01686 #ifdef DEBUG
01687                 if (!ok)
01688                         throw ErrorClass(" error in get/set SOSVariableBranchingWeights");
01689 #endif
01690 
01691                 OtherVariableOption** otherV;
01692                 otherV = osoption->getAllOtherVariableOptions();
01693                 nopt = osoption->getNumberOfOtherVariableOptions();
01694                 ok = osoption2->setOtherVariableOptions(nopt, otherV) && ok;
01695 #ifdef DEBUG
01696                 if (!ok)
01697                         throw ErrorClass(" error in get/set OtherVariableOptions");
01698 #endif
01699 
01700                 nopt = osoption->getNumberOfInitObjValues();
01701                 InitObjValue** IOV;
01702                 IOV = osoption->getInitObjValuesSparse();
01703                 for (int lmn=0; lmn < nobj; lmn++)
01704 
01705                 ok = osoption2->setInitObjValuesSparse(nopt, IOV) && ok;                
01706 #ifdef DEBUG
01707                 if (!ok)
01708                         throw ErrorClass(" error in get/set InitObjValues");
01709 #endif
01710 
01711                 nopt = osoption->getNumberOfInitObjBounds();
01712                 InitObjBound** IOB;
01713                 IOB = osoption->getInitObjBoundsSparse();
01714                 ok = osoption2->setInitObjBoundsSparse(nopt, IOB) && ok;                
01715 #ifdef DEBUG
01716                 if (!ok)
01717                         throw ErrorClass(" error in get/set InitObjBounds");
01718 #endif
01719 
01720                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic);
01721                 if (nvar > 0)
01722                 {
01723                         IBS = new int[nvar];
01724                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic,IBS);
01725                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic, IBS, nvar) && ok;
01726                         delete[] IBS;
01727 #ifdef DEBUG
01728                         if (!ok)
01729                                 throw ErrorClass(" error in get/set InitBasisStatus");
01730 #endif
01731                 }
01732 
01733                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower);
01734                 if (nvar > 0)
01735                 {
01736                         IBS = new int[nvar];
01737                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower,IBS);
01738                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower, IBS, nvar) && ok;
01739                         delete[] IBS;
01740 #ifdef DEBUG
01741                         if (!ok)
01742                                 throw ErrorClass(" error in get/set InitBasisStatus");
01743 #endif
01744                 }
01745 
01746                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper);
01747                 if (nvar > 0)
01748                 {
01749                         IBS = new int[nvar];
01750                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper,IBS);
01751                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper, IBS, nvar) && ok;
01752                         delete[] IBS;
01753 #ifdef DEBUG
01754                         if (!ok)
01755                                 throw ErrorClass(" error in get/set InitBasisStatus");
01756 #endif
01757                 }
01758 
01759                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree);
01760                 if (nvar > 0)
01761                 {
01762                         IBS = new int[nvar];
01763                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree,IBS);
01764                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree, IBS, nvar) && ok;
01765                         delete[] IBS;
01766 #ifdef DEBUG
01767                         if (!ok)
01768                                 throw ErrorClass(" error in get/set InitBasisStatus");
01769 #endif
01770                 }
01771 
01772                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic);
01773                 if (nvar > 0)
01774                 {
01775                         IBS = new int[nvar];
01776                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic,IBS);
01777                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic, IBS, nvar) && ok;
01778                         delete[] IBS;
01779 #ifdef DEBUG
01780                         if (!ok)
01781                                 throw ErrorClass(" error in get/set InitBasisStatus");
01782 #endif
01783                 }
01784 
01785                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown);
01786                 if (nvar > 0)
01787                 {
01788                         IBS = new int[nvar];
01789                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown,IBS);
01790                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown, IBS, nvar) && ok;
01791                         delete[] IBS;
01792 #ifdef DEBUG
01793                         if (!ok)
01794                                 throw ErrorClass(" error in get/set InitBasisStatus");
01795 #endif
01796                 }
01797 
01798                 OtherObjectiveOption** otherO;
01799                 otherO = osoption->getAllOtherObjectiveOptions();
01800                 nopt = osoption->getNumberOfOtherObjectiveOptions();
01801                 ok = osoption2->setOtherObjectiveOptions(nopt, otherO) && ok;
01802 #ifdef DEBUG
01803                 if (!ok)
01804                         throw ErrorClass(" error in get/set OtherObjectiveOptions");
01805 #endif
01806 
01807                 
01808                 nopt = osoption->getNumberOfInitConValues();
01809                 InitConValue** ICV;
01810                 ICV = osoption->getInitConValuesSparse();
01811                 ok = osoption2->setInitConValuesSparse(nopt, ICV) && ok;                
01812 #ifdef DEBUG
01813                 if (!ok)
01814                         throw ErrorClass(" error in get/set InitConValues");
01815 #endif
01816 
01817                 nopt = osoption->getNumberOfInitDualVarValues();
01818                 InitDualVarValue** IDV;
01819                 IDV = osoption->getInitDualVarValuesSparse();
01820                 ok = osoption2->setInitDualVarValuesSparse(nopt, IDV) && ok;            
01821 #ifdef DEBUG
01822                 if (!ok)
01823                         throw ErrorClass(" error in get/set InitDualVarValues");
01824 #endif
01825 
01826                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic);
01827                 if (nvar > 0)
01828                 {
01829                         IBS = new int[nvar];
01830                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic,IBS);
01831                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic, IBS, nvar) && ok;
01832                         delete[] IBS;
01833 #ifdef DEBUG
01834                         if (!ok)
01835                                 throw ErrorClass(" error in get/set InitBasisStatus");
01836 #endif
01837                 }
01838 
01839                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower);
01840                 if (nvar > 0)
01841                 {
01842                         IBS = new int[nvar];
01843                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower,IBS);
01844                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower, IBS, nvar) && ok;
01845                         delete[] IBS;
01846 #ifdef DEBUG
01847                         if (!ok)
01848                                 throw ErrorClass(" error in get/set InitBasisStatus");
01849 #endif
01850                 }
01851 
01852                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper);
01853                 if (nvar > 0)
01854                 {
01855                         IBS = new int[nvar];
01856                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper,IBS);
01857                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper, IBS, nvar) && ok;
01858                         delete[] IBS;
01859 #ifdef DEBUG
01860                         if (!ok)
01861                                 throw ErrorClass(" error in get/set InitBasisStatus");
01862 #endif
01863                 }
01864 
01865                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree);
01866                 if (nvar > 0)
01867                 {
01868                         IBS = new int[nvar];
01869                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree,IBS);
01870                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree, IBS, nvar) && ok;
01871                         delete[] IBS;
01872 #ifdef DEBUG
01873                         if (!ok)
01874                                 throw ErrorClass(" error in get/set InitBasisStatus");
01875 #endif
01876                 }
01877 
01878                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic);
01879                 if (nvar > 0)
01880                 {
01881                         IBS = new int[nvar];
01882                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic,IBS);
01883                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic, IBS, nvar) && ok;
01884                         delete[] IBS;
01885 #ifdef DEBUG
01886                         if (!ok)
01887                                 throw ErrorClass(" error in get/set InitBasisStatus");
01888 #endif
01889                 }
01890 
01891                 nvar = osoption->getNumberOfInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown);
01892                 if (nvar > 0)
01893                 {
01894                         IBS = new int[nvar];
01895                         ok = osoption->getInitialBasisElements(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown,IBS);
01896                         ok = osoption2->setInitBasisStatus(ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown, IBS, nvar) && ok;
01897                         delete[] IBS;
01898 #ifdef DEBUG
01899                         if (!ok)
01900                                 throw ErrorClass(" error in get/set InitBasisStatus");
01901 #endif
01902                 }
01903 
01904                 OtherConstraintOption** otherC;
01905                 otherC = osoption->getAllOtherConstraintOptions();
01906                 nopt = osoption->getNumberOfOtherConstraintOptions();
01907                 ok = osoption2->setOtherConstraintOptions(nopt, otherC) && ok;
01908 #ifdef DEBUG
01909                 if (!ok)
01910                         throw ErrorClass(" error in get/set OtherConstraintOptions");
01911 #endif
01912 
01913                 SolverOption** SO;
01914                 SO = osoption->getAllSolverOptions();
01915                 nopt = osoption->getNumberOfSolverOptions();
01916                 ok = osoption2->setSolverOptions(nopt, SO) && ok;
01917 
01918 
01919 #ifdef DEBUG
01920                 if (!ok)
01921                         throw ErrorClass(" error in get/set SolverOptions");
01922 #endif
01923 
01924                 ok = osoption->IsEqual(osoption2) && ok;
01925                 if (!ok)
01926                         throw ErrorClass("OSOption get() and  set() methods do not work correctly");
01927 
01928                 cout << "Write the content to a new file" << endl;              
01929                 tmpOSoL = osolwriter->writeOSoL( osoption);
01930                 cout << endl << "Here is tmpOSoL:" <<endl;
01931                 cout << endl << endl << tmpOSoL << endl;
01932                 cout << "-----------------------------------------" << endl << endl;
01933 
01934                 // make sure we can parse without error
01935                 osolreader2 = new OSoLReader();
01936                 cout << "Read the string back" << endl;
01937 
01938                 osoption3 = osolreader2->readOSoL( tmpOSoL);
01939 
01940                 ok = osoption->IsEqual(osoption3);
01941                 if (!ok)
01942                         throw ErrorClass(" Loss of information in OSoL write/read");
01943 
01944                 cout << "delete osoption2" << endl;
01945 
01946                 delete osoption2;
01947                 osoption2 = NULL;
01948 
01949                 cout << "delete osolreader2" << endl;
01950                 delete osolreader2;
01951                 osolreader2 = NULL;
01952 
01953                 cout << "delete osolwriter" << endl;
01954                 delete osolwriter;
01955                 osolwriter = NULL;
01956                 cout << "delete osolreader" << endl;
01957                 delete osolreader;
01958                 osolreader = NULL;
01959                 unitTestResult << 
01960                      "TEST " << nOfTest << ": Successful test of OSoL set() and get() methods" 
01961                       << std::endl;
01962                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
01963         }       
01964         catch(const ErrorClass& eclass){
01965                 cout << endl << endl << endl;
01966                 cout << eclass.errormsg << endl;
01967                 unitTestResultFailure << "Sorry Unit Test Failed OSoL set() and get() methods" << endl;         
01968 
01969                 if (osoption2 != NULL)
01970                         delete osoption2;
01971                 osoption2 = NULL;
01972 
01973                 if (osolreader2 != NULL)
01974                         delete osolreader2;
01975                 osolreader2 = NULL;
01976 
01977                 if (osolwriter != NULL)
01978                         delete osolwriter;
01979                 osolwriter = NULL;
01980 
01981                 if (osolreader != NULL)
01982                         delete osolreader;
01983                 osolreader = NULL;
01984         }       
01985 
01986         // a few more smaller examples
01987         try{ 
01988                 cout << endl << "TEST " << ++nOfTest << ": Parse another .osol file" << endl << endl;
01989                 std::string tmpOSoL;
01990                 clock_t start, finish;
01991                 double duration;
01992 
01993                 osolwriter = new OSoLWriter();
01994                 osolreader = new OSoLReader();
01995                 start = clock();
01996 
01997                 cout << "First read the OSoL file into a string" << endl;
01998                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest2.osol"; 
01999                 osol = fileUtil->getFileAsString( osolFileName.c_str() );
02000                 finish = clock();
02001                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02002                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
02003                 cout << endl << osol << endl;
02004                 cout << "Parse the OSoL string into an OSOption object" << endl;
02005                 osoption = osolreader->readOSoL( osol);
02006 
02007                 std::cout << "string read; now write again" << std::endl;
02008                 tmpOSoL = osolwriter->writeOSoL( osoption) ;
02009 
02010 
02011                 std::cout << "object written; delete osolreader" << std::endl;
02012 
02013                 delete osolreader;
02014                 osolreader = NULL;
02015                 osolreader = new OSoLReader();
02016                 osolreader->readOSoL( tmpOSoL);
02017                 delete osolwriter;
02018                 osolwriter = NULL;
02019                 delete osolreader;
02020                 osolreader = NULL;
02021 
02022                 // a third example
02023                 cout << "Test parsing another OSoL file" << endl;
02024                 osolwriter = new OSoLWriter();
02025                 osolreader = new OSoLReader();
02026                 cout << "First read the OSoL file into a string" << endl;
02027                 osolFileName = dataDir  + "osolFiles" + dirsep + "parsertest3.osol"; 
02028                 osol = fileUtil->getFileAsString( osolFileName.c_str() );
02029                 finish = clock();
02030                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
02031                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
02032                 cout << "Parse the OSoL string into an OSOption object" << endl;
02033                 osoption = osolreader->readOSoL( osol);
02034                 tmpOSoL = osolwriter->writeOSoL( osoption) ;
02035                 delete osolreader;
02036                 osolreader = NULL;
02037                 osolreader = new OSoLReader();
02038                 osolreader->readOSoL( tmpOSoL);
02039                 delete osolwriter;
02040                 osolwriter = NULL;
02041                 delete osolreader;
02042                 osolreader = NULL;
02043 
02044 
02045                 // a trivial string
02046                 cout << "Test parsing a trivial string" << endl;
02047                 osolreader = new OSoLReader();
02048                 osol = "<osol></osol>";
02049                 cout << "Parse the OSoL string into an OSOption object" << endl;
02050                 osoption = osolreader->readOSoL( osol);
02051                 delete osolreader;
02052                 osolreader = NULL;
02053 
02054 
02055                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSoL parser" << std::endl;
02056                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
02057         }       
02058         
02059         catch(const ErrorClass& eclass){
02060                 cout << endl << endl << endl;
02061                 if(osolwriter != NULL) delete osolwriter;
02062                 osolwriter = NULL;
02063                 if(osolreader != NULL) delete osolreader;
02064                 osolreader = NULL;
02065                 // " Problem with the test reading OSoL data";
02066                 unitTestResultFailure << eclass.errormsg << endl;
02067                 unitTestResultFailure << "There was a failure in the test for reading OSoL" << endl;
02068         }
02069 
02070 //#endif //!!!  end of #if 0: OSrL parser development
02071 
02081         OSResult *osresult;
02082         OSResult *osresult1 = new OSResult();
02083         OSResult *osresult2 = new OSResult();
02084         OSResult *osresult3 = NULL;
02085 
02086         int* intArray;
02087         intArray = new int[3];
02088         int* tempArray = new int[3];
02089 
02090 //#ifdef TEMP   //---------------------------for the time being----------------------------------
02091         try{ 
02092                 cout << endl << "TEST " << ++nOfTest << ": OSrL set() tools" << endl << endl;
02093 
02094                 ok = true;
02095                 ok &= (osresult1->IsEqual(osresult2));
02096                 if (!ok) 
02097                         throw ErrorClass("Empty osresult objects do not compare equal!");
02098 
02099 //      <general> element
02100                 ok &= osresult1->setGeneralStatusType("warning");
02101                 if (!ok) 
02102                         throw ErrorClass("Error during setGeneralStatusType!");
02103                 ok &= (!osresult1->IsEqual(osresult2));
02104                 if (!ok) 
02105                         throw ErrorClass("setGeneralStatusType: osresult objects falsely compare equal!");
02106                 ok &= osresult2->setGeneralStatusType("warning");
02107                 if (!ok) 
02108                         throw ErrorClass("Error during setGeneralStatusType!");
02109                 ok &= (osresult1->IsEqual(osresult2));
02110                 if (!ok) 
02111                         throw ErrorClass("setGeneralStatusType: osresult objects falsely compare unequal!");
02112 
02113                 ok &= osresult1->setGeneralStatusDescription("some nonempty string");
02114                 if (!ok) 
02115                         throw ErrorClass("Error during setGeneralStatusDescription!");
02116                 ok &= (!osresult1->IsEqual(osresult2));
02117                 if (!ok) 
02118                         throw ErrorClass("setGeneralStatusDescription: osresult objects falsely compare equal!");
02119                 ok &= osresult2->setGeneralStatusDescription("some nonempty string");
02120                 if (!ok) 
02121                         throw ErrorClass("Error during setGeneralStatusDescription!");
02122                 ok &= (osresult1->IsEqual(osresult2));
02123                 if (!ok) 
02124                         throw ErrorClass("setGeneralStatusDescription: osresult objects falsely compare unequal!");
02125 
02126                 ok &= osresult1->setNumberOfGeneralSubstatuses(3);
02127                 if (!ok) 
02128                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
02129                 ok &= (!osresult1->IsEqual(osresult2));
02130                 if (!ok) 
02131                         throw ErrorClass("setNumberOfGeneralSubstatuses: osresult objects falsely compare equal!");
02132                 ok &= osresult2->setNumberOfGeneralSubstatuses(3);
02133                 if (!ok) 
02134                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
02135                 ok &= (osresult1->IsEqual(osresult2));
02136                 if (!ok) 
02137                         throw ErrorClass("setNumberOfGeneralSubstatuses: osresult objects falsely compare unequal!");
02138 
02139                 for (int i=0; i < 3; ++i)
02140                 {
02141                         ok &= osresult1->setGeneralSubstatusName(i,"some name");
02142                         if (!ok) 
02143                                 throw ErrorClass("Error during setGeneralSubstatusName!");
02144                         ok &= (!osresult1->IsEqual(osresult2));
02145                         if (!ok) 
02146                                 throw ErrorClass("setGeneralSubstatusName: osresult objects falsely compare equal!");
02147                         ok &= osresult2->setGeneralSubstatusName(i,"some name");
02148                         if (!ok) 
02149                                 throw ErrorClass("Error during setGeneralSubstatusName!");
02150                         ok &= (osresult1->IsEqual(osresult2));
02151                         if (!ok) 
02152                                 throw ErrorClass("setGeneralSubstatusName: osresult objects falsely compare unequal!");
02153 
02154                         ok &= osresult1->setGeneralSubstatusDescription(i,"ABC 123");
02155                         if (!ok) 
02156                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
02157                         ok &= (!osresult1->IsEqual(osresult2));
02158                         if (!ok) 
02159                                 throw ErrorClass("setGeneralSubstatusDescription: osresult objects falsely compare equal!");
02160                         ok &= osresult2->setGeneralSubstatusDescription(i,"ABC 123");
02161                         if (!ok) 
02162                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
02163                         ok &= (osresult1->IsEqual(osresult2));
02164                         if (!ok) 
02165                                 throw ErrorClass("setGeneralSubstatusDescription: osresult objects falsely compare unequal!");
02166                 }
02167 
02168                 ok &= osresult1->setGeneralMessage("testing 123");
02169                 if (!ok) 
02170                         throw ErrorClass("Error during setGeneralMessage!");
02171                 ok &= (!osresult1->IsEqual(osresult2));
02172                 if (!ok) 
02173                         throw ErrorClass("setGeneralMessage: osresult objects falsely compare equal!");
02174                 ok &= osresult2->setGeneralMessage("testing 123");
02175                 if (!ok) 
02176                         throw ErrorClass("Error during setGeneralMessage!");
02177                 ok &= (osresult1->IsEqual(osresult2));
02178                 if (!ok) 
02179                         throw ErrorClass("setGeneralMessage: osresult objects falsely compare unequal!");
02180 
02181                 ok &= osresult1->setServiceName("testing 123");
02182                 if (!ok) 
02183                         throw ErrorClass("Error during setServiceName!");
02184                 ok &= (!osresult1->IsEqual(osresult2));
02185                 if (!ok) 
02186                         throw ErrorClass("setServiceName: osresult objects falsely compare equal!");
02187                 ok &= osresult2->setServiceName("testing 123");
02188                 if (!ok) 
02189                         throw ErrorClass("Error during setServiceName!");
02190                 ok &= (osresult1->IsEqual(osresult2));
02191                 if (!ok) 
02192                         throw ErrorClass("setServiceName: osresult objects falsely compare unequal!");
02193 
02194                 ok &= osresult1->setServiceURI("testing 123");
02195                 if (!ok) 
02196                         throw ErrorClass("Error during setServiceURI!");
02197                 ok &= (!osresult1->IsEqual(osresult2));
02198                 if (!ok) 
02199                         throw ErrorClass("setServiceURI: osresult objects falsely compare equal!");
02200                 ok &= osresult2->setServiceURI("testing 123");
02201                 if (!ok) 
02202                         throw ErrorClass("Error during setServiceURI!");
02203                 ok &= (osresult1->IsEqual(osresult2));
02204                 if (!ok) 
02205                         throw ErrorClass("setServiceURI: osresult objects falsely compare unequal!");
02206 
02207                 ok &= osresult1->setInstanceName("testing 123");
02208                 if (!ok) 
02209                         throw ErrorClass("Error during setInstanceName!");
02210                 ok &= (!osresult1->IsEqual(osresult2));
02211                 if (!ok) 
02212                         throw ErrorClass("setInstanceName: osresult objects falsely compare equal!");
02213                 ok &= osresult2->setInstanceName("testing 123");
02214                 if (!ok) 
02215                         throw ErrorClass("Error during setInstanceName!");
02216                 ok &= (osresult1->IsEqual(osresult2));
02217                 if (!ok) 
02218                         throw ErrorClass("setInstanceName: osresult objects falsely compare unequal!");
02219 
02220                 ok &= osresult1->setJobID("testing 123");
02221                 if (!ok) 
02222                         throw ErrorClass("Error during setJobID!");
02223                 ok &= (!osresult1->IsEqual(osresult2));
02224                 if (!ok) 
02225                         throw ErrorClass("setJobID: osresult objects falsely compare equal!");
02226                 ok &= osresult2->setJobID("testing 123");
02227                 if (!ok) 
02228                         throw ErrorClass("Error during setJobID!");
02229                 ok &= (osresult1->IsEqual(osresult2));
02230                 if (!ok) 
02231                         throw ErrorClass("setJobID: osresult objects falsely compare unequal!");
02232 
02233                 ok &= osresult1->setSolverInvoked("testing 123");
02234                 if (!ok) 
02235                         throw ErrorClass("Error during setSolverInvoked!");
02236                 ok &= (!osresult1->IsEqual(osresult2));
02237                 if (!ok) 
02238                         throw ErrorClass("setSolverInvoked: osresult objects falsely compare equal!");
02239                 ok &= osresult2->setSolverInvoked("testing 123");
02240                 if (!ok) 
02241                         throw ErrorClass("Error during setSolverInvoked!");
02242                 ok &= (osresult1->IsEqual(osresult2));
02243                 if (!ok) 
02244                         throw ErrorClass("setSolverInvoked: osresult objects falsely compare unequal!");
02245 
02246                 ok &= osresult1->setTimeStamp("2001-12-17T09:30:47.0Z");
02247                 if (!ok) 
02248                         throw ErrorClass("Error during setTimeStamp!");
02249                 ok &= (!osresult1->IsEqual(osresult2));
02250                 if (!ok) 
02251                         throw ErrorClass("setTimeStamp: osresult objects falsely compare equal!");
02252                 ok &= osresult2->setTimeStamp("2001-12-17T09:30:47.0Z");
02253                 if (!ok) 
02254                         throw ErrorClass("Error during setTimeStamp!");
02255                 ok &= (osresult1->IsEqual(osresult2));
02256                 if (!ok) 
02257                         throw ErrorClass("setTimeStamp: osresult objects falsely compare unequal!");
02258 
02259                 ok &= osresult1->setNumberOfOtherGeneralResults(3);
02260                 if (!ok) 
02261                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
02262                 ok &= (!osresult1->IsEqual(osresult2));
02263                 if (!ok) 
02264                         throw ErrorClass("setNumberOfOtherGeneralResults: osresult objects falsely compare equal!");
02265                 ok &= osresult2->setNumberOfOtherGeneralResults(3);
02266                 if (!ok) 
02267                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
02268                 ok &= (osresult1->IsEqual(osresult2));
02269                 if (!ok) 
02270                         throw ErrorClass("setNumberOfOtherGeneralResults: osresult objects falsely compare unequal!");
02271 
02272                 for (int i=0; i < 3; ++i)
02273                 {
02274                         ok &= osresult1->setOtherGeneralResultName(i,"some name");
02275                         if (!ok) 
02276                                 throw ErrorClass("Error during setOtherGeneralResultName!");
02277                         ok &= (!osresult1->IsEqual(osresult2));
02278                         if (!ok) 
02279                                 throw ErrorClass("setOtherGeneralResultName: osresult objects falsely compare equal!");
02280                         ok &= osresult2->setOtherGeneralResultName(i,"some name");
02281                         if (!ok) 
02282                                 throw ErrorClass("Error during setOtherGeneralResultName!");
02283                         ok &= (osresult1->IsEqual(osresult2));
02284                         if (!ok) 
02285                                 throw ErrorClass("setOtherGeneralResultName: osresult objects falsely compare unequal!");
02286 
02287                         ok &= osresult1->setOtherGeneralResultValue(i,"some value");
02288                         if (!ok) 
02289                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
02290                         ok &= (!osresult1->IsEqual(osresult2));
02291                         if (!ok) 
02292                                 throw ErrorClass("setOtherGeneralResultValue: osresult objects falsely compare equal!");
02293                         ok &= osresult2->setOtherGeneralResultValue(i,"some value");
02294                         if (!ok) 
02295                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
02296                         ok &= (osresult1->IsEqual(osresult2));
02297                         if (!ok) 
02298                                 throw ErrorClass("setOtherGeneralResultValue: osresult objects falsely compare unequal!");
02299 
02300                         ok &= osresult1->setOtherGeneralResultDescription(i,"ABC 123");
02301                         if (!ok) 
02302                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
02303                         ok &= (!osresult1->IsEqual(osresult2));
02304                         if (!ok) 
02305                                 throw ErrorClass("setOtherGeneralResultDescription: osresult objects falsely compare equal!");
02306                         ok &= osresult2->setOtherGeneralResultDescription(i,"ABC 123");
02307                         if (!ok) 
02308                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
02309                         ok &= (osresult1->IsEqual(osresult2));
02310                         if (!ok) 
02311                                 throw ErrorClass("setOtherGeneralResultDescription: osresult objects falsely compare unequal!");
02312                 }
02313 
02314 // <system> element
02315                 ok &= osresult1->setSystemInformation("testing 123");
02316                 if (!ok) 
02317                         throw ErrorClass("Error during setSystemInformation!");
02318                 ok &= (!osresult1->IsEqual(osresult2));
02319                 if (!ok) 
02320                         throw ErrorClass("setSystemInformation: osresult objects falsely compare equal!");
02321                 ok &= osresult2->setSystemInformation("testing 123");
02322                 if (!ok) 
02323                         throw ErrorClass("Error during setSystemInformation!");
02324                 ok &= (osresult1->IsEqual(osresult2));
02325                 if (!ok) 
02326                         throw ErrorClass("setSystemInformation: osresult objects falsely compare unequal!");
02327 
02328                 ok &= osresult1->setAvailableDiskSpaceUnit("megabyte");
02329                 if (!ok) 
02330                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
02331                 ok &= (!osresult1->IsEqual(osresult2));
02332                 if (!ok) 
02333                         throw ErrorClass("setAvailableDiskSpaceUnit: osresult objects falsely compare equal!");
02334                 ok &= osresult2->setAvailableDiskSpaceUnit("megabyte");
02335                 if (!ok) 
02336                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
02337                 ok &= (osresult1->IsEqual(osresult2));
02338                 if (!ok) 
02339                         throw ErrorClass("setAvailableDiskSpaceUnit: osresult objects falsely compare unequal!");
02340 
02341                 ok &= osresult1->setAvailableDiskSpaceDescription("testing 123");
02342                 if (!ok) 
02343                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
02344                 ok &= (!osresult1->IsEqual(osresult2));
02345                 if (!ok) 
02346                         throw ErrorClass("setAvailableDiskSpaceDescription: osresult objects falsely compare equal!");
02347                 ok &= osresult2->setAvailableDiskSpaceDescription("testing 123");
02348                 if (!ok) 
02349                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
02350                 ok &= (osresult1->IsEqual(osresult2));
02351                 if (!ok) 
02352                         throw ErrorClass("setAvailableDiskSpaceDescription: osresult objects falsely compare unequal!");
02353 
02354                 ok &= osresult1->setAvailableDiskSpaceValue(100.0);
02355                 if (!ok) 
02356                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
02357                 ok &= (!osresult1->IsEqual(osresult2));
02358                 if (!ok) 
02359                         throw ErrorClass("setAvailableDiskSpaceValue: osresult objects falsely compare equal!");
02360                 ok &= osresult2->setAvailableDiskSpaceValue(100.0);
02361                 if (!ok) 
02362                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
02363                 ok &= (osresult1->IsEqual(osresult2));
02364                 if (!ok) 
02365                         throw ErrorClass("setAvailableDiskSpaceValue: osresult objects falsely compare unequal!");
02366 
02367                 ok &= osresult1->setAvailableMemoryUnit("megabyte");
02368                 if (!ok) 
02369                         throw ErrorClass("Error during setAvailableMemoryUnit!");
02370                 ok &= (!osresult1->IsEqual(osresult2));
02371                 if (!ok) 
02372                         throw ErrorClass("setAvailableMemoryUnit: osresult objects falsely compare equal!");
02373                 ok &= osresult2->setAvailableMemoryUnit("megabyte");
02374                 if (!ok) 
02375                         throw ErrorClass("Error during setAvailableMemoryUnit!");
02376                 ok &= (osresult1->IsEqual(osresult2));
02377                 if (!ok) 
02378                         throw ErrorClass("setAvailableMemoryUnit: osresult objects falsely compare unequal!");
02379 
02380                 ok &= osresult1->setAvailableMemoryDescription("testing 123");
02381                 if (!ok) 
02382                         throw ErrorClass("Error during setAvailableMemoryDescription!");
02383                 ok &= (!osresult1->IsEqual(osresult2));
02384                 if (!ok) 
02385                         throw ErrorClass("setAvailableMemoryDescription: osresult objects falsely compare equal!");
02386                 ok &= osresult2->setAvailableMemoryDescription("testing 123");
02387                 if (!ok) 
02388                         throw ErrorClass("Error during setAvailableMemoryDescription!");
02389                 ok &= (osresult1->IsEqual(osresult2));
02390                 if (!ok) 
02391                         throw ErrorClass("setAvailableMemoryDescription: osresult objects falsely compare unequal!");
02392 
02393                 ok &= osresult1->setAvailableMemoryValue(100.0);
02394                 if (!ok) 
02395                         throw ErrorClass("Error during setAvailableMemoryValue!");
02396                 ok &= (!osresult1->IsEqual(osresult2));
02397                 if (!ok) 
02398                         throw ErrorClass("setAvailableMemoryValue: osresult objects falsely compare equal!");
02399                 ok &= osresult2->setAvailableMemoryValue(100.0);
02400                 if (!ok) 
02401                         throw ErrorClass("Error during setAvailableMemoryValue!");
02402                 ok &= (osresult1->IsEqual(osresult2));
02403                 if (!ok) 
02404                         throw ErrorClass("setAvailableMemoryValue: osresult objects falsely compare unequal!");
02405 
02406                 ok &= osresult1->setAvailableCPUSpeedUnit("megahertz");
02407                 if (!ok) 
02408                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
02409                 ok &= (!osresult1->IsEqual(osresult2));
02410                 if (!ok) 
02411                         throw ErrorClass("setAvailableCPUSpeedUnit: osresult objects falsely compare equal!");
02412                 ok &= osresult2->setAvailableCPUSpeedUnit("megahertz");
02413                 if (!ok) 
02414                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
02415                 ok &= (osresult1->IsEqual(osresult2));
02416                 if (!ok) 
02417                         throw ErrorClass("setAvailableCPUSpeedUnit: osresult objects falsely compare unequal!");
02418 
02419                 ok &= osresult1->setAvailableCPUSpeedDescription("testing 123");
02420                 if (!ok) 
02421                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
02422                 ok &= (!osresult1->IsEqual(osresult2));
02423                 if (!ok) 
02424                         throw ErrorClass("setAvailableCPUSpeedDescription: osresult objects falsely compare equal!");
02425                 ok &= osresult2->setAvailableCPUSpeedDescription("testing 123");
02426                 if (!ok) 
02427                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
02428                 ok &= (osresult1->IsEqual(osresult2));
02429                 if (!ok) 
02430                         throw ErrorClass("setAvailableCPUSpeedDescription: osresult objects falsely compare unequal!");
02431 
02432                 ok &= osresult1->setAvailableCPUSpeedValue(100.0);
02433                 if (!ok) 
02434                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
02435                 ok &= (!osresult1->IsEqual(osresult2));
02436                 if (!ok) 
02437                         throw ErrorClass("setAvailableCPUSpeedValue: osresult objects falsely compare equal!");
02438                 ok &= osresult2->setAvailableCPUSpeedValue(100.0);
02439                 if (!ok) 
02440                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
02441                 ok &= (osresult1->IsEqual(osresult2));
02442                 if (!ok) 
02443                         throw ErrorClass("setAvailableCPUSpeedValue: osresult objects falsely compare unequal!");
02444 
02445                 ok &= osresult1->setAvailableCPUNumberDescription("testing 123");
02446                 if (!ok) 
02447                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
02448                 ok &= (!osresult1->IsEqual(osresult2));
02449                 if (!ok) 
02450                         throw ErrorClass("setAvailableCPUNumberDescription: osresult objects falsely compare equal!");
02451                 ok &= osresult2->setAvailableCPUNumberDescription("testing 123");
02452                 if (!ok) 
02453                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
02454                 ok &= (osresult1->IsEqual(osresult2));
02455                 if (!ok) 
02456                         throw ErrorClass("setAvailableCPUNumberDescription: osresult objects falsely compare unequal!");
02457 
02458                 ok &= osresult1->setAvailableCPUNumberValue(100);
02459                 if (!ok) 
02460                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
02461                 ok &= (!osresult1->IsEqual(osresult2));
02462                 if (!ok) 
02463                         throw ErrorClass("setAvailableCPUNumberValue: osresult objects falsely compare equal!");
02464                 ok &= osresult2->setAvailableCPUNumberValue(100);
02465                 if (!ok) 
02466                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
02467                 ok &= (osresult1->IsEqual(osresult2));
02468                 if (!ok) 
02469                         throw ErrorClass("setAvailableCPUNumberValue: osresult objects falsely compare unequal!");
02470 
02471                 ok &= osresult1->setNumberOfOtherSystemResults(3);
02472                 if (!ok) 
02473                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
02474                 ok &= (!osresult1->IsEqual(osresult2));
02475                 if (!ok) 
02476                         throw ErrorClass("setNumberOfOtherSystemResults: osresult objects falsely compare equal!");
02477                 ok &= osresult2->setNumberOfOtherSystemResults(3);
02478                 if (!ok) 
02479                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
02480                 ok &= (osresult1->IsEqual(osresult2));
02481                 if (!ok) 
02482                         throw ErrorClass("setNumberOfOtherSystemResults: osresult objects falsely compare unequal!");
02483 
02484                 for (int i=0; i < 3; ++i)
02485                 {
02486                         ok &= osresult1->setOtherSystemResultName(i,"some name");
02487                         if (!ok) 
02488                                 throw ErrorClass("Error during setOtherSystemResultName!");
02489                         ok &= (!osresult1->IsEqual(osresult2));
02490                         if (!ok) 
02491                                 throw ErrorClass("setOtherSystemResultName: osresult objects falsely compare equal!");
02492                         ok &= osresult2->setOtherSystemResultName(i,"some name");
02493                         if (!ok) 
02494                                 throw ErrorClass("Error during setOtherSystemResultName!");
02495                         ok &= (osresult1->IsEqual(osresult2));
02496                         if (!ok) 
02497                                 throw ErrorClass("setOtherSystemResultName: osresult objects falsely compare unequal!");
02498 
02499                         ok &= osresult1->setOtherSystemResultValue(i,"some value");
02500                         if (!ok) 
02501                                 throw ErrorClass("Error during setOtherSystemResultValue!");
02502                         ok &= (!osresult1->IsEqual(osresult2));
02503                         if (!ok) 
02504                                 throw ErrorClass("setOtherSystemResultValue: osresult objects falsely compare equal!");
02505                         ok &= osresult2->setOtherSystemResultValue(i,"some value");
02506                         if (!ok) 
02507                                 throw ErrorClass("Error during setOtherSystemResultValue!");
02508                         ok &= (osresult1->IsEqual(osresult2));
02509                         if (!ok) 
02510                                 throw ErrorClass("setOtherSystemResultValue: osresult objects falsely compare unequal!");
02511 
02512                         ok &= osresult1->setOtherSystemResultDescription(i,"ABC 123");
02513                         if (!ok) 
02514                                 throw ErrorClass("Error during setSOtherSystemResultDescription!");
02515                         ok &= (!osresult1->IsEqual(osresult2));
02516                         if (!ok) 
02517                                 throw ErrorClass("setOtherSystemResultDescription: osresult objects falsely compare equal!");
02518                         ok &= osresult2->setOtherSystemResultDescription(i,"ABC 123");
02519                         if (!ok) 
02520                                 throw ErrorClass("Error during setOtherSystemResultDescription!");
02521                         ok &= (osresult1->IsEqual(osresult2));
02522                         if (!ok) 
02523                                 throw ErrorClass("setOtherSystemResultDescription: osresult objects falsely compare unequal!");
02524                 }
02525 
02526 //  <service> element
02527                 ok &= osresult1->setCurrentState("busy");
02528                 if (!ok) 
02529                         throw ErrorClass("Error during setCurrentState!");
02530                 ok &= (!osresult1->IsEqual(osresult2));
02531                 if (!ok) 
02532                         throw ErrorClass("setCurrentState: osresult objects falsely compare equal!");
02533                 ok &= osresult2->setCurrentState("busy");
02534                 if (!ok) 
02535                         throw ErrorClass("Error during setCurrentState!");
02536                 ok &= (osresult1->IsEqual(osresult2));
02537                 if (!ok) 
02538                         throw ErrorClass("setCurrentState: osresult objects falsely compare unequal!");
02539 
02540                 ok &= osresult1->setCurrentJobCount(123);
02541                 if (!ok) 
02542                         throw ErrorClass("Error during setCurrentJobCount!");
02543                 ok &= (!osresult1->IsEqual(osresult2));
02544                 if (!ok) 
02545                         throw ErrorClass("setCurrentJobCount: osresult objects falsely compare equal!");
02546                 ok &= osresult2->setCurrentJobCount(123);
02547                 if (!ok) 
02548                         throw ErrorClass("Error during setCurrentJobCount!");
02549                 ok &= (osresult1->IsEqual(osresult2));
02550                 if (!ok) 
02551                         throw ErrorClass("setCurrentJobCount: osresult objects falsely compare unequal!");
02552 
02553                 ok &= osresult1->setTotalJobsSoFar(123);
02554                 if (!ok) 
02555                         throw ErrorClass("Error during setTotalJobsSoFar!");
02556                 ok &= (!osresult1->IsEqual(osresult2));
02557                 if (!ok) 
02558                         throw ErrorClass("setTotalJobsSoFar: osresult objects falsely compare equal!");
02559                 ok &= osresult2->setTotalJobsSoFar(123);
02560                 if (!ok) 
02561                         throw ErrorClass("Error during setTotalJobsSoFar!");
02562                 ok &= (osresult1->IsEqual(osresult2));
02563                 if (!ok) 
02564                         throw ErrorClass("setTotalJobsSoFar: osresult objects falsely compare unequal!");
02565 
02566                 ok &= osresult1->setTimeServiceStarted("2001-12-17T09:30:47.0Z");
02567                 if (!ok) 
02568                         throw ErrorClass("Error during setTimeServiceStarted!");
02569                 ok &= (!osresult1->IsEqual(osresult2));
02570                 if (!ok) 
02571                         throw ErrorClass("setTimeServiceStarted: osresult objects falsely compare equal!");
02572                 ok &= osresult2->setTimeServiceStarted("2001-12-17T09:30:47.0Z");
02573                 if (!ok) 
02574                         throw ErrorClass("Error during setTimeServiceStarted!");
02575                 ok &= (osresult1->IsEqual(osresult2));
02576                 if (!ok) 
02577                         throw ErrorClass("setTimeServiceStarted: osresult objects falsely compare unequal!");
02578 
02579                 ok &= osresult1->setServiceUtilization(0.8);
02580                 if (!ok) 
02581                         throw ErrorClass("Error during setServiceUtilization!");
02582                 ok &= (!osresult1->IsEqual(osresult2));
02583                 if (!ok) 
02584                         throw ErrorClass("setServiceUtilization: osresult objects falsely compare equal!");
02585                 ok &= osresult2->setServiceUtilization(0.8);
02586                 if (!ok) 
02587                         throw ErrorClass("Error during setServiceUtilization!");
02588                 ok &= (osresult1->IsEqual(osresult2));
02589                 if (!ok) 
02590                         throw ErrorClass("setServiceUtilization: osresult objects falsely compare unequal!");
02591 
02592                 ok &= osresult1->setNumberOfOtherServiceResults(3);
02593                 if (!ok) 
02594                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
02595                 ok &= (!osresult1->IsEqual(osresult2));
02596                 if (!ok) 
02597                         throw ErrorClass("setNumberOfOtherServiceResults: osresult objects falsely compare equal!");
02598                 ok &= osresult2->setNumberOfOtherServiceResults(3);
02599                 if (!ok) 
02600                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
02601                 ok &= (osresult1->IsEqual(osresult2));
02602                 if (!ok) 
02603                         throw ErrorClass("setNumberOfOtherServiceResults: osresult objects falsely compare unequal!");
02604 
02605                 for (int i=0; i < 3; ++i)
02606                 {
02607                         ok &= osresult1->setOtherServiceResultName(i,"some name");
02608                         if (!ok) 
02609                                 throw ErrorClass("Error during setOtherServiceResultName!");
02610                         ok &= (!osresult1->IsEqual(osresult2));
02611                         if (!ok) 
02612                                 throw ErrorClass("setOtherServiceResultName: osresult objects falsely compare equal!");
02613                         ok &= osresult2->setOtherServiceResultName(i,"some name");
02614                         if (!ok) 
02615                                 throw ErrorClass("Error during setOtherServiceResultName!");
02616                         ok &= (osresult1->IsEqual(osresult2));
02617                         if (!ok) 
02618                                 throw ErrorClass("setOtherServiceResultName: osresult objects falsely compare unequal!");
02619 
02620                         ok &= osresult1->setOtherServiceResultValue(i,"some value");
02621                         if (!ok) 
02622                                 throw ErrorClass("Error during setOtherServiceResultValue!");
02623                         ok &= (!osresult1->IsEqual(osresult2));
02624                         if (!ok) 
02625                                 throw ErrorClass("setOtherServiceResultValue: osresult objects falsely compare equal!");
02626                         ok &= osresult2->setOtherServiceResultValue(i,"some value");
02627                         if (!ok) 
02628                                 throw ErrorClass("Error during setOtherServiceResultValue!");
02629                         ok &= (osresult1->IsEqual(osresult2));
02630                         if (!ok) 
02631                                 throw ErrorClass("setOtherServiceResultValue: osresult objects falsely compare unequal!");
02632 
02633                         ok &= osresult1->setOtherServiceResultDescription(i,"ABC 123");
02634                         if (!ok) 
02635                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
02636                         ok &= (!osresult1->IsEqual(osresult2));
02637                         if (!ok) 
02638                                 throw ErrorClass("setOtherServiceResultDescription: osresult objects falsely compare equal!");
02639                         ok &= osresult2->setOtherServiceResultDescription(i,"ABC 123");
02640                         if (!ok) 
02641                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
02642                         ok &= (osresult1->IsEqual(osresult2));
02643                         if (!ok) 
02644                                 throw ErrorClass("setOtherServiceResultDescription: osresult objects falsely compare unequal!");
02645                 }
02646 //======================
02647 //      <job> element
02648                 ok &= osresult1->setJobStatus("waiting");
02649                 if (!ok) 
02650                         throw ErrorClass("Error during setJobStatus!");
02651                 ok &= (!osresult1->IsEqual(osresult2));
02652                 if (!ok) 
02653                         throw ErrorClass("setJobStatus: osresult objects falsely compare equal!");
02654                 ok &= osresult2->setJobStatus("waiting");
02655                 if (!ok) 
02656                         throw ErrorClass("Error during setJobStatus!");
02657                 ok &= (osresult1->IsEqual(osresult2));
02658                 if (!ok) 
02659                         throw ErrorClass("setJobStatus: osresult objects falsely compare unequal!");
02660 
02661                 ok &= osresult1->setJobSubmitTime("2001-12-17T09:30:47.0Z");
02662                 if (!ok) 
02663                         throw ErrorClass("Error during setJobSubmitTime!");
02664                 ok &= (!osresult1->IsEqual(osresult2));
02665                 if (!ok) 
02666                         throw ErrorClass("setJobSubmitTime: osresult objects falsely compare equal!");
02667                 ok &= osresult2->setJobSubmitTime("2001-12-17T09:30:47.0Z");
02668                 if (!ok) 
02669                         throw ErrorClass("Error during setJobSubmitTime!");
02670                 ok &= (osresult1->IsEqual(osresult2));
02671                 if (!ok) 
02672                         throw ErrorClass("setJobSubmitTime: osresult objects falsely compare unequal!");
02673 
02674                 ok &= osresult1->setScheduledStartTime("2001-12-17T09:30:47.0Z");
02675                 if (!ok) 
02676                         throw ErrorClass("Error during setScheduledStartTime!");
02677                 ok &= (!osresult1->IsEqual(osresult2));
02678                 if (!ok) 
02679                         throw ErrorClass("setScheduledStartTime: osresult objects falsely compare equal!");
02680                 ok &= osresult2->setScheduledStartTime("2001-12-17T09:30:47.0Z");
02681                 if (!ok) 
02682                         throw ErrorClass("Error during setScheduledStartTime!");
02683                 ok &= (osresult1->IsEqual(osresult2));
02684                 if (!ok) 
02685                         throw ErrorClass("setScheduledStartTime: osresult objects falsely compare unequal!");
02686 
02687                 ok &= osresult1->setActualStartTime("2001-12-17T09:30:47.0Z");
02688                 if (!ok) 
02689                         throw ErrorClass("Error during setActualStartTime!");
02690                 ok &= (!osresult1->IsEqual(osresult2));
02691                 if (!ok) 
02692                         throw ErrorClass("setActualStartTime: osresult objects falsely compare equal!");
02693                 ok &= osresult2->setActualStartTime("2001-12-17T09:30:47.0Z");
02694                 if (!ok) 
02695                         throw ErrorClass("Error during setActualStartTime!");
02696                 ok &= (osresult1->IsEqual(osresult2));
02697                 if (!ok) 
02698                         throw ErrorClass("setActualStartTime: osresult objects falsely compare unequal!");
02699 
02700                 ok &= osresult1->setJobEndTime("2001-12-17T09:30:47.0Z");
02701                 if (!ok) 
02702                         throw ErrorClass("Error during setJobEndTime!");
02703                 ok &= (!osresult1->IsEqual(osresult2));
02704                 if (!ok) 
02705                         throw ErrorClass("setJobEndTime: osresult objects falsely compare equal!");
02706                 ok &= osresult2->setJobEndTime("2001-12-17T09:30:47.0Z");
02707                 if (!ok) 
02708                         throw ErrorClass("Error during setJobEndTime!");
02709                 ok &= (osresult1->IsEqual(osresult2));
02710                 if (!ok) 
02711                         throw ErrorClass("setJobEndTime: osresult objects falsely compare unequal!");
02712 
02713                 ok &= osresult1->setNumberOfTimes(3);
02714                 if (!ok) 
02715                         throw ErrorClass("Error during setNumberOfTimes!");
02716                 ok &= (!osresult1->IsEqual(osresult2));
02717                 if (!ok) 
02718                         throw ErrorClass("setNumberOfTimes: osresult objects falsely compare equal!");
02719                 ok &= osresult2->setNumberOfTimes(3);
02720                 if (!ok) 
02721                         throw ErrorClass("Error during setNumberOfTimes!");
02722                 ok &= (osresult1->IsEqual(osresult2));
02723                 if (!ok) 
02724                         throw ErrorClass("setNumberOfTimes: osresult objects falsely compare unequal!");
02725 
02726                 for (int i=0; i < 3; ++i)
02727                 {
02728                         ok &= osresult1->setTimingInformation(i,"cpuTime","other",/*"tick",*/"second","blabla",3.14);
02729                         if (!ok) 
02730                                 throw ErrorClass("Error during setTimingInformation!");
02731                         ok &= (!osresult1->IsEqual(osresult2));
02732                         if (!ok) 
02733                                 throw ErrorClass("setTimingInformation: osresult objects falsely compare equal!");
02734                         ok &= osresult2->setTimingInformation(i,"cpuTime","other",/*"tick",*/"second","blabla",3.14);
02735                         if (!ok) 
02736                                 throw ErrorClass("Error during setTimingInformation!");
02737                         ok &= (osresult1->IsEqual(osresult2));
02738                         if (!ok) 
02739                                 throw ErrorClass("setTimingInformation: osresult objects falsely compare unequal!");
02740 
02741                 }
02742 
02743                 ok &= osresult1->setUsedDiskSpaceUnit("megabyte");
02744                 if (!ok) 
02745                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
02746                 ok &= (!osresult1->IsEqual(osresult2));
02747                 if (!ok) 
02748                         throw ErrorClass("setUsedDiskSpaceUnit: osresult objects falsely compare equal!");
02749                 ok &= osresult2->setUsedDiskSpaceUnit("megabyte");
02750                 if (!ok) 
02751                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
02752                 ok &= (osresult1->IsEqual(osresult2));
02753                 if (!ok) 
02754                         throw ErrorClass("setUsedDiskSpaceUnit: osresult objects falsely compare unequal!");
02755 
02756                 ok &= osresult1->setUsedDiskSpaceDescription("testing 123");
02757                 if (!ok) 
02758                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
02759                 ok &= (!osresult1->IsEqual(osresult2));
02760                 if (!ok) 
02761                         throw ErrorClass("setUsedDiskSpaceDescription: osresult objects falsely compare equal!");
02762                 ok &= osresult2->setUsedDiskSpaceDescription("testing 123");
02763                 if (!ok) 
02764                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
02765                 ok &= (osresult1->IsEqual(osresult2));
02766                 if (!ok) 
02767                         throw ErrorClass("setUsedDiskSpaceDescription: osresult objects falsely compare unequal!");
02768 
02769                 ok &= osresult1->setUsedDiskSpaceValue(100.0);
02770                 if (!ok) 
02771                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
02772                 ok &= (!osresult1->IsEqual(osresult2));
02773                 if (!ok) 
02774                         throw ErrorClass("setUsedDiskSpaceValue: osresult objects falsely compare equal!");
02775                 ok &= osresult2->setUsedDiskSpaceValue(100.0);
02776                 if (!ok) 
02777                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
02778                 ok &= (osresult1->IsEqual(osresult2));
02779                 if (!ok) 
02780                         throw ErrorClass("setUsedDiskSpaceValue: osresult objects falsely compare unequal!");
02781 
02782                 ok &= osresult1->setUsedMemoryUnit("megabyte");
02783                 if (!ok) 
02784                         throw ErrorClass("Error during setUsedMemoryUnit!");
02785                 ok &= (!osresult1->IsEqual(osresult2));
02786                 if (!ok) 
02787                         throw ErrorClass("setUsedMemoryUnit: osresult objects falsely compare equal!");
02788                 ok &= osresult2->setUsedMemoryUnit("megabyte");
02789                 if (!ok) 
02790                         throw ErrorClass("Error during setUsedMemoryUnit!");
02791                 ok &= (osresult1->IsEqual(osresult2));
02792                 if (!ok) 
02793                         throw ErrorClass("setUsedMemoryUnit: osresult objects falsely compare unequal!");
02794 
02795                 ok &= osresult1->setUsedMemoryDescription("testing 123");
02796                 if (!ok) 
02797                         throw ErrorClass("Error during setUsedMemoryDescription!");
02798                 ok &= (!osresult1->IsEqual(osresult2));
02799                 if (!ok) 
02800                         throw ErrorClass("setUsedMemoryDescription: osresult objects falsely compare equal!");
02801                 ok &= osresult2->setUsedMemoryDescription("testing 123");
02802                 if (!ok) 
02803                         throw ErrorClass("Error during setUsedMemoryDescription!");
02804                 ok &= (osresult1->IsEqual(osresult2));
02805                 if (!ok) 
02806                         throw ErrorClass("setUsedMemoryDescription: osresult objects falsely compare unequal!");
02807 
02808                 ok &= osresult1->setUsedMemoryValue(100.0);
02809                 if (!ok) 
02810                         throw ErrorClass("Error during setUsedMemoryValue!");
02811                 ok &= (!osresult1->IsEqual(osresult2));
02812                 if (!ok) 
02813                         throw ErrorClass("setUsedMemoryValue: osresult objects falsely compare equal!");
02814                 ok &= osresult2->setUsedMemoryValue(100.0);
02815                 if (!ok) 
02816                         throw ErrorClass("Error during setUsedMemoryValue!");
02817                 ok &= (osresult1->IsEqual(osresult2));
02818                 if (!ok) 
02819                         throw ErrorClass("setUsedMemoryValue: osresult objects falsely compare unequal!");
02820 
02821                 ok &= osresult1->setUsedCPUSpeedUnit("megahertz");
02822                 if (!ok) 
02823                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
02824                 ok &= (!osresult1->IsEqual(osresult2));
02825                 if (!ok) 
02826                         throw ErrorClass("setUsedCPUSpeedUnit: osresult objects falsely compare equal!");
02827                 ok &= osresult2->setUsedCPUSpeedUnit("megahertz");
02828                 if (!ok) 
02829                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
02830                 ok &= (osresult1->IsEqual(osresult2));
02831                 if (!ok) 
02832                         throw ErrorClass("setUsedCPUSpeedUnit: osresult objects falsely compare unequal!");
02833 
02834                 ok &= osresult1->setUsedCPUSpeedDescription("testing 123");
02835                 if (!ok) 
02836                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
02837                 ok &= (!osresult1->IsEqual(osresult2));
02838                 if (!ok) 
02839                         throw ErrorClass("setUsedCPUSpeedDescription: osresult objects falsely compare equal!");
02840                 ok &= osresult2->setUsedCPUSpeedDescription("testing 123");
02841                 if (!ok) 
02842                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
02843                 ok &= (osresult1->IsEqual(osresult2));
02844                 if (!ok) 
02845                         throw ErrorClass("setUsedCPUSpeedDescription: osresult objects falsely compare unequal!");
02846 
02847                 ok &= osresult1->setUsedCPUSpeedValue(100.0);
02848                 if (!ok) 
02849                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
02850                 ok &= (!osresult1->IsEqual(osresult2));
02851                 if (!ok) 
02852                         throw ErrorClass("setUsedCPUSpeedValue: osresult objects falsely compare equal!");
02853                 ok &= osresult2->setUsedCPUSpeedValue(100.0);
02854                 if (!ok) 
02855                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
02856                 ok &= (osresult1->IsEqual(osresult2));
02857                 if (!ok) 
02858                         throw ErrorClass("setUsedCPUSpeedValue: osresult objects falsely compare unequal!");
02859 
02860                 ok &= osresult1->setUsedCPUNumberDescription("testing 123");
02861                 if (!ok) 
02862                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
02863                 ok &= (!osresult1->IsEqual(osresult2));
02864                 if (!ok) 
02865                         throw ErrorClass("setUsedCPUNumberDescription: osresult objects falsely compare equal!");
02866                 ok &= osresult2->setUsedCPUNumberDescription("testing 123");
02867                 if (!ok) 
02868                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
02869                 ok &= (osresult1->IsEqual(osresult2));
02870                 if (!ok) 
02871                         throw ErrorClass("setUsedCPUNumberDescription: osresult objects falsely compare unequal!");
02872 
02873                 ok &= osresult1->setUsedCPUNumberValue(100);
02874                 if (!ok) 
02875                         throw ErrorClass("Error during setUsedCPUNumberValue!");
02876                 ok &= (!osresult1->IsEqual(osresult2));
02877                 if (!ok) 
02878                         throw ErrorClass("setUsedCPUNumberValue: osresult objects falsely compare equal!");
02879                 ok &= osresult2->setUsedCPUNumberValue(100);
02880                 if (!ok) 
02881                         throw ErrorClass("Error during setUsedCPUNumberValue!");
02882                 ok &= (osresult1->IsEqual(osresult2));
02883                 if (!ok) 
02884                         throw ErrorClass("setUsedCPUNumberValue: osresult objects falsely compare unequal!");
02885 
02886                 ok &= osresult1->setNumberOfOtherJobResults(3);
02887                 if (!ok) 
02888                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
02889                 ok &= (!osresult1->IsEqual(osresult2));
02890                 if (!ok) 
02891                         throw ErrorClass("setNumberOfOtherJobResults: osresult objects falsely compare equal!");
02892                 ok &= osresult2->setNumberOfOtherJobResults(3);
02893                 if (!ok) 
02894                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
02895                 ok &= (osresult1->IsEqual(osresult2));
02896                 if (!ok) 
02897                         throw ErrorClass("setNumberOfOtherJobResults: osresult objects falsely compare unequal!");
02898 
02899                 for (int i=0; i < 3; ++i)
02900                 {
02901                         ok &= osresult1->setOtherJobResultName(i,"some name");
02902                         if (!ok) 
02903                                 throw ErrorClass("Error during setOtherJobResultName!");
02904                         ok &= (!osresult1->IsEqual(osresult2));
02905                         if (!ok) 
02906                                 throw ErrorClass("setOtherJobResultName: osresult objects falsely compare equal!");
02907                         ok &= osresult2->setOtherJobResultName(i,"some name");
02908                         if (!ok) 
02909                                 throw ErrorClass("Error during setOtherJobResultName!");
02910                         ok &= (osresult1->IsEqual(osresult2));
02911                         if (!ok) 
02912                                 throw ErrorClass("setOtherJobResultName: osresult objects falsely compare unequal!");
02913 
02914                         ok &= osresult1->setOtherJobResultValue(i,"some value");
02915                         if (!ok) 
02916                                 throw ErrorClass("Error during setOtherJobResultValue!");
02917                         ok &= (!osresult1->IsEqual(osresult2));
02918                         if (!ok) 
02919                                 throw ErrorClass("setOtherJobResultValue: osresult objects falsely compare equal!");
02920                         ok &= osresult2->setOtherJobResultValue(i,"some value");
02921                         if (!ok) 
02922                                 throw ErrorClass("Error during setOtherJobResultValue!");
02923                         ok &= (osresult1->IsEqual(osresult2));
02924                         if (!ok) 
02925                                 throw ErrorClass("setOtherJobResultValue: osresult objects falsely compare unequal!");
02926 
02927                         ok &= osresult1->setOtherJobResultDescription(i,"ABC 123");
02928                         if (!ok) 
02929                                 throw ErrorClass("Error during setOtherJobResultDescription!");
02930                         ok &= (!osresult1->IsEqual(osresult2));
02931                         if (!ok) 
02932                                 throw ErrorClass("setOtherJobResultDescription: osresult objects falsely compare equal!");
02933                         ok &= osresult2->setOtherJobResultDescription(i,"ABC 123");
02934                         if (!ok) 
02935                                 throw ErrorClass("Error during setOtherJobResultDescription!");
02936                         ok &= (osresult1->IsEqual(osresult2));
02937                         if (!ok) 
02938                                 throw ErrorClass("setOtherJobResultDescription: osresult objects falsely compare unequal!");
02939                 }
02940 
02941                 ok &= osresult1->setSolutionNumber(2);
02942                 if (!ok) 
02943                         throw ErrorClass("Error during setSolutionNumber!");
02944                 ok &= (!osresult1->IsEqual(osresult2));
02945                 if (!ok) 
02946                         throw ErrorClass("setSolutionNumber: osresult objects falsely compare equal!");
02947                 ok &= osresult2->setSolutionNumber(2);
02948                 if (!ok) 
02949                         throw ErrorClass("Error during setSolutionNumber!");
02950                 ok &= (osresult1->IsEqual(osresult2));
02951                 if (!ok) 
02952                         throw ErrorClass("setSolutionNumber: osresult objects falsely compare unequal!");
02953 
02954                 ok &= osresult1->setVariableNumber(4);
02955                 if (!ok) 
02956                         throw ErrorClass("Error during setVariableNumber!");
02957                 ok &= (!osresult1->IsEqual(osresult2));
02958                 if (!ok) 
02959                         throw ErrorClass("setVariableNumber: osresult objects falsely compare equal!");
02960                 ok &= osresult2->setVariableNumber(4);
02961                 if (!ok) 
02962                         throw ErrorClass("Error during setVariableNumber!");
02963                 ok &= (osresult1->IsEqual(osresult2));
02964                 if (!ok) 
02965                         throw ErrorClass("setVariableNumber: osresult objects falsely compare unequal!");
02966 
02967                 ok &= osresult1->setObjectiveNumber(2);
02968                 if (!ok) 
02969                         throw ErrorClass("Error during setObjectiveNumber!");
02970                 ok &= (!osresult1->IsEqual(osresult2));
02971                 if (!ok) 
02972                         throw ErrorClass("setObjectiveNumber: osresult objects falsely compare equal!");
02973                 ok &= osresult2->setObjectiveNumber(2);
02974                 if (!ok) 
02975                         throw ErrorClass("Error during setObjectiveNumber!");
02976                 ok &= (osresult1->IsEqual(osresult2));
02977                 if (!ok) 
02978                         throw ErrorClass("setObjectiveNumber: osresult objects falsely compare unequal!");
02979 
02980                 ok &= osresult1->setConstraintNumber(3);
02981                 if (!ok) 
02982                         throw ErrorClass("Error during setConstraintNumber!");
02983                 ok &= (!osresult1->IsEqual(osresult2));
02984                 if (!ok) 
02985                         throw ErrorClass("setConstraintNumber: osresult objects falsely compare equal!");
02986                 ok &= osresult2->setConstraintNumber(3);
02987                 if (!ok) 
02988                         throw ErrorClass("Error during setConstraintNumber!");
02989                 ok &= (osresult1->IsEqual(osresult2));
02990                 if (!ok) 
02991                         throw ErrorClass("setConstraintNumber: osresult objects falsely compare unequal!");
02992 
02993                 for (int i=0; i < 2; ++i)
02994                 {
02995                         ok &= osresult1->setSolutionTargetObjectiveIdx(i,-2);
02996                         if (!ok) 
02997                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
02998                         ok &= (!osresult1->IsEqual(osresult2));
02999                         if (!ok) 
03000                                 throw ErrorClass("setSolutionTargetObjectiveIdx: osresult objects falsely compare equal!");
03001                         ok &= osresult2->setSolutionTargetObjectiveIdx(i,-2);
03002                         if (!ok) 
03003                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
03004                         ok &= (osresult1->IsEqual(osresult2));
03005                         if (!ok) 
03006                                 throw ErrorClass("setSolutionTargetObjectiveIdx: osresult objects falsely compare unequal!");
03007 
03008                         ok &= osresult1->setSolutionTargetObjectiveName(i,"a.n.other");
03009                         if (!ok) 
03010                                 throw ErrorClass("Error during setSolutionTargetObjectiveName!");
03011                         ok &= (!osresult1->IsEqual(osresult2));
03012                         if (!ok) 
03013                                 throw ErrorClass("setSolutionTargetObjectiveName: osresult objects falsely compare equal!");
03014                         ok &= osresult2->setSolutionTargetObjectiveName(i,"a.n.other");
03015                         if (!ok) 
03016                                 throw ErrorClass("Error during setSolutionTargetObjectiveName!");
03017                         ok &= (osresult1->IsEqual(osresult2));
03018                         if (!ok) 
03019                                 throw ErrorClass("setSolutionTargetObjectiveName: osresult objects falsely compare unequal!");
03020 
03021                         ok &= osresult1->setSolutionWeightedObjectives(i,"true");
03022                         if (!ok) 
03023                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
03024                         ok &= (!osresult1->IsEqual(osresult2));
03025                         if (!ok) 
03026                                 throw ErrorClass("setSolutionWeightedObjectives: osresult objects falsely compare equal!");
03027                         ok &= osresult2->setSolutionWeightedObjectives(i,"true");
03028                         if (!ok) 
03029                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
03030                         ok &= (osresult1->IsEqual(osresult2));
03031                         if (!ok) 
03032                                 throw ErrorClass("setSolutionWeightedObjectives: osresult objects falsely compare unequal!");
03033 
03034                         ok &= osresult1->setSolutionStatusType(i,"locallyOptimal");
03035                         if (!ok) 
03036                                 throw ErrorClass("Error during setSolutionStatusType!");
03037                         ok &= (!osresult1->IsEqual(osresult2));
03038                         if (!ok) 
03039                                 throw ErrorClass("setSolutionStatusType: osresult objects falsely compare equal!");
03040                         ok &= osresult2->setSolutionStatusType(i,"locallyOptimal");
03041                         if (!ok) 
03042                                 throw ErrorClass("Error during setSolutionStatusType!");
03043                         ok &= (osresult1->IsEqual(osresult2));
03044                         if (!ok) 
03045                                 throw ErrorClass("setSolutionStatusType: osresult objects falsely compare unequal!");
03046 
03047                         ok &= osresult1->setSolutionStatusDescription(i,"ABC 123");
03048                         if (!ok) 
03049                                 throw ErrorClass("Error during setSolutionStatusDescription!");
03050                         ok &= (!osresult1->IsEqual(osresult2));
03051                         if (!ok) 
03052                                 throw ErrorClass("setSolutionStatusDescription: osresult objects falsely compare equal!");
03053                         ok &= osresult2->setSolutionStatusDescription(i,"ABC 123");
03054                         if (!ok) 
03055                                 throw ErrorClass("Error during setSolutionStatusDescription!");
03056                         ok &= (osresult1->IsEqual(osresult2));
03057                         if (!ok) 
03058                                 throw ErrorClass("setSolutionStatusDescription: osresult objects falsely compare unequal!");
03059 
03060                         ok &= osresult1->setNumberOfSolutionSubstatuses(i,3);
03061                         if (!ok) 
03062                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
03063                         ok &= (!osresult1->IsEqual(osresult2));
03064                         if (!ok) 
03065                                 throw ErrorClass("setNumberOfSolutionSubstatuses: osresult objects falsely compare equal!");
03066                         ok &= osresult2->setNumberOfSolutionSubstatuses(i,3);
03067                         if (!ok) 
03068                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
03069                         ok &= (osresult1->IsEqual(osresult2));
03070                         if (!ok) 
03071                                 throw ErrorClass("setNumberOfSolutionSubstatuses: osresult objects falsely compare unequal!");
03072 
03073                         for (int j=0; j < 3; ++j)
03074                         {
03075                                 ok &= osresult1->setSolutionSubstatusType(i,j,"other");
03076                                 if (!ok) 
03077                                         throw ErrorClass("Error during setSolutionSubstatusType!");
03078                                 ok &= (!osresult1->IsEqual(osresult2));
03079                                 if (!ok) 
03080                                         throw ErrorClass("setSolutionSubstatusType: osresult objects falsely compare equal!");
03081                                 ok &= osresult2->setSolutionSubstatusType(i,j,"other");
03082                                 if (!ok) 
03083                                         throw ErrorClass("Error during setSolutionSubstatusType!");
03084                                 ok &= (osresult1->IsEqual(osresult2));
03085                                 if (!ok) 
03086                                         throw ErrorClass("setSolutionSubstatusType: osresult objects falsely compare unequal!");
03087 
03088                                 ok &= osresult1->setSolutionSubstatusDescription(i,j,"whatever");
03089                                 if (!ok) 
03090                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
03091                                 ok &= (!osresult1->IsEqual(osresult2));
03092                                 if (!ok) 
03093                                         throw ErrorClass("setSolutionSubstatusDescription: osresult objects falsely compare equal!");
03094                                 ok &= osresult2->setSolutionSubstatusDescription(i,j,"whatever");
03095                                 if (!ok) 
03096                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
03097                                 ok &= (osresult1->IsEqual(osresult2));
03098                                 if (!ok) 
03099                                         throw ErrorClass("setSolutionSubstatusDescription: osresult objects falsely compare unequal!");
03100                         }
03101 
03102                         ok &= osresult1->setSolutionMessage(i,"ABC 123");
03103                         if (!ok) 
03104                                 throw ErrorClass("Error during setSolutionMessage!");
03105                         ok &= (!osresult1->IsEqual(osresult2));
03106                         if (!ok) 
03107                                 throw ErrorClass("setSolutionMessage: osresult objects falsely compare equal!");
03108                         ok &= osresult2->setSolutionMessage(i,"ABC 123");
03109                         if (!ok) 
03110                                 throw ErrorClass("Error during setSolutionMessage!");
03111                         ok &= (osresult1->IsEqual(osresult2));
03112                         if (!ok) 
03113                                 throw ErrorClass("setSolutionMessage: osresult objects falsely compare unequal!");
03114 
03115                         ok &= osresult1->setNumberOfVarValues(i,3);
03116                         if (!ok) 
03117                                 throw ErrorClass("Error during setNumberOfVarValues!");
03118                         ok &= (!osresult1->IsEqual(osresult2));
03119                         if (!ok) 
03120                                 throw ErrorClass("setNumberOfVarValues: osresult objects falsely compare equal!");
03121                         ok &= osresult2->setNumberOfVarValues(i,3);
03122                         if (!ok) 
03123                                 throw ErrorClass("Error during setNumberOfVarValues!");
03124                         ok &= (osresult1->IsEqual(osresult2));
03125                         if (!ok) 
03126                                 throw ErrorClass("setNumberOfVarValues: osresult objects falsely compare unequal!");
03127 
03128                         for (int j=0; j < 3; ++j)
03129                         {
03130                                 ok &= osresult1->setVarValue(i,j,j,"varname",3.14);
03131                                 if (!ok) 
03132                                         throw ErrorClass("Error during setVarValue!");
03133                                 ok &= (!osresult1->IsEqual(osresult2));
03134                                 if (!ok) 
03135                                         throw ErrorClass("setVarValue: osresult objects falsely compare equal!");
03136                                 ok &= osresult2->setVarValue(i,j,j,"varname",3.14);
03137                                 if (!ok) 
03138                                         throw ErrorClass("Error during setVarValue!");
03139                                 ok &= (osresult1->IsEqual(osresult2));
03140                                 if (!ok) 
03141                                         throw ErrorClass("setVarValue: osresult objects falsely compare unequal!");
03142                         }
03143 
03144                         ok &= osresult1->setNumberOfVarValuesString(i,3);
03145                         if (!ok) 
03146                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
03147                         ok &= (!osresult1->IsEqual(osresult2));
03148                         if (!ok) 
03149                                 throw ErrorClass("setNumberOfVarValuesString: osresult objects falsely compare equal!");
03150                         ok &= osresult2->setNumberOfVarValuesString(i,3);
03151                         if (!ok) 
03152                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
03153                         ok &= (osresult1->IsEqual(osresult2));
03154                         if (!ok) 
03155                                 throw ErrorClass("setNumberOfVarValuesString: osresult objects falsely compare unequal!");
03156 
03157                         for (int j=0; j < 3; ++j)
03158                         {
03159                                 ok &= osresult1->setVarValueString(i,j,j,"varname","one");
03160                                 if (!ok) 
03161                                         throw ErrorClass("Error during setVarValueString!");
03162                                 ok &= (!osresult1->IsEqual(osresult2));
03163                                 if (!ok) 
03164                                         throw ErrorClass("setVarValueString: osresult objects falsely compare equal!");
03165                                 ok &= osresult2->setVarValueString(i,j,j,"varname","one");
03166                                 if (!ok) 
03167                                         throw ErrorClass("Error during setVarValueString!");
03168                                 ok &= (osresult1->IsEqual(osresult2));
03169                                 if (!ok) 
03170                                         throw ErrorClass("setVarValueString: osresult objects falsely compare unequal!");
03171                         }
03172 
03173                         intArray[0]=1000*i + 1100 + 10 + 1;
03174                         intArray[1]=1000*i + 1100 + 10 + 2;
03175                         intArray[2]=1000*i + 1100 + 10 + 3;
03176 
03177                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_basic, intArray, 3);
03178                         if (!ok) 
03179                                 throw ErrorClass("Error during setBasisStatus (variables basic)!");
03180                         ok &= (!osresult1->IsEqual(osresult2));
03181                         if (!ok) 
03182                                 throw ErrorClass("setBasisStatus (variables basic): osresult objects falsely compare equal!");
03183                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_basic, intArray, 3);
03184                         if (!ok) 
03185                                 throw ErrorClass("Error during setBasisStatus (variables basic)!");
03186                         ok &= (osresult1->IsEqual(osresult2));
03187                         if (!ok) 
03188                                 throw ErrorClass("setBasisStatus (variables basic): osresult objects falsely compare unequal!");
03189 
03190                         intArray[0] = intArray[0] + 10;
03191                         intArray[1] = intArray[1] + 10;
03192                         intArray[2] = intArray[2] + 10;
03193 
03194 
03195                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_atLower, intArray, 3);
03196                         if (!ok) 
03197                                 throw ErrorClass("Error during setBasisStatus (variables atLower)!");
03198                         ok &= (!osresult1->IsEqual(osresult2));
03199                         if (!ok) 
03200                                 throw ErrorClass("setBasisStatus (variables atLower): osresult objects falsely compare equal!");
03201                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_atLower, intArray, 3);
03202                         if (!ok) 
03203                                 throw ErrorClass("Error during setBasisStatus (variables atLower)!");
03204                         ok &= (osresult1->IsEqual(osresult2));
03205                         if (!ok) 
03206                                 throw ErrorClass("setBasisStatus (variables atLower): osresult objects falsely compare unequal!");
03207                         intArray[0] = intArray[0] + 10;
03208                         intArray[1] = intArray[1] + 10;
03209                         intArray[2] = intArray[2] + 10;
03210 
03211 
03212                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03213                         if (!ok) 
03214                                 throw ErrorClass("Error during setBasisStatus (variables atUpper)!");
03215                         ok &= (!osresult1->IsEqual(osresult2));
03216                         if (!ok) 
03217                                 throw ErrorClass("setBasisStatus (variables atUpper): osresult objects falsely compare equal!");
03218                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03219                         if (!ok) 
03220                                 throw ErrorClass("Error during setBasisStatus (variables atUpper)!");
03221                         ok &= (osresult1->IsEqual(osresult2));
03222                         if (!ok) 
03223                                 throw ErrorClass("setBasisStatus (variables atUpper): osresult objects falsely compare unequal!");
03224 
03225                         intArray[0] = intArray[0] + 10;
03226                         intArray[1] = intArray[1] + 10;
03227                         intArray[2] = intArray[2] + 10;
03228 
03229                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_isFree, intArray, 3);
03230                         if (!ok) 
03231                                 throw ErrorClass("Error during setBasisStatus (variables isFree)!");
03232                         ok &= (!osresult1->IsEqual(osresult2));
03233                         if (!ok) 
03234                                 throw ErrorClass("setBasisStatus (variables isFree): osresult objects falsely compare equal!");
03235                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_isFree, intArray, 3);
03236                         if (!ok) 
03237                                 throw ErrorClass("Error during setBasisStatus (variables isFree)!");
03238                         ok &= (osresult1->IsEqual(osresult2));
03239                         if (!ok) 
03240                                 throw ErrorClass("setBasisStatus (variables isFree): osresult objects falsely compare unequal!");
03241 
03242                         intArray[0] = intArray[0] + 10;
03243                         intArray[1] = intArray[1] + 10;
03244                         intArray[2] = intArray[2] + 10;
03245 
03246                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03247                         if (!ok) 
03248                                 throw ErrorClass("Error during setBasisStatus (variables superbasic)!");
03249                         ok &= (!osresult1->IsEqual(osresult2));
03250                         if (!ok) 
03251                                 throw ErrorClass("setBasisStatus (variables superbasic): osresult objects falsely compare equal!");
03252                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03253                         if (!ok) 
03254                                 throw ErrorClass("Error during setBasisStatus (variables superbasic)!");
03255                         ok &= (osresult1->IsEqual(osresult2));
03256                         if (!ok) 
03257                                 throw ErrorClass("setBasisStatus (variables superbasic): osresult objects falsely compare unequal!");
03258 
03259                         intArray[0] = intArray[0] + 10;
03260                         intArray[1] = intArray[1] + 10;
03261                         intArray[2] = intArray[2] + 10;
03262 
03263                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_unknown, intArray, 3);
03264                         if (!ok) 
03265                                 throw ErrorClass("Error during setBasisStatus (variables unknown)!");
03266                         ok &= (!osresult1->IsEqual(osresult2));
03267                         if (!ok) 
03268                                 throw ErrorClass("setBasisStatus (variables unknown): osresult objects falsely compare equal!");
03269                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_variables, ENUM_BASIS_STATUS_unknown, intArray, 3);
03270                         if (!ok) 
03271                                 throw ErrorClass("Error during setBasisStatus (variables unknown)!");
03272                         ok &= (osresult1->IsEqual(osresult2));
03273                         if (!ok) 
03274                                 throw ErrorClass("setBasisStatus (variables unknown): osresult objects falsely compare unequal!");
03275                         
03276                         ok &= osresult1->setNumberOfOtherVariableResults(i,3);
03277                         if (!ok) 
03278                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
03279                         ok &= (!osresult1->IsEqual(osresult2));
03280                         if (!ok) 
03281                                 throw ErrorClass("setNumberOfOtherVariableResults: osresult objects falsely compare equal!");
03282                         ok &= osresult2->setNumberOfOtherVariableResults(i,3);
03283                         if (!ok) 
03284                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
03285                         ok &= (osresult1->IsEqual(osresult2));
03286                         if (!ok) 
03287                                 throw ErrorClass("setNumberOfOtherVariableResults: osresult objects falsely compare unequal!");
03288 
03289                         for (int j=0; j < 2; ++j)
03290                         {
03291                                 ok &= osresult1->setOtherVariableResultName(i,j,"other");
03292                                 if (!ok) 
03293                                         throw ErrorClass("Error during setOtherVariableResultName!");
03294                                 ok &= (!osresult1->IsEqual(osresult2));
03295                                 if (!ok) 
03296                                         throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare equal!");
03297                                 ok &= osresult2->setOtherVariableResultName(i,j,"other");
03298                                 if (!ok) 
03299                                         throw ErrorClass("Error during setOtherVariableResultName!");
03300                                 ok &= (osresult1->IsEqual(osresult2));
03301                                 if (!ok) 
03302                                         throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare unequal!");
03303 
03304                                 ok &= osresult1->setOtherVariableResultDescription(i,j,"other");
03305                                 if (!ok) 
03306                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
03307                                 ok &= (!osresult1->IsEqual(osresult2));
03308                                 if (!ok) 
03309                                         throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare equal!");
03310                                 ok &= osresult2->setOtherVariableResultDescription(i,j,"other");
03311                                 if (!ok) 
03312                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
03313                                 ok &= (osresult1->IsEqual(osresult2));
03314                                 if (!ok) 
03315                                         throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare unequal!");
03316 
03317                                 ok &= osresult1->setOtherVariableResultValue(i,j,"other");
03318                                 if (!ok) 
03319                                         throw ErrorClass("Error during setOtherVariableResultValue!");
03320                                 ok &= (!osresult1->IsEqual(osresult2));
03321                                 if (!ok) 
03322                                         throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare equal!");
03323                                 ok &= osresult2->setOtherVariableResultValue(i,j,"other");
03324                                 if (!ok) 
03325                                         throw ErrorClass("Error during setOtherVariableResultValue!");
03326                                 ok &= (osresult1->IsEqual(osresult2));
03327                                 if (!ok) 
03328                                         throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare unequal!");
03329 
03330                                 ok &= osresult1->setOtherVariableResultNumberOfVar(i,j,3);
03331                                 if (!ok) 
03332                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
03333                                 ok &= (!osresult1->IsEqual(osresult2));
03334                                 if (!ok) 
03335                                         throw ErrorClass("setOtherVariableResultNumberOfVar: osresult objects falsely compare equal!");
03336                                 ok &= osresult2->setOtherVariableResultNumberOfVar(i,j,3);
03337                                 if (!ok) 
03338                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
03339                                 ok &= (osresult1->IsEqual(osresult2));
03340                                 if (!ok) 
03341                                         throw ErrorClass("setOtherVariableResultNumberOfVar: osresult objects falsely compare unequal!");
03342 
03343                                 for (int k=0; k < 3; ++k)
03344                                 {
03345                                         ok &= osresult1->setOtherVariableResultVarIdx(i,j,k,k);
03346                                         if (!ok) 
03347                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
03348                                         ok &= (!osresult1->IsEqual(osresult2));
03349                                         if (!ok) 
03350                                                 throw ErrorClass("setOtherVariableResultVarIdx: osresult objects falsely compare equal!");
03351                                         ok &= osresult2->setOtherVariableResultVarIdx(i,j,k,k);
03352                                         if (!ok) 
03353                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
03354                                         ok &= (osresult1->IsEqual(osresult2));
03355                                         if (!ok) 
03356                                                 throw ErrorClass("setOtherVariableResultVarIdx: osresult objects falsely compare unequal!");
03357 
03358                                         ok &= osresult1->setOtherVariableResultVar(i,j,k,"value");
03359                                         if (!ok) 
03360                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
03361                                         ok &= (!osresult1->IsEqual(osresult2));
03362                                         if (!ok) 
03363                                                 throw ErrorClass("setOtherVariableResultVar: osresult objects falsely compare equal!");
03364                                         ok &= osresult2->setOtherVariableResultVar(i,j,k,"value");
03365                                         if (!ok) 
03366                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
03367                                         ok &= (osresult1->IsEqual(osresult2));
03368                                         if (!ok) 
03369                                                 throw ErrorClass("setOtherVariableResultVar: osresult objects falsely compare unequal!");
03370                                 }
03371                         }
03372 
03373 // The third <other> result uses enumerations
03374 
03375                         ok &= osresult1->setOtherVariableResultName(i,2,"other");
03376                         if (!ok) 
03377                                 throw ErrorClass("Error during setOtherVariableResultName!");
03378                         ok &= (!osresult1->IsEqual(osresult2));
03379                         if (!ok) 
03380                                 throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare equal!");
03381                         ok &= osresult2->setOtherVariableResultName(i,2,"other");
03382                         if (!ok) 
03383                                 throw ErrorClass("Error during setOtherVariableResultName!");
03384                         ok &= (osresult1->IsEqual(osresult2));
03385                         if (!ok) 
03386                                 throw ErrorClass("setOtherVariableResultName: osresult objects falsely compare unequal!");
03387 
03388                         ok &= osresult1->setOtherVariableResultDescription(i,2,"other");
03389                         if (!ok) 
03390                                 throw ErrorClass("Error during setOtherVariableResultDescription!");
03391                         ok &= (!osresult1->IsEqual(osresult2));
03392                         if (!ok) 
03393                                 throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare equal!");
03394                         ok &= osresult2->setOtherVariableResultDescription(i,2,"other");
03395                         if (!ok) 
03396                                 throw ErrorClass("Error during setOtherVariableResultDescription!");
03397                         ok &= (osresult1->IsEqual(osresult2));
03398                         if (!ok) 
03399                                 throw ErrorClass("setOtherVariableResultDescription: osresult objects falsely compare unequal!");
03400 
03401                         ok &= osresult1->setOtherVariableResultValue(i,2,"other");
03402                         if (!ok) 
03403                                 throw ErrorClass("Error during setOtherVariableResultValue!");
03404                         ok &= (!osresult1->IsEqual(osresult2));
03405                         if (!ok) 
03406                                 throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare equal!");
03407                         ok &= osresult2->setOtherVariableResultValue(i,2,"other");
03408                         if (!ok) 
03409                                 throw ErrorClass("Error during setOtherVariableResultValue!");
03410                         ok &= (osresult1->IsEqual(osresult2));
03411                         if (!ok) 
03412                                 throw ErrorClass("setOtherVariableResultValue: osresult objects falsely compare unequal!");
03413 
03414 
03415                         ok &= osresult1->setOtherVariableResultNumberOfEnumerations(i,2,2);
03416                         if (!ok) 
03417                                 throw ErrorClass("Error during setOtherVariableResultNumberOfEnumerations!");
03418                         ok &= (!osresult1->IsEqual(osresult2));
03419                         if (!ok) 
03420                                 throw ErrorClass("setOtherVariableResultNumberOfEnumerations: osresult objects falsely compare equal!");
03421                         ok &= osresult2->setOtherVariableResultNumberOfEnumerations(i,2,2);
03422                         if (!ok) 
03423                                 throw ErrorClass("Error during setOtherVariableResultNumberOfEnumerations!");
03424                         ok &= (osresult1->IsEqual(osresult2));
03425                         if (!ok) 
03426                                 throw ErrorClass("setOtherVariableResultNumberOfEnumerations: osresult objects falsely compare unequal!");
03427 
03428                         for (int k=0; k < 2; ++k)
03429                         {
03430                         intArray[0] = 1000*i + 1130 + 10*k + 1;
03431                         intArray[1] = 1000*i + 1130 + 10*k + 2;
03432                         intArray[2] = 1000*i + 1130 + 10*k + 3;
03433 
03434                                 ok &= osresult1->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_variables,k,"value","description",intArray,3);
03435                                 if (!ok) 
03436                                         throw ErrorClass("Error during setOtherOptionEnumeration!");
03437                                 ok &= (!osresult1->IsEqual(osresult2));
03438                                 if (!ok) 
03439                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare equal!");
03440                                 ok &= osresult2->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_variables,k,"value","description",intArray,3);
03441                                 if (!ok) 
03442                                         throw ErrorClass("Error during setOtherOptionEnumeration!");
03443                                 ok &= (osresult1->IsEqual(osresult2));
03444                                 if (!ok) 
03445                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare unequal!");
03446                         }
03447 
03448 
03449 //==========================================================================================
03450 
03451 
03452                         ok &= osresult1->setNumberOfObjValues(i,2);
03453                         if (!ok) 
03454                                 throw ErrorClass("Error during setNumberOfObjValues!");
03455                         ok &= (!osresult1->IsEqual(osresult2));
03456                         if (!ok) 
03457                                 throw ErrorClass("setNumberOfObjValues: osresult objects falsely compare equal!");
03458                         ok &= osresult2->setNumberOfObjValues(i,2);
03459                         if (!ok) 
03460                                 throw ErrorClass("Error during setNumberOfObjValues!");
03461                         ok &= (osresult1->IsEqual(osresult2));
03462                         if (!ok) 
03463                                 throw ErrorClass("setNumberOfObjValues: osresult objects falsely compare unequal!");
03464 
03465                         for (int j=0; j < 2; ++j)
03466                         {
03467                                 ok &= osresult1->setObjValue(i,j,-2,"objname",3.14);
03468                                 if (!ok) 
03469                                         throw ErrorClass("Error during setObjValue!");
03470                                 ok &= (!osresult1->IsEqual(osresult2));
03471                                 if (!ok) 
03472                                         throw ErrorClass("setObjValue: osresult objects falsely compare equal!");
03473                                 ok &= osresult2->setObjValue(i,j,-2,"objname",3.14);
03474                                 if (!ok) 
03475                                         throw ErrorClass("Error during setObjValue!");
03476                                 ok &= (osresult1->IsEqual(osresult2));
03477                                 if (!ok) 
03478                                         throw ErrorClass("setObjValue: osresult objects falsely compare unequal!");
03479                         }
03480                         intArray[0] = -1000*i - 1200 - 10 - 1;
03481                         intArray[1] = -1000*i - 1200 - 10 - 2;
03482                         intArray[2] = -1000*i - 1200 - 10 - 3;
03483 
03484 //===============================================
03485                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_basic, intArray, 3);
03486                         if (!ok) 
03487                                 throw ErrorClass("Error during setBasisStatus (objectives basic)!");
03488                         ok &= (!osresult1->IsEqual(osresult2));
03489                         if (!ok) 
03490                                 throw ErrorClass("setBasisStatus (objectives basic): osresult objects falsely compare equal!");
03491                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_basic, intArray, 3);
03492                         if (!ok) 
03493                                 throw ErrorClass("Error during setBasisStatus (objectives basic)!");
03494                         ok &= (osresult1->IsEqual(osresult2));
03495                         if (!ok) 
03496                                 throw ErrorClass("setBasisStatus (objectives basic): osresult objects falsely compare unequal!");
03497 
03498                         intArray[0] = intArray[0] - 10;
03499                         intArray[1] = intArray[1] - 10;
03500                         intArray[2] = intArray[2] - 10;
03501 
03502                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_atLower, intArray, 3);
03503                         if (!ok) 
03504                                 throw ErrorClass("Error during setBasisStatus (objectives atLower)!");
03505                         ok &= (!osresult1->IsEqual(osresult2));
03506                         if (!ok) 
03507                                 throw ErrorClass("setBasisStatus (objectives atLower): osresult objects falsely compare equal!");
03508                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_atLower, intArray, 3);
03509                         if (!ok) 
03510                                 throw ErrorClass("Error during setBasisStatus (objectives atLower)!");
03511                         ok &= (osresult1->IsEqual(osresult2));
03512                         if (!ok) 
03513                                 throw ErrorClass("setBasisStatus (objectives atLower): osresult objects falsely compare unequal!");
03514 
03515                         intArray[0] = intArray[0] - 10;
03516                         intArray[1] = intArray[1] - 10;
03517                         intArray[2] = intArray[2] - 10;
03518 
03519                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03520 
03521                         if (!ok) 
03522                                 throw ErrorClass("Error during setBasisStatus (objectives atUpper)!");
03523                         ok &= (!osresult1->IsEqual(osresult2));
03524                         if (!ok) 
03525                                 throw ErrorClass("setBasisStatus (objectives atUpper): osresult objects falsely compare equal!");
03526                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03527                         if (!ok) 
03528                                 throw ErrorClass("Error during setBasisStatus (objectives atUpper)!");
03529                         ok &= (osresult1->IsEqual(osresult2));
03530                         if (!ok) 
03531                                 throw ErrorClass("setBasisStatus (objectives atUpper): osresult objects falsely compare unequal!");
03532 
03533 
03534                         intArray[0] = intArray[0] - 10;
03535                         intArray[1] = intArray[1] - 10;
03536                         intArray[2] = intArray[2] - 10;
03537 
03538                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_isFree, intArray, 3);
03539                         if (!ok) 
03540                                 throw ErrorClass("Error during setBasisStatus (objectives isFree)!");
03541                         ok &= (!osresult1->IsEqual(osresult2));
03542                         if (!ok) 
03543                                 throw ErrorClass("setBasisStatus (objectives isFree): osresult objects falsely compare equal!");
03544                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_isFree, intArray, 3);
03545                         if (!ok) 
03546                                 throw ErrorClass("Error during setBasisStatus (objectives isFree)!");
03547                         ok &= (osresult1->IsEqual(osresult2));
03548                         if (!ok) 
03549                                 throw ErrorClass("setBasisStatus (objectives isFree): osresult objects falsely compare unequal!");
03550 
03551 
03552                         intArray[0] = intArray[0] - 10;
03553                         intArray[1] = intArray[1] - 10;
03554                         intArray[2] = intArray[2] - 10;
03555 
03556                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03557                         if (!ok) 
03558                                 throw ErrorClass("Error during setBasisStatus (objectives superbasic)!");
03559                         ok &= (!osresult1->IsEqual(osresult2));
03560                         if (!ok) 
03561                                 throw ErrorClass("setBasisStatus (objectives superbasic): osresult objects falsely compare equal!");
03562                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03563                         if (!ok) 
03564                                 throw ErrorClass("Error during setBasisStatus (objectives superbasic)!");
03565                         ok &= (osresult1->IsEqual(osresult2));
03566                         if (!ok) 
03567                                 throw ErrorClass("setBasisStatus (objectives superbasic): osresult objects falsely compare unequal!");
03568 
03569 
03570                         intArray[0] = intArray[0] - 10;
03571                         intArray[1] = intArray[1] - 10;
03572                         intArray[2] = intArray[2] - 10;
03573 
03574                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_unknown, intArray, 3);
03575                         if (!ok) 
03576                                 throw ErrorClass("Error during setBasisStatus (objectives unknown)!");
03577                         ok &= (!osresult1->IsEqual(osresult2));
03578                         if (!ok) 
03579                                 throw ErrorClass("setBasisStatus (objectives unknown): osresult objects falsely compare equal!");
03580                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_objectives, ENUM_BASIS_STATUS_unknown, intArray, 3);
03581                         if (!ok) 
03582                                 throw ErrorClass("Error during setBasisStatus (objectives unknown)!");
03583                         ok &= (osresult1->IsEqual(osresult2));
03584                         if (!ok) 
03585                                 throw ErrorClass("setBasisStatus (objectives unknown): osresult objects falsely compare unequal!");
03586 
03587 //===============================================
03588 
03589                         ok &= osresult1->setNumberOfOtherObjectiveResults(i,3);
03590                         if (!ok) 
03591                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
03592                         ok &= (!osresult1->IsEqual(osresult2));
03593                         if (!ok) 
03594                                 throw ErrorClass("setNumberOfOtherObjectiveResults: osresult objects falsely compare equal!");
03595                         ok &= osresult2->setNumberOfOtherObjectiveResults(i,3);
03596                         if (!ok) 
03597                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
03598                         ok &= (osresult1->IsEqual(osresult2));
03599                         if (!ok) 
03600                                 throw ErrorClass("setNumberOfOtherObjectiveResults: osresult objects falsely compare unequal!");
03601 
03602                         for (int j=0; j < 2; ++j)
03603                         {
03604                                 ok &= osresult1->setOtherObjectiveResultName(i,j,"other");
03605                                 if (!ok) 
03606                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
03607                                 ok &= (!osresult1->IsEqual(osresult2));
03608                                 if (!ok) 
03609                                         throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare equal!");
03610                                 ok &= osresult2->setOtherObjectiveResultName(i,j,"other");
03611                                 if (!ok) 
03612                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
03613                                 ok &= (osresult1->IsEqual(osresult2));
03614                                 if (!ok) 
03615                                         throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare unequal!");
03616 
03617                                 ok &= osresult1->setOtherObjectiveResultDescription(i,j,"other");
03618                                 if (!ok) 
03619                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
03620                                 ok &= (!osresult1->IsEqual(osresult2));
03621                                 if (!ok) 
03622                                         throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare equal!");
03623                                 ok &= osresult2->setOtherObjectiveResultDescription(i,j,"other");
03624                                 if (!ok) 
03625                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
03626                                 ok &= (osresult1->IsEqual(osresult2));
03627                                 if (!ok) 
03628                                         throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare unequal!");
03629 
03630                                 ok &= osresult1->setOtherObjectiveResultValue(i,j,"other");
03631                                 if (!ok) 
03632                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
03633                                 ok &= (!osresult1->IsEqual(osresult2));
03634                                 if (!ok) 
03635                                         throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare equal!");
03636                                 ok &= osresult2->setOtherObjectiveResultValue(i,j,"other");
03637                                 if (!ok) 
03638                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
03639                                 ok &= (osresult1->IsEqual(osresult2));
03640                                 if (!ok) 
03641                                         throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare unequal!");
03642 
03643                                 ok &= osresult1->setOtherObjectiveResultNumberOfObj(i,j,2);
03644                                 if (!ok) 
03645                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
03646                                 ok &= (!osresult1->IsEqual(osresult2));
03647                                 if (!ok) 
03648                                         throw ErrorClass("setOtherObjectiveResultNumberOfObj: osresult objects falsely compare equal!");
03649                                 ok &= osresult2->setOtherObjectiveResultNumberOfObj(i,j,2);
03650                                 if (!ok) 
03651                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
03652                                 ok &= (osresult1->IsEqual(osresult2));
03653                                 if (!ok) 
03654                                         throw ErrorClass("setOtherObjectiveResultNumberOfObj: osresult objects falsely compare unequal!");
03655 
03656                                 for (int k=0; k < 2; ++k)
03657                                 {
03658                                         ok &= osresult1->setOtherObjectiveResultObjIdx(i,j,k,-2);
03659                                         if (!ok) 
03660                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
03661                                         ok &= (!osresult1->IsEqual(osresult2));
03662                                         if (!ok) 
03663                                                 throw ErrorClass("setOtherObjectiveResultObjIdx: osresult objects falsely compare equal!");
03664                                         ok &= osresult2->setOtherObjectiveResultObjIdx(i,j,k,-2);
03665                                         if (!ok) 
03666                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
03667                                         ok &= (osresult1->IsEqual(osresult2));
03668                                         if (!ok) 
03669                                                 throw ErrorClass("setOtherObjectiveResultObjIdx: osresult objects falsely compare unequal!");
03670 
03671                                         ok &= osresult1->setOtherObjectiveResultObj(i,j,k,"value");
03672                                         if (!ok) 
03673                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
03674                                         ok &= (!osresult1->IsEqual(osresult2));
03675                                         if (!ok) 
03676                                                 throw ErrorClass("setOtherObjectiveResultObj: osresult objects falsely compare equal!");
03677                                         ok &= osresult2->setOtherObjectiveResultObj(i,j,k,"value");
03678                                         if (!ok) 
03679                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
03680                                         ok &= (osresult1->IsEqual(osresult2));
03681                                         if (!ok) 
03682                                                 throw ErrorClass("setOtherObjectiveResultObj: osresult objects falsely compare unequal!");
03683                                 }
03684                         }
03685 // The third <other> result uses enumerations
03686 
03687                         ok &= osresult1->setOtherObjectiveResultName(i,2,"other");
03688                         if (!ok) 
03689                                 throw ErrorClass("Error during setOtherObjectiveResultName!");
03690                         ok &= (!osresult1->IsEqual(osresult2));
03691                         if (!ok) 
03692                                 throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare equal!");
03693                         ok &= osresult2->setOtherObjectiveResultName(i,2,"other");
03694                         if (!ok) 
03695                                 throw ErrorClass("Error during setOtherObjectiveResultName!");
03696                         ok &= (osresult1->IsEqual(osresult2));
03697                         if (!ok) 
03698                                 throw ErrorClass("setOtherObjectiveResultName: osresult objects falsely compare unequal!");
03699 
03700                         ok &= osresult1->setOtherObjectiveResultDescription(i,2,"other");
03701                         if (!ok) 
03702                                 throw ErrorClass("Error during setOtherObjectiveResultDescription!");
03703                         ok &= (!osresult1->IsEqual(osresult2));
03704                         if (!ok) 
03705                                 throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare equal!");
03706                         ok &= osresult2->setOtherObjectiveResultDescription(i,2,"other");
03707                         if (!ok) 
03708                                 throw ErrorClass("Error during setOtherObjectiveResultDescription!");
03709                         ok &= (osresult1->IsEqual(osresult2));
03710                         if (!ok) 
03711                                 throw ErrorClass("setOtherObjectiveResultDescription: osresult objects falsely compare unequal!");
03712 
03713                         ok &= osresult1->setOtherObjectiveResultValue(i,2,"other");
03714                         if (!ok) 
03715                                 throw ErrorClass("Error during setOtherObjectiveResultValue!");
03716                         ok &= (!osresult1->IsEqual(osresult2));
03717                         if (!ok) 
03718                                 throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare equal!");
03719                         ok &= osresult2->setOtherObjectiveResultValue(i,2,"other");
03720                         if (!ok) 
03721                                 throw ErrorClass("Error during setOtherObjectiveResultValue!");
03722                         ok &= (osresult1->IsEqual(osresult2));
03723                         if (!ok) 
03724                                 throw ErrorClass("setOtherObjectiveResultValue: osresult objects falsely compare unequal!");
03725 
03726                         ok &= osresult1->setOtherObjectiveResultNumberOfEnumerations(i,2,2);
03727                         if (!ok) 
03728                                 throw ErrorClass("Error during setOtherObjectiveResultNumberOfEnumerations!");
03729                         ok &= (!osresult1->IsEqual(osresult2));
03730                         if (!ok) 
03731                                 throw ErrorClass("setOtherObjectiveResultNumberOfEnumerations: osresult objects falsely compare equal!");
03732                         ok &= osresult2->setOtherObjectiveResultNumberOfEnumerations(i,2,2);
03733                         if (!ok) 
03734                                 throw ErrorClass("Error during setOtherObjectiveResultNumberOfEnumerations!");
03735                         ok &= (osresult1->IsEqual(osresult2));
03736                         if (!ok) 
03737                                 throw ErrorClass("setOtherObjectiveResultNumberOfEnumerations: osresult objects falsely compare unequal!");
03738 
03739                         for (int k=0; k < 2; ++k)
03740                         {
03741 
03742                         intArray[0] = -(1000*i + 1230 + 10*k + 1);
03743                         intArray[1] = -(1000*i + 1230 + 10*k + 2);
03744                         intArray[2] = -(1000*i + 1230 + 10*k + 3);
03745 
03746                                 ok &= osresult1->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_objectives,k,"value","description",intArray,3);
03747                                 if (!ok) 
03748                                         throw ErrorClass("Error during setOtherOptionEnumeration (objective)!");
03749                                 ok &= (!osresult1->IsEqual(osresult2));
03750                                 if (!ok) 
03751                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare equal!");
03752                                 ok &= osresult2->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_objectives,k,"value","description",intArray,3);
03753                                 if (!ok) 
03754                                         throw ErrorClass("Error during setOtherOptionEnumeration (objective)!");
03755                                 ok &= (osresult1->IsEqual(osresult2));
03756                                 if (!ok) 
03757                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare unequal!");
03758                         }
03759 
03760 
03761 //==========================================================================================
03762                         ok &= osresult1->setNumberOfDualValues(i,3);
03763                         if (!ok) 
03764                                 throw ErrorClass("Error during setNumberOfDualValues!");
03765                         ok &= (!osresult1->IsEqual(osresult2));
03766                         if (!ok) 
03767                                 throw ErrorClass("setNumberOfDualValues: osresult objects falsely compare equal!");
03768                         ok &= osresult2->setNumberOfDualValues(i,3);
03769                         if (!ok) 
03770                                 throw ErrorClass("Error during setNumberOfDualValues!");
03771                         ok &= (osresult1->IsEqual(osresult2));
03772                         if (!ok) 
03773                                 throw ErrorClass("setNumberOfDualValues: osresult objects falsely compare unequal!");
03774 
03775                         for (int j=0; j < 3; ++j)
03776                         {
03777                                 ok &= osresult1->setDualValue(i,j,j,"conname",3.14);
03778                                 if (!ok) 
03779                                         throw ErrorClass("Error during setDualValue!");
03780                                 ok &= (!osresult1->IsEqual(osresult2));
03781                                 if (!ok) 
03782                                         throw ErrorClass("setDualValue: osresult objects falsely compare equal!");
03783                                 ok &= osresult2->setDualValue(i,j,j,"conname",3.14);
03784                                 if (!ok) 
03785                                         throw ErrorClass("Error during setDualValue!");
03786                                 ok &= (osresult1->IsEqual(osresult2));
03787                                 if (!ok) 
03788                                         throw ErrorClass("setDualValue: osresult objects falsely compare unequal!");
03789                         }
03790 //==============================
03791 
03792 
03793                         intArray[0] = 1000*i + 1300 + 10 + 1;
03794                         intArray[1] = 1000*i + 1300 + 10 + 2;
03795                         intArray[2] = 1000*i + 1300 + 10 + 3;
03796 
03797                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_basic, intArray, 3);
03798                         if (!ok) 
03799                                 throw ErrorClass("Error during setBasisStatus (constraints basic)!");
03800                         ok &= (!osresult1->IsEqual(osresult2));
03801                         if (!ok) 
03802                                 throw ErrorClass("setBasisStatus (constraints basic): osresult objects falsely compare equal!");
03803                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_basic, intArray, 3);
03804                         if (!ok) 
03805                                 throw ErrorClass("Error during setBasisStatus (constraints basic)!");
03806                         ok &= (osresult1->IsEqual(osresult2));
03807                         if (!ok) 
03808                                 throw ErrorClass("setBasisStatus (constraints basic): osresult objects falsely compare unequal!");
03809 
03810                         intArray[0] = intArray[0] + 10;
03811                         intArray[1] = intArray[1] + 10;
03812                         intArray[2] = intArray[2] + 10;
03813 
03814                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_atLower, intArray, 3);
03815                         if (!ok) 
03816                                 throw ErrorClass("Error during setBasisStatus (constraints atLower)!");
03817                         ok &= (!osresult1->IsEqual(osresult2));
03818                         if (!ok) 
03819                                 throw ErrorClass("setBasisStatus (constraints atLower): osresult objects falsely compare equal!");
03820                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_atLower, intArray, 3);
03821                         if (!ok) 
03822                                 throw ErrorClass("Error during setBasisStatus (constraints atLower)!");
03823                         ok &= (osresult1->IsEqual(osresult2));
03824                         if (!ok) 
03825                                 throw ErrorClass("setBasisStatus (constraints atLower): osresult objects falsely compare unequal!");
03826 
03827                         intArray[0] = intArray[0] + 10;
03828                         intArray[1] = intArray[1] + 10;
03829                         intArray[2] = intArray[2] + 10;
03830 
03831 
03832                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03833                         if (!ok) 
03834                                 throw ErrorClass("Error during setBasisStatus (constraints atUpper)!");
03835                         ok &= (!osresult1->IsEqual(osresult2));
03836                         if (!ok) 
03837                                 throw ErrorClass("setBasisStatus (constraints atUpper): osresult objects falsely compare equal!");
03838                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_atUpper, intArray, 3);
03839                         if (!ok) 
03840                                 throw ErrorClass("Error during setBasisStatus (constraints atUpper)!");
03841                         ok &= (osresult1->IsEqual(osresult2));
03842                         if (!ok) 
03843                                 throw ErrorClass("setBasisStatus (constraints atUpper): osresult objects falsely compare unequal!");
03844 
03845 
03846                         intArray[0] = intArray[0] + 10;
03847                         intArray[1] = intArray[1] + 10;
03848                         intArray[2] = intArray[2] + 10;
03849 
03850                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_isFree, intArray, 3);
03851                         if (!ok) 
03852                                 throw ErrorClass("Error during setBasisStatus (constraints isFree)!");
03853                         ok &= (!osresult1->IsEqual(osresult2));
03854                         if (!ok) 
03855                                 throw ErrorClass("setBasisStatus (constraints isFree): osresult objects falsely compare equal!");
03856                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_isFree, intArray, 3);
03857                         if (!ok) 
03858                                 throw ErrorClass("Error during setBasisStatus (constraints isFree)!");
03859                         ok &= (osresult1->IsEqual(osresult2));
03860                         if (!ok) 
03861                                 throw ErrorClass("setBasisStatus (constraints isFree): osresult objects falsely compare unequal!");
03862 
03863 
03864                         intArray[0] = intArray[0] + 10;
03865                         intArray[1] = intArray[1] + 10;
03866                         intArray[2] = intArray[2] + 10;
03867 
03868                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03869                         if (!ok) 
03870                                 throw ErrorClass("Error during setBasisStatus (constraints superbasic)!");
03871                         ok &= (!osresult1->IsEqual(osresult2));
03872                         if (!ok) 
03873                                 throw ErrorClass("setBasisStatus (constraints superbasic): osresult objects falsely compare equal!");
03874                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_superbasic, intArray, 3);
03875                         if (!ok) 
03876                                 throw ErrorClass("Error during setBasisStatus (constraints superbasic)!");
03877                         ok &= (osresult1->IsEqual(osresult2));
03878                         if (!ok) 
03879                                 throw ErrorClass("setBasisStatus (constraints superbasic): osresult objects falsely compare unequal!");
03880 
03881                         intArray[0] = intArray[0] + 10;
03882                         intArray[1] = intArray[1] + 10;
03883                         intArray[2] = intArray[2] + 10;
03884 
03885 
03886                         ok &= osresult1->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_unknown, intArray, 3);
03887                         if (!ok) 
03888                                 throw ErrorClass("Error during setBasisStatus (constraints unknown)!");
03889                         ok &= (!osresult1->IsEqual(osresult2));
03890                         if (!ok) 
03891                                 throw ErrorClass("setBasisStatus (constraints unknown): osresult objects falsely compare equal!");
03892                         ok &= osresult2->setBasisStatus(i, ENUM_PROBLEM_COMPONENT_constraints, ENUM_BASIS_STATUS_unknown, intArray, 3);
03893                         if (!ok) 
03894                                 throw ErrorClass("Error during setBasisStatus (constraints unknown)!");
03895                         ok &= (osresult1->IsEqual(osresult2));
03896                         if (!ok) 
03897                                 throw ErrorClass("setBasisStatus (constraints unknown): osresult objects falsely compare unequal!");
03898 //=================================
03899                         ok &= osresult1->setNumberOfOtherConstraintResults(i,3);
03900                         if (!ok) 
03901                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
03902                         ok &= (!osresult1->IsEqual(osresult2));
03903                         if (!ok) 
03904                                 throw ErrorClass("setNumberOfOtherConstraintResults: osresult objects falsely compare equal!");
03905                         ok &= osresult2->setNumberOfOtherConstraintResults(i,3);
03906                         if (!ok) 
03907                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
03908                         ok &= (osresult1->IsEqual(osresult2));
03909                         if (!ok) 
03910                                 throw ErrorClass("setNumberOfOtherConstraintResults: osresult objects falsely compare unequal!");
03911 
03912                         for (int j=0; j < 2; ++j)
03913                         {
03914                                 ok &= osresult1->setOtherConstraintResultName(i,j,"other");
03915                                 if (!ok) 
03916                                         throw ErrorClass("Error during setOtherConstraintResultName!");
03917                                 ok &= (!osresult1->IsEqual(osresult2));
03918                                 if (!ok) 
03919                                         throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare equal!");
03920                                 ok &= osresult2->setOtherConstraintResultName(i,j,"other");
03921                                 if (!ok) 
03922                                         throw ErrorClass("Error during setOtherConstraintResultName!");
03923                                 ok &= (osresult1->IsEqual(osresult2));
03924                                 if (!ok) 
03925                                         throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare unequal!");
03926 
03927                                 ok &= osresult1->setOtherConstraintResultDescription(i,j,"other");
03928                                 if (!ok) 
03929                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
03930                                 ok &= (!osresult1->IsEqual(osresult2));
03931                                 if (!ok) 
03932                                         throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare equal!");
03933                                 ok &= osresult2->setOtherConstraintResultDescription(i,j,"other");
03934                                 if (!ok) 
03935                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
03936                                 ok &= (osresult1->IsEqual(osresult2));
03937                                 if (!ok) 
03938                                         throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare unequal!");
03939 
03940                                 ok &= osresult1->setOtherConstraintResultValue(i,j,"other");
03941                                 if (!ok) 
03942                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
03943                                 ok &= (!osresult1->IsEqual(osresult2));
03944                                 if (!ok) 
03945                                         throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare equal!");
03946                                 ok &= osresult2->setOtherConstraintResultValue(i,j,"other");
03947                                 if (!ok) 
03948                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
03949                                 ok &= (osresult1->IsEqual(osresult2));
03950                                 if (!ok) 
03951                                         throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare unequal!");
03952 
03953                                 ok &= osresult1->setOtherConstraintResultNumberOfCon(i,j,3);
03954                                 if (!ok) 
03955                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
03956                                 ok &= (!osresult1->IsEqual(osresult2));
03957                                 if (!ok) 
03958                                         throw ErrorClass("setOtherConstraintResultNumberOfCon: osresult objects falsely compare equal!");
03959                                 ok &= osresult2->setOtherConstraintResultNumberOfCon(i,j,3);
03960                                 if (!ok) 
03961                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
03962                                 ok &= (osresult1->IsEqual(osresult2));
03963                                 if (!ok) 
03964                                         throw ErrorClass("setOtherConstraintResultNumberOfCon: osresult objects falsely compare unequal!");
03965 
03966                                 for (int k=0; k < 3; ++k)
03967                                 {
03968                                         ok &= osresult1->setOtherConstraintResultConIdx(i,j,k,k);
03969                                         if (!ok) 
03970                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
03971                                         ok &= (!osresult1->IsEqual(osresult2));
03972                                         if (!ok) 
03973                                                 throw ErrorClass("setOtherConstraintResultConIdx: osresult objects falsely compare equal!");
03974                                         ok &= osresult2->setOtherConstraintResultConIdx(i,j,k,k);
03975                                         if (!ok) 
03976                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
03977                                         ok &= (osresult1->IsEqual(osresult2));
03978                                         if (!ok) 
03979                                                 throw ErrorClass("setOtherConstraintResultConIdx: osresult objects falsely compare unequal!");
03980 
03981                                         ok &= osresult1->setOtherConstraintResultCon(i,j,k,"value");
03982                                         if (!ok) 
03983                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
03984                                         ok &= (!osresult1->IsEqual(osresult2));
03985                                         if (!ok) 
03986                                                 throw ErrorClass("setOtherConstraintResultCon: osresult objects falsely compare equal!");
03987                                         ok &= osresult2->setOtherConstraintResultCon(i,j,k,"value");
03988                                         if (!ok) 
03989                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
03990                                         ok &= (osresult1->IsEqual(osresult2));
03991                                         if (!ok) 
03992                                                 throw ErrorClass("setOtherConstraintResultCon: osresult objects falsely compare unequal!");
03993                                 }
03994                         }
03995 
03996 
03997 // The third <other> result uses enumerations
03998 
03999                         ok &= osresult1->setOtherConstraintResultName(i,2,"other");
04000                         if (!ok) 
04001                                 throw ErrorClass("Error during setOtherConstraintResultName!");
04002                         ok &= (!osresult1->IsEqual(osresult2));
04003                         if (!ok) 
04004                                 throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare equal!");
04005                         ok &= osresult2->setOtherConstraintResultName(i,2,"other");
04006                         if (!ok) 
04007                                 throw ErrorClass("Error during setOtherConstraintResultName!");
04008                         ok &= (osresult1->IsEqual(osresult2));
04009                         if (!ok) 
04010                                 throw ErrorClass("setOtherConstraintResultName: osresult objects falsely compare unequal!");
04011 
04012                         ok &= osresult1->setOtherConstraintResultDescription(i,2,"other");
04013                         if (!ok) 
04014                                 throw ErrorClass("Error during setOtherConstraintResultDescription!");
04015                         ok &= (!osresult1->IsEqual(osresult2));
04016                         if (!ok) 
04017                                 throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare equal!");
04018                         ok &= osresult2->setOtherConstraintResultDescription(i,2,"other");
04019                         if (!ok) 
04020                                 throw ErrorClass("Error during setOtherConstraintResultDescription!");
04021                         ok &= (osresult1->IsEqual(osresult2));
04022                         if (!ok) 
04023                                 throw ErrorClass("setOtherConstraintResultDescription: osresult objects falsely compare unequal!");
04024 
04025                         ok &= osresult1->setOtherConstraintResultValue(i,2,"other");
04026                         if (!ok) 
04027                                 throw ErrorClass("Error during setOtherConstraintResultValue!");
04028                         ok &= (!osresult1->IsEqual(osresult2));
04029                         if (!ok) 
04030                                 throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare equal!");
04031                         ok &= osresult2->setOtherConstraintResultValue(i,2,"other");
04032                         if (!ok) 
04033                                 throw ErrorClass("Error during setOtherConstraintResultValue!");
04034                         ok &= (osresult1->IsEqual(osresult2));
04035                         if (!ok) 
04036                                 throw ErrorClass("setOtherConstraintResultValue: osresult objects falsely compare unequal!");
04037 
04038                         ok &= osresult1->setOtherConstraintResultNumberOfEnumerations(i,2,2);
04039                         if (!ok) 
04040                                 throw ErrorClass("Error during setOtherConstraintResultNumberOfEnumerations!");
04041                         ok &= (!osresult1->IsEqual(osresult2));
04042                         if (!ok) 
04043                                 throw ErrorClass("setOtherConstraintResultNumberOfEnumerations: osresult objects falsely compare equal!");
04044                         ok &= osresult2->setOtherConstraintResultNumberOfEnumerations(i,2,2);
04045                         if (!ok) 
04046                                 throw ErrorClass("Error during setOtherConstraintResultNumberOfEnumerations!");
04047                         ok &= (osresult1->IsEqual(osresult2));
04048                         if (!ok) 
04049                                 throw ErrorClass("setOtherConstraintResultNumberOfEnumerations: osresult objects falsely compare unequal!");
04050 
04051                         for (int k=0; k < 2; ++k)
04052                         {
04053                         intArray[0] = 1000*i + 1330 + 10*k + 1;
04054                         intArray[1] = 1000*i + 1330 + 10*k + 2;
04055                         intArray[2] = 1000*i + 1330 + 10*k + 3;
04056 
04057                                 ok &= osresult1->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_constraints,k,"value","description",intArray,3);
04058                                 if (!ok) 
04059                                         throw ErrorClass("Error during setOtherOptionEnumeration (constraint)!");
04060                                 ok &= (!osresult1->IsEqual(osresult2));
04061                                 if (!ok) 
04062                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare equal!");
04063                                 ok &= osresult2->setOtherOptionEnumeration(i,2,ENUM_PROBLEM_COMPONENT_constraints,k,"value","description",intArray,3);
04064                                 if (!ok) 
04065                                         throw ErrorClass("Error during setOtherOptionEnumeration (constraint)!");
04066                                 ok &= (osresult1->IsEqual(osresult2));
04067                                 if (!ok) 
04068                                         throw ErrorClass("setOtherOptionEnumeration: osresult objects falsely compare unequal!");
04069                         }
04070 
04071 
04072 //==========================================================================================
04073 
04074                         ok &= osresult1->setNumberOfOtherSolutionResults(i,3);
04075                         if (!ok) 
04076                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
04077                         ok &= (!osresult1->IsEqual(osresult2));
04078                         if (!ok) 
04079                                 throw ErrorClass("setNumberOfOtherSolutionResults: osresult objects falsely compare equal!");
04080                         ok &= osresult2->setNumberOfOtherSolutionResults(i,3);
04081                         if (!ok) 
04082                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
04083                         ok &= (osresult1->IsEqual(osresult2));
04084                         if (!ok) 
04085                                 throw ErrorClass("setNumberOfOtherSolutionResults: osresult objects falsely compare unequal!");
04086 
04087                         for (int j=0; j < 3; ++j)
04088                         {
04089                                 ok &= osresult1->setOtherSolutionResultName(i,j,"other");
04090                                 if (!ok) 
04091                                         throw ErrorClass("Error during setOtherSolutionResultName!");
04092                                 ok &= (!osresult1->IsEqual(osresult2));
04093                                 if (!ok) 
04094                                         throw ErrorClass("setOtherSolutionResultName: osresult objects falsely compare equal!");
04095                                 ok &= osresult2->setOtherSolutionResultName(i,j,"other");
04096                                 if (!ok) 
04097                                         throw ErrorClass("Error during setOtherSolutionResultName!");
04098                                 ok &= (osresult1->IsEqual(osresult2));
04099                                 if (!ok) 
04100                                         throw ErrorClass("setOtherSolutionResultName: osresult objects falsely compare unequal!");
04101 
04102                                 ok &= osresult1->setOtherSolutionResultCategory(i,j,"other");
04103                                 if (!ok) 
04104                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
04105                                 ok &= (!osresult1->IsEqual(osresult2));
04106                                 if (!ok) 
04107                                         throw ErrorClass("setOtherSolutionResultCategory: osresult objects falsely compare equal!");
04108                                 ok &= osresult2->setOtherSolutionResultCategory(i,j,"other");
04109                                 if (!ok) 
04110                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
04111                                 ok &= (osresult1->IsEqual(osresult2));
04112                                 if (!ok) 
04113                                         throw ErrorClass("setOtherSolutionResultCategory: osresult objects falsely compare unequal!");
04114 
04115                                 ok &= osresult1->setOtherSolutionResultDescription(i,j,"other");
04116                                 if (!ok) 
04117                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
04118                                 ok &= (!osresult1->IsEqual(osresult2));
04119                                 if (!ok) 
04120                                         throw ErrorClass("setOtherSolutionResultDescription: osresult objects falsely compare equal!");
04121                                 ok &= osresult2->setOtherSolutionResultDescription(i,j,"other");
04122                                 if (!ok) 
04123                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
04124                                 ok &= (osresult1->IsEqual(osresult2));
04125                                 if (!ok) 
04126                                         throw ErrorClass("setOtherSolutionResultDescription: osresult objects falsely compare unequal!");
04127 
04128                                 ok &= osresult1->setOtherSolutionResultNumberOfItems(i,j,3);
04129                                 if (!ok) 
04130                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
04131                                 ok &= (!osresult1->IsEqual(osresult2));
04132                                 if (!ok) 
04133                                         throw ErrorClass("setOtherSolutionResultNumberOfItems: osresult objects falsely compare equal!");
04134                                 ok &= osresult2->setOtherSolutionResultNumberOfItems(i,j,3);
04135                                 if (!ok) 
04136                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
04137                                 ok &= (osresult1->IsEqual(osresult2));
04138                                 if (!ok) 
04139                                         throw ErrorClass("setOtherSolutionResultNumberOfItems: osresult objects falsely compare unequal!");
04140 
04141                                 for (int k=0; k < 3; ++k)
04142                                 {
04143                                         ok &= osresult1->setOtherSolutionResultItem(i,j,k,"blabla");
04144                                         if (!ok) 
04145                                                 throw ErrorClass("Error during setOtherSolutionResultItem!");
04146                                         ok &= (!osresult1->IsEqual(osresult2));
04147                                         if (!ok) 
04148                                                 throw ErrorClass("setOtherSolutionResultItem: osresult objects falsely compare equal!");
04149                                         ok &= osresult2->setOtherSolutionResultItem(i,j,k,"blabla");
04150                                         if (!ok) 
04151                                                 throw ErrorClass("Error during setOtherSolutionResultItem!");
04152                                         ok &= (osresult1->IsEqual(osresult2));
04153                                         if (!ok) 
04154                                                 throw ErrorClass("setOtherSolutionResultItem: osresult objects falsely compare unequal!");
04155                                 }
04156                         }
04157                 }
04158 
04159                 ok &= osresult1->setNumberOfSolverOutputs(3);
04160                 if (!ok) 
04161                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
04162                 ok &= (!osresult1->IsEqual(osresult2));
04163                 if (!ok) 
04164                         throw ErrorClass("setNumberOfSolverOutputs: osresult objects falsely compare equal!");
04165                 ok &= osresult2->setNumberOfSolverOutputs(3);
04166                 if (!ok) 
04167                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
04168                 ok &= (osresult1->IsEqual(osresult2));
04169                 if (!ok) 
04170                         throw ErrorClass("setNumberOfSolverOutputs: osresult objects falsely compare unequal!");
04171 
04172                 for (int i=0; i < 3; ++i)
04173                 {
04174                         ok &= osresult1->setSolverOutputName(i,"some name");
04175                         if (!ok) 
04176                                 throw ErrorClass("Error during setSolverOutputName!");
04177                         ok &= (!osresult1->IsEqual(osresult2));
04178                         if (!ok) 
04179                                 throw ErrorClass("setSolverOutputName: osresult objects falsely compare equal!");
04180                         ok &= osresult2->setSolverOutputName(i,"some name");
04181                         if (!ok) 
04182                                 throw ErrorClass("Error during setSolverOutputName!");
04183                         ok &= (osresult1->IsEqual(osresult2));
04184                         if (!ok) 
04185                                 throw ErrorClass("setSolverOutputName: osresult objects falsely compare unequal!");
04186 
04187                         ok &= osresult1->setSolverOutputCategory(i,"some name");
04188                         if (!ok) 
04189                                 throw ErrorClass("Error during setSolverOutputCategory!");
04190                         ok &= (!osresult1->IsEqual(osresult2));
04191                         if (!ok) 
04192                                 throw ErrorClass("setSolverOutputCategory: osresult objects falsely compare equal!");
04193                         ok &= osresult2->setSolverOutputCategory(i,"some name");
04194                         if (!ok) 
04195                                 throw ErrorClass("Error during setSolverOutputCategory!");
04196                         ok &= (osresult1->IsEqual(osresult2));
04197                         if (!ok) 
04198                                 throw ErrorClass("setSolverOutputCategory: osresult objects falsely compare unequal!");
04199 
04200                         ok &= osresult1->setSolverOutputDescription(i,"some name");
04201                         if (!ok) 
04202                                 throw ErrorClass("Error during setSolverOutputDescription!");
04203                         ok &= (!osresult1->IsEqual(osresult2));
04204                         if (!ok) 
04205                                 throw ErrorClass("setSolverOutputDescription: osresult objects falsely compare equal!");
04206                         ok &= osresult2->setSolverOutputDescription(i,"some name");
04207                         if (!ok) 
04208                                 throw ErrorClass("Error during setSolverOutputDescription!");
04209                         ok &= (osresult1->IsEqual(osresult2));
04210                         if (!ok) 
04211                                 throw ErrorClass("setSolverOutputDescription: osresult objects falsely compare unequal!");
04212 
04213                         ok &= osresult1->setSolverOutputNumberOfItems(i,3);
04214                         if (!ok) 
04215                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
04216                         ok &= (!osresult1->IsEqual(osresult2));
04217                         if (!ok) 
04218                                 throw ErrorClass("setSolverOutputNumberOfItems: osresult objects falsely compare equal!");
04219                         ok &= osresult2->setSolverOutputNumberOfItems(i,3);
04220                         if (!ok) 
04221                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
04222                         ok &= (osresult1->IsEqual(osresult2));
04223                         if (!ok) 
04224                                 throw ErrorClass("setSolverOutputNumberOfItems: osresult objects falsely compare unequal!");
04225 
04226                         for (int j=0; j < 3; ++j)
04227                         {
04228                                 ok &= osresult1->setSolverOutputItem(i,j,"other");
04229                                 if (!ok) 
04230                                         throw ErrorClass("Error during setSolverOutputItem!");
04231                                 ok &= (!osresult1->IsEqual(osresult2));
04232                                 if (!ok) 
04233                                         throw ErrorClass("setSolverOutputItem: osresult objects falsely compare equal!");
04234                                 ok &= osresult2->setSolverOutputItem(i,j,"other");
04235                                 if (!ok) 
04236                                         throw ErrorClass("Error during setSolverOutputItem!");
04237                                 ok &= (osresult1->IsEqual(osresult2));
04238                                 if (!ok) 
04239                                         throw ErrorClass("setSolverOutputItem: osresult objects falsely compare unequal!");
04240                         }
04241                 }
04242 
04243                 if (!ok)
04244                         throw ErrorClass("Unspecified error while testing set() methods");
04245 
04246                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrL set() tools" << std::endl;
04247                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
04248 
04249                 cout << endl << "TEST " << ++nOfTest << ": OSrLWriter and OSrLReader " << endl << endl;
04250 
04251 
04252                 osrlwriter = new OSrLWriter();
04253                 osrlreader = new OSrLReader();
04254                 std::string tempOSrL;
04255 
04256                 tempOSrL = osrlwriter->writeOSrL( osresult1);
04257 
04258                 std::cout << "Here is the temporary OSrL string produced from OSrLWriter" << std::endl << tempOSrL << std::endl;
04259 
04260                 osresult3 = osrlreader->readOSrL( tempOSrL);
04261 
04262                 tempOSrL = osrlwriter->writeOSrL( osresult3);
04263 
04264                 std::cout << "Here is the temporary OSrL string produced from OSrLReader" << std::endl << tempOSrL << std::endl;
04265 
04266 
04267                 ok &= (osresult1->IsEqual(osresult3));
04268                 if (!ok) 
04269                         throw ErrorClass("Writing an osresult then reading leads to loss of data");
04270 
04271                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrLWriter and OSrLReader" << std::endl;
04272                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
04273 
04279                 cout << endl << "TEST " << ++nOfTest << ": OSrL get() methods" << endl << endl;
04280 //#ifdef TEMP   //---------------------------for the time being----------------------------------
04281 
04282                 if (osresult2  != NULL) delete osresult2;
04283                 osresult2 = new OSResult();
04284 
04285                 std::string tempStr;
04286                 double tempDbl;
04287                 int tempInt;
04288 
04289                 tempStr = osresult1->getGeneralStatusType();
04290                 ok &= osresult2->setGeneralStatusType(tempStr);
04291                 if (!ok) 
04292                         throw ErrorClass("Error during setGeneralStatusType!");
04293                 tempStr = osresult1->getGeneralStatusDescription();
04294                 ok &= osresult2->setGeneralStatusDescription(tempStr);
04295                 if (!ok) 
04296                         throw ErrorClass("Error during setGeneralStatusDescription!");
04297 
04298                 tempInt = osresult1->getNumberOfGeneralSubstatuses();
04299                 ok &= osresult2->setNumberOfGeneralSubstatuses(tempInt);
04300                 if (!ok) 
04301                         throw ErrorClass("Error during setNumberOfGeneralSubstatuses!");
04302                 for (int i=0; i < tempInt; i++)
04303                 {
04304                         tempStr = osresult1->getGeneralSubstatusName(i);
04305                         ok &= osresult2->setGeneralSubstatusName(i,tempStr);
04306                         if (!ok) 
04307                                 throw ErrorClass("Error during setGeneralSubstatusName!");
04308                         tempStr = osresult1->getGeneralSubstatusDescription(i);
04309                         ok &= osresult2->setGeneralSubstatusDescription(i,tempStr);
04310                         if (!ok) 
04311                                 throw ErrorClass("Error during setGeneralSubstatusDescription!");
04312                 }
04313 
04314                 tempStr = osresult1->getGeneralMessage();
04315                 ok &= osresult2->setGeneralMessage(tempStr);
04316                 if (!ok) 
04317                         throw ErrorClass("Error during setGeneralMessage!");
04318                 tempStr = osresult1->getServiceURI();
04319                 ok &= osresult2->setServiceURI(tempStr);
04320                 if (!ok) 
04321                         throw ErrorClass("Error during setServiceURI!");
04322                 tempStr = osresult1->getServiceName();
04323                 ok &= osresult2->setServiceName(tempStr);
04324                 if (!ok) 
04325                         throw ErrorClass("Error during setServiceName!");
04326                 tempStr = osresult1->getInstanceName();
04327                 ok &= osresult2->setInstanceName(tempStr);
04328                 if (!ok) 
04329                         throw ErrorClass("Error during setInstanceName!");
04330                 tempStr = osresult1->getJobID();
04331                 ok &= osresult2->setJobID(tempStr);
04332                 if (!ok) 
04333                         throw ErrorClass("Error during setJobID!");
04334                 tempStr = osresult1->getSolverInvoked();
04335                 ok &= osresult2->setSolverInvoked(tempStr);
04336                 if (!ok) 
04337                         throw ErrorClass("Error during setSolverInvoked!");
04338                 tempStr = osresult1->getTimeStamp();
04339                 ok &= osresult2->setTimeStamp(tempStr);
04340                 if (!ok) 
04341                         throw ErrorClass("Error during setTimeStamp!");
04342 
04343                 tempInt = osresult1->getNumberOfOtherGeneralResults();
04344                 ok &= osresult2->setNumberOfOtherGeneralResults(tempInt);
04345                 if (!ok) 
04346                         throw ErrorClass("Error during setNumberOfOtherGeneralResults!");
04347                 for (int i=0; i < tempInt; i++)
04348                 {
04349                         tempStr = osresult1->getOtherGeneralResultName(i);
04350                         ok &= osresult2->setOtherGeneralResultName(i,tempStr);
04351                         if (!ok) 
04352                                 throw ErrorClass("Error during setOtherGeneralResultName!");
04353                         tempStr = osresult1->getOtherGeneralResultValue(i);
04354                         ok &= osresult2->setOtherGeneralResultValue(i,tempStr);
04355                         if (!ok) 
04356                                 throw ErrorClass("Error during setOtherGeneralResultValue!");
04357                         tempStr = osresult1->getOtherGeneralResultDescription(i);
04358                         ok &= osresult2->setOtherGeneralResultDescription(i,tempStr);
04359                         if (!ok) 
04360                                 throw ErrorClass("Error during setOtherGeneralResultDescription!");
04361                 }
04362 
04363                 tempStr = osresult1->getSystemInformation();
04364                 ok &= osresult2->setSystemInformation(tempStr);
04365                 if (!ok) 
04366                         throw ErrorClass("Error during setSystemInformation!");
04367                 tempStr = osresult1->getAvailableDiskSpaceUnit();
04368                 ok &= osresult2->setAvailableDiskSpaceUnit(tempStr);
04369                 if (!ok) 
04370                         throw ErrorClass("Error during setAvailableDiskSpaceUnit!");
04371                 tempStr = osresult1->getAvailableDiskSpaceDescription();
04372                 ok &= osresult2->setAvailableDiskSpaceDescription(tempStr);
04373                 if (!ok) 
04374                         throw ErrorClass("Error during setAvailableDiskSpaceDescription!");
04375                 tempDbl = osresult1->getAvailableDiskSpaceValue();
04376                 ok &= osresult2->setAvailableDiskSpaceValue(tempDbl);
04377                 if (!ok) 
04378                         throw ErrorClass("Error during setAvailableDiskSpaceValue!");
04379                 tempStr = osresult1->getAvailableMemoryUnit();
04380                 ok &= osresult2->setAvailableMemoryUnit(tempStr);
04381                 if (!ok) 
04382                         throw ErrorClass("Error during setAvailableMemoryUnit!");
04383                 tempStr = osresult1->getAvailableMemoryDescription();
04384                 ok &= osresult2->setAvailableMemoryDescription(tempStr);
04385                 if (!ok) 
04386                         throw ErrorClass("Error during setAvailableMemoryDescription!");
04387                 tempDbl = osresult1->getAvailableMemoryValue();
04388                 ok &= osresult2->setAvailableMemoryValue(tempDbl);
04389                 if (!ok) 
04390                         throw ErrorClass("Error during setAvailableMemoryValue!");
04391                 tempStr = osresult1->getAvailableCPUSpeedUnit();
04392                 ok &= osresult2->setAvailableCPUSpeedUnit(tempStr);
04393                 if (!ok) 
04394                         throw ErrorClass("Error during setAvailableCPUSpeedUnit!");
04395                 tempStr = osresult1->getAvailableCPUSpeedDescription();
04396                 ok &= osresult2->setAvailableCPUSpeedDescription(tempStr);
04397                 if (!ok) 
04398                         throw ErrorClass("Error during setAvailableCPUSpeedDescription!");
04399                 tempDbl = osresult1->getAvailableCPUSpeedValue();
04400                 ok &= osresult2->setAvailableCPUSpeedValue(tempDbl);
04401                 if (!ok) 
04402                         throw ErrorClass("Error during setAvailableCPUSpeedValue!");
04403                 tempStr = osresult1->getAvailableCPUNumberDescription();
04404                 ok &= osresult2->setAvailableCPUNumberDescription(tempStr);
04405                 if (!ok) 
04406                         throw ErrorClass("Error during setAvailableCPUNumberDescription!");
04407                 tempInt = osresult1->getAvailableCPUNumberValue();
04408                 ok &= osresult2->setAvailableCPUNumberValue(tempInt);
04409                 if (!ok) 
04410                         throw ErrorClass("Error during setAvailableCPUNumberValue!");
04411 
04412                 tempInt = osresult1->getNumberOfOtherSystemResults();
04413                 ok &= osresult2->setNumberOfOtherSystemResults(tempInt);
04414                 if (!ok) 
04415                         throw ErrorClass("Error during setNumberOfOtherSystemResults!");
04416                 for (int i=0; i < tempInt; i++)
04417                 {
04418                         tempStr = osresult1->getOtherSystemResultName(i);
04419                         ok &= osresult2->setOtherSystemResultName(i,tempStr);
04420                         if (!ok) 
04421                                 throw ErrorClass("Error during setOtherSystemResultName!");
04422                         tempStr = osresult1->getOtherSystemResultValue(i);
04423                         ok &= osresult2->setOtherSystemResultValue(i,tempStr);
04424                         if (!ok) 
04425                                 throw ErrorClass("Error during setOtherSystemResultValue!");
04426                         tempStr = osresult1->getOtherSystemResultDescription(i);
04427                         ok &= osresult2->setOtherSystemResultDescription(i,tempStr);
04428                         if (!ok) 
04429                                 throw ErrorClass("Error during setOtherSystemResultDescription!");
04430                 }
04431 
04432                 tempStr = osresult1->getCurrentState();
04433                 ok &= osresult2->setCurrentState(tempStr);
04434                 if (!ok) 
04435                         throw ErrorClass("Error during setCurrentState!");
04436                 tempInt = osresult1->getCurrentJobCount();
04437                 ok &= osresult2->setCurrentJobCount(tempInt);
04438                 if (!ok) 
04439                         throw ErrorClass("Error during setCurrentJobCount!");
04440                 tempInt = osresult1->getTotalJobsSoFar();
04441                 ok &= osresult2->setTotalJobsSoFar(tempInt);
04442                 if (!ok) 
04443                         throw ErrorClass("Error during setTotalJobsSoFar!");
04444                 tempStr = osresult1->getTimeServiceStarted();
04445                 ok &= osresult2->setTimeServiceStarted(tempStr);
04446                 if (!ok) 
04447                         throw ErrorClass("Error during setTimeServiceStarted!");
04448                 tempDbl = osresult1->getServiceUtilization();
04449                 ok &= osresult2->setServiceUtilization(tempDbl);
04450                 if (!ok) 
04451                         throw ErrorClass("Error during setServiceUtilization!");
04452 
04453                 tempInt = osresult1->getNumberOfOtherServiceResults();
04454                 ok &= osresult2->setNumberOfOtherServiceResults(tempInt);
04455                 if (!ok) 
04456                         throw ErrorClass("Error during setNumberOfOtherServiceResults!");
04457                 for (int i=0; i < tempInt; i++)
04458                 {
04459                         tempStr = osresult1->getOtherServiceResultName(i);
04460                         ok &= osresult2->setOtherServiceResultName(i,tempStr);
04461                         if (!ok) 
04462                                 throw ErrorClass("Error during setOtherServiceResultName!");
04463                         tempStr = osresult1->getOtherServiceResultValue(i);
04464                         ok &= osresult2->setOtherServiceResultValue(i,tempStr);
04465                         if (!ok) 
04466                                 throw ErrorClass("Error during setOtherServiceResultValue!");
04467                         tempStr = osresult1->getOtherServiceResultDescription(i);
04468                         ok &= osresult2->setOtherServiceResultDescription(i,tempStr);
04469                         if (!ok) 
04470                                 throw ErrorClass("Error during setOtherServiceResultDescription!");
04471                 }
04472 
04473                 tempStr = osresult1->getJobStatus();
04474                 ok &= osresult2->setJobStatus(tempStr);
04475                 if (!ok) 
04476                         throw ErrorClass("Error during setJobStatus!");
04477                 tempStr = osresult1->getJobSubmitTime();
04478                 ok &= osresult2->setJobSubmitTime(tempStr);
04479                 if (!ok) 
04480                         throw ErrorClass("Error during setJobSubmitTime!");
04481                 tempStr = osresult1->getScheduledStartTime();
04482                 ok &= osresult2->setScheduledStartTime(tempStr);
04483                 if (!ok) 
04484                         throw ErrorClass("Error during setScheduledStartTime!");
04485                 tempStr = osresult1->getActualStartTime();
04486                 ok &= osresult2->setActualStartTime(tempStr);
04487                 if (!ok) 
04488                         throw ErrorClass("Error during setActualStartTime!");
04489                 tempStr = osresult1->getJobEndTime();
04490                 ok &= osresult2->setJobEndTime(tempStr);
04491                 if (!ok) 
04492                         throw ErrorClass("Error during setJobEndTime!");
04493 
04494                 tempInt = osresult1->getNumberOfTimes();
04495                 ok &= osresult2->setNumberOfTimes(tempInt);
04496                 if (!ok) 
04497                         throw ErrorClass("Error during setNumberOfTimes!");
04498                 for (int i=0; i < tempInt; i++)
04499                 {
04500                         string tempStr1,tempStr2,tempStr3,tempStr4;
04501                         tempStr1 = osresult1->getTimingInfoType(i);
04502                         tempStr2 = osresult1->getTimingInfoCategory(i);
04503                         tempStr3 = osresult1->getTimingInfoUnit(i);
04504                         tempStr4 = osresult1->getTimingInfoDescription(i);
04505                         tempDbl  = osresult1->getTimingInfoValue(i);
04506                         ok &= osresult2->setTimingInformation(i,tempStr1,tempStr2,tempStr3,tempStr4,tempDbl);
04507                         if (!ok) 
04508                                 throw ErrorClass("Error during setTimingInformation!");
04509                 }
04510 
04511                 tempStr = osresult1->getUsedDiskSpaceUnit();
04512                 ok &= osresult2->setUsedDiskSpaceUnit(tempStr);
04513                 if (!ok) 
04514                         throw ErrorClass("Error during setUsedDiskSpaceUnit!");
04515                 tempStr = osresult1->getUsedDiskSpaceDescription();
04516                 ok &= osresult2->setUsedDiskSpaceDescription(tempStr);
04517                 if (!ok) 
04518                         throw ErrorClass("Error during setUsedDiskSpaceDescription!");
04519                 tempDbl = osresult1->getUsedDiskSpaceValue();
04520                 ok &= osresult2->setUsedDiskSpaceValue(tempDbl);
04521                 if (!ok) 
04522                         throw ErrorClass("Error during setUsedDiskSpaceValue!");
04523                 tempStr = osresult1->getUsedMemoryUnit();
04524                 ok &= osresult2->setUsedMemoryUnit(tempStr);
04525                 if (!ok) 
04526                         throw ErrorClass("Error during setUsedMemoryUnit!");
04527                 tempStr = osresult1->getUsedMemoryDescription();
04528                 ok &= osresult2->setUsedMemoryDescription(tempStr);
04529                 if (!ok) 
04530                         throw ErrorClass("Error during setUsedMemoryDescription!");
04531                 tempDbl = osresult1->getUsedMemoryValue();
04532                 ok &= osresult2->setUsedMemoryValue(tempDbl);
04533                 if (!ok) 
04534                         throw ErrorClass("Error during setUsedMemoryValue!");
04535                 tempStr = osresult1->getUsedCPUSpeedUnit();
04536                 ok &= osresult2->setUsedCPUSpeedUnit(tempStr);
04537                 if (!ok) 
04538                         throw ErrorClass("Error during setUsedCPUSpeedUnit!");
04539                 tempStr = osresult1->getUsedCPUSpeedDescription();
04540                 ok &= osresult2->setUsedCPUSpeedDescription(tempStr);
04541                 if (!ok) 
04542                         throw ErrorClass("Error during setUsedCPUSpeedDescription!");
04543                 tempDbl = osresult1->getUsedCPUSpeedValue();
04544                 ok &= osresult2->setUsedCPUSpeedValue(tempDbl);
04545                 if (!ok) 
04546                         throw ErrorClass("Error during setUsedCPUSpeedValue!");
04547                 tempStr = osresult1->getUsedCPUNumberDescription();
04548                 ok &= osresult2->setUsedCPUNumberDescription(tempStr);
04549                 if (!ok) 
04550                         throw ErrorClass("Error during setUsedCPUNumberDescription!");
04551                 tempInt = osresult1->getUsedCPUNumberValue();
04552                 ok &= osresult2->setUsedCPUNumberValue(tempInt);
04553                 if (!ok) 
04554                         throw ErrorClass("Error during setUsedCPUNumberValue!");
04555 
04556                 tempInt = osresult1->getNumberOfOtherJobResults();
04557                 ok &= osresult2->setNumberOfOtherJobResults(tempInt);
04558                 if (!ok) 
04559                         throw ErrorClass("Error during setNumberOfOtherJobResults!");
04560                 for (int i=0; i < tempInt; i++)
04561                 {
04562                         tempStr = osresult1->getOtherJobResultName(i);
04563                         ok &= osresult2->setOtherJobResultName(i,tempStr);
04564                         if (!ok) 
04565                                 throw ErrorClass("Error during setOtherJobResultName!");
04566                         tempStr = osresult1->getOtherJobResultValue(i);
04567                         ok &= osresult2->setOtherJobResultValue(i,tempStr);
04568                         if (!ok) 
04569                                 throw ErrorClass("Error during setOtherJobResultValue!");
04570                         tempStr = osresult1->getOtherJobResultDescription(i);
04571                         ok &= osresult2->setOtherJobResultDescription(i,tempStr);
04572                         if (!ok) 
04573                                 throw ErrorClass("Error during setOtherJobResultDescription!");
04574                 }
04575 
04576                 tempInt = osresult1->getSolutionNumber();
04577                 ok &= osresult2->setSolutionNumber(tempInt);
04578                 if (!ok) 
04579                         throw ErrorClass("Error during setSolutionNumber!");
04580                 int nSoln = tempInt;
04581                 int nVar, nObj, nCon, nOther, nItem;
04582 
04583                 tempInt = osresult1->getVariableNumber();
04584                 ok &= osresult2->setVariableNumber(tempInt);
04585                 if (!ok) 
04586                         throw ErrorClass("Error during setVariableNumber!");
04587                 tempInt = osresult1->getObjectiveNumber();
04588                 ok &= osresult2->setObjectiveNumber(tempInt);
04589                 if (!ok) 
04590                         throw ErrorClass("Error during setObjectiveNumber!");
04591                 tempInt = osresult1->getConstraintNumber();
04592                 ok &= osresult2->setConstraintNumber(tempInt);
04593                 if (!ok) 
04594                         throw ErrorClass("Error during setConstraintNumber!");
04595 
04596                 for (int i=0; i < nSoln; ++i)
04597                 {
04598                         tempInt = osresult1->getSolutionTargetObjectiveIdx(i);
04599                         ok &= osresult2->setSolutionTargetObjectiveIdx(i,tempInt);
04600                         if (!ok) 
04601                                 throw ErrorClass("Error during setSolutionTargetObjectiveIdx!");
04602                         tempStr = osresult1->getSolutionTargetObjectiveName(i);
04603                         ok &= osresult2->setSolutionTargetObjectiveName(i,tempStr);
04604                         if (!ok) 
04605                                 throw ErrorClass("Error during getSolutionTargetObjectiveName!");
04606                         bool tempLog = osresult1->getSolutionWeightedObjectives(i);
04607                         ok &= osresult2->setSolutionWeightedObjectives(i,tempLog);
04608                         if (!ok) 
04609                                 throw ErrorClass("Error during setSolutionWeightedObjectives!");
04610                         tempStr = osresult1->getSolutionStatusType(i);
04611                         ok &= osresult2->setSolutionStatusType(i,tempStr);
04612                         if (!ok) 
04613                                 throw ErrorClass("Error during setSolutionStatusType!");
04614                         tempStr = osresult1->getSolutionStatusDescription(i);
04615                         ok &= osresult2->setSolutionStatusDescription(i,tempStr);
04616                         if (!ok) 
04617                                 throw ErrorClass("Error during setSolutionStatusDescription!");
04618                         
04619                         tempInt = osresult1->getNumberOfSolutionSubstatuses(i);
04620                         ok &= osresult2->setNumberOfSolutionSubstatuses(i,tempInt);
04621                         if (!ok) 
04622                                 throw ErrorClass("Error during setNumberOfSolutionSubstatuses!");
04623 
04624                         for (int j=0; j < tempInt; ++j)
04625                         {
04626                                 tempStr = osresult1->getSolutionSubstatusType(i,j);
04627                                 ok &= osresult2->setSolutionSubstatusType(i,j,tempStr);
04628                                 if (!ok) 
04629                                         throw ErrorClass("Error during setSolutionSubstatusType!");
04630                                 tempStr = osresult1->getSolutionSubstatusDescription(i,j);
04631                                 ok &= osresult2->setSolutionSubstatusDescription(i,j,tempStr);
04632                                 if (!ok) 
04633                                         throw ErrorClass("Error during setSolutionSubstatusDescription!");
04634                         }
04635 
04636                         tempStr = osresult1->getSolutionMessage(i);
04637                         ok &= osresult2->setSolutionMessage(i,tempStr);
04638                         if (!ok) 
04639                                 throw ErrorClass("Error during setSolutionMessage!");
04640 
04641                         tempInt = osresult1->getNumberOfVarValues(i);
04642                         ok &= osresult2->setNumberOfVarValues(i,tempInt);
04643                         if (!ok) 
04644                                 throw ErrorClass("Error during setNumberOfVarValues!");
04645                         nVar = tempInt;
04646 
04647                         for (int j=0; j < nVar; ++j)
04648                         {
04649                                 tempInt = osresult1->getVarValueIdx(i,j);
04650                                 tempStr = osresult1->getVarValueName(i,j);
04651                                 tempDbl = osresult1->getVarValue(i,j);
04652                                 ok &= osresult2->setVarValue(i,j,tempInt,tempStr,tempDbl);
04653                                 if (!ok) 
04654                                         throw ErrorClass("Error during setVarValue!");
04655                         }
04656 
04657                         tempInt = osresult1->getNumberOfVarValuesString(i);
04658                         ok &= osresult2->setNumberOfVarValuesString(i,tempInt);
04659                         if (!ok) 
04660                                 throw ErrorClass("Error during setNumberOfVarValuesString!");
04661                         nVar = tempInt;
04662 
04663                         std::string tempStr1, tempStr2;
04664 
04665                         for (int j=0; j < nVar; ++j)
04666                         {
04667                                 tempInt  = osresult1->getVarValueStringIdx(i,j);
04668                                 tempStr1 = osresult1->getVarValueStringName(i,j);
04669                                 tempStr2 = osresult1->getVarValueString(i,j);
04670                                 ok &= osresult2->setVarValueString(i,j,tempInt,tempStr1,tempStr2);
04671                                 if (!ok) 
04672                                         throw ErrorClass("Error during setVarValueString!");
04673                         }
04674 
04675 //                      int* tempArray = new int[3];
04676                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic);
04677                         for (int j=0; j<tempInt; ++j)
04678                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic,j);
04679                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_basic,tempArray,tempInt);
04680                         if (!ok) 
04681                                 throw ErrorClass("Error during setBasisStatus (variables basic)!");
04682 
04683                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower);
04684                         for (int j=0; j<tempInt; ++j)
04685                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower,j);
04686                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atLower,tempArray,tempInt);
04687                         if (!ok) 
04688                                 throw ErrorClass("Error during setBasisStatus (variables atLower)!");
04689 
04690                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper);
04691                         for (int j=0; j<tempInt; ++j)
04692                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper,j);
04693                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_atUpper,tempArray,tempInt);
04694                         if (!ok) 
04695                                 throw ErrorClass("Error during setBasisStatus (variables atUpper)!");
04696 
04697                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree);
04698                         for (int j=0; j<tempInt; ++j)
04699                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree,j);
04700                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_isFree,tempArray,tempInt);
04701                         if (!ok) 
04702                                 throw ErrorClass("Error during setBasisStatus (variables isFree)!");
04703 
04704                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic);
04705                         for (int j=0; j<tempInt; ++j)
04706                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic,j);
04707                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_superbasic,tempArray,tempInt);
04708                         if (!ok) 
04709                                 throw ErrorClass("Error during setBasisStatus (variables superbasic)!");
04710 
04711                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown);
04712                         for (int j=0; j<tempInt; ++j)
04713                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown,j);
04714                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_variables,ENUM_BASIS_STATUS_unknown,tempArray,tempInt);
04715                         if (!ok) 
04716                                 throw ErrorClass("Error during setBasisStatus (variables unknown)!");
04717 
04718 
04719                         tempInt = osresult1->getNumberOfOtherVariableResults(i);
04720                         ok &= osresult2->setNumberOfOtherVariableResults(i,tempInt);
04721                         if (!ok) 
04722                                 throw ErrorClass("Error during setNumberOfOtherVariableResults!");
04723                         nOther = tempInt;
04724                         for (int j=0; j < nOther; ++j)
04725                         {
04726                                 tempStr = osresult1->getOtherVariableResultName(i,j);
04727                                 ok &= osresult2->setOtherVariableResultName(i,j,tempStr);
04728                                 if (!ok) 
04729                                         throw ErrorClass("Error during setOtherVariableResultName!");
04730                                 tempStr = osresult1->getOtherVariableResultDescription(i,j);
04731                                 ok &= osresult2->setOtherVariableResultDescription(i,j,tempStr);
04732                                 if (!ok) 
04733                                         throw ErrorClass("Error during setOtherVariableResultDescription!");
04734                                 tempStr = osresult1->getOtherVariableResultValue(i,j);
04735                                 ok &= osresult2->setOtherVariableResultValue(i,j,tempStr);
04736                                 if (!ok) 
04737                                         throw ErrorClass("Error during setOtherVariableResultValue!");
04738 
04739                                 tempInt = osresult1->getOtherVariableResultNumberOfVar(i,j);
04740                                 ok &= osresult2->setOtherVariableResultNumberOfVar(i,j,tempInt);
04741                                 if (!ok) 
04742                                         throw ErrorClass("Error during setOtherVariableResultNumberOfVar!");
04743 
04744                                 int nVar = tempInt;
04745                                 for (int k=0; k < nVar; ++k)
04746                                 {
04747                                         tempInt = osresult1->getOtherVariableResultVarIdx(i,j,k);
04748                                         ok &= osresult2->setOtherVariableResultVarIdx(i,j,k,tempInt);
04749                                         if (!ok) 
04750                                                 throw ErrorClass("Error during setOtherVariableResultVarIdx!");
04751                                         tempStr = osresult1->getOtherVariableResultVar(i,j,k);
04752                                         ok &= osresult2->setOtherVariableResultVar(i,j,k,tempStr);
04753                                         if (!ok) 
04754                                                 throw ErrorClass("Error during setOtherVariableResultVar!");
04755                                 }
04756 
04757                                 int nEnum = osresult1->getOtherVariableResultNumberOfEnumerations(i,j);
04758                                 ok &= osresult2->setOtherVariableResultNumberOfEnumerations(i,j,nEnum);
04759                                 if (!ok) 
04760                                         throw ErrorClass("Error during setOtherVariableResultNumberOfEnumerations!");
04761 
04762                                 for (int k=0; k < nEnum; ++k)
04763                                 {
04764 //                      if (tempArray != NULL) delete[] tempArray;
04765                                         tempStr1  = osresult1->getOtherVariableResultEnumerationValue(i,j,k);
04766                                         tempStr2  = osresult1->getOtherVariableResultEnumerationDescription(i,j,k);
04767                                         tempInt   = osresult1->getOtherVariableResultEnumerationNumberOfEl(i,j,k);
04768                                         for (int l=0; l<tempInt; ++l)
04769                                                 tempArray[l] = osresult1->getOtherVariableResultEnumerationEl(i,j,k,l);
04770                                         ok &= osresult2->setOtherOptionEnumeration(i,j,ENUM_PROBLEM_COMPONENT_variables,k,tempStr1,tempStr2,tempArray,tempInt);
04771                                         if (!ok) 
04772                                                 throw ErrorClass("Error during setOtherVariableResultEnumeration!");
04773                                 }
04774                         }
04775 
04776                         tempInt = osresult1->getNumberOfObjValues(i);
04777                         ok &= osresult2->setNumberOfObjValues(i,tempInt);
04778                         if (!ok) 
04779                                 throw ErrorClass("Error during setNumberOfObjValues!");
04780                         nObj = tempInt;
04781                         for (int j=0; j < nObj; ++j)
04782                         {
04783                                 tempInt = osresult1->getObjValueIdx(i,j);
04784                                 tempStr = osresult1->getObjValueName(i,j);
04785                                 tempDbl = osresult1->getObjValue(i,j);
04786                                 ok &= osresult2->setObjValue(i,j,tempInt,tempStr,tempDbl);
04787                                 if (!ok) 
04788                                         throw ErrorClass("Error during setObjValue!");
04789                         }
04790 
04791 
04792                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic);
04793                         for (int j=0; j<tempInt; ++j)
04794                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic,j);
04795                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_basic,tempArray,tempInt);
04796                         if (!ok) 
04797                                 throw ErrorClass("Error during setBasisStatus (objectives basic)!");
04798 
04799                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower);
04800                         for (int j=0; j<tempInt; ++j)
04801                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower,j);
04802                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atLower,tempArray,tempInt);
04803                         if (!ok) 
04804                                 throw ErrorClass("Error during setBasisStatus (objectives atLower)!");
04805 
04806                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper);
04807                         for (int j=0; j<tempInt; ++j)
04808                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper,j);
04809                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_atUpper,tempArray,tempInt);
04810                         if (!ok) 
04811                                 throw ErrorClass("Error during setBasisStatus (objectives atUpper)!");
04812 
04813                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree);
04814                         for (int j=0; j<tempInt; ++j)
04815                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree,j);
04816                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_isFree,tempArray,tempInt);
04817                         if (!ok) 
04818                                 throw ErrorClass("Error during setBasisStatus (objectives isFree)!");
04819 
04820                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic);
04821                         for (int j=0; j<tempInt; ++j)
04822                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic,j);
04823                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_superbasic,tempArray,tempInt);
04824                         if (!ok) 
04825                                 throw ErrorClass("Error during setBasisStatus (objectives superbasic)!");
04826 
04827                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown);
04828                         for (int j=0; j<tempInt; ++j)
04829                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown,j);
04830                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_objectives,ENUM_BASIS_STATUS_unknown,tempArray,tempInt);
04831                         if (!ok) 
04832                                 throw ErrorClass("Error during setBasisStatus (objectives unknown)!");
04833 
04834 
04835 
04836                         tempInt = osresult1->getNumberOfOtherObjectiveResults(i);
04837                         ok &= osresult2->setNumberOfOtherObjectiveResults(i,tempInt);
04838                         if (!ok) 
04839                                 throw ErrorClass("Error during setNumberOfOtherObjectiveResults!");
04840                         nOther = tempInt;
04841                         for (int j=0; j < nOther; ++j)
04842                         {
04843                                 tempStr = osresult1->getOtherObjectiveResultName(i,j);
04844                                 ok &= osresult2->setOtherObjectiveResultName(i,j,tempStr);
04845                                 if (!ok) 
04846                                         throw ErrorClass("Error during setOtherObjectiveResultName!");
04847                                 tempStr = osresult1->getOtherObjectiveResultDescription(i,j);
04848                                 ok &= osresult2->setOtherObjectiveResultDescription(i,j,tempStr);
04849                                 if (!ok) 
04850                                         throw ErrorClass("Error during setOtherObjectiveResultDescription!");
04851                                 tempStr = osresult1->getOtherObjectiveResultValue(i,j);
04852                                 ok &= osresult2->setOtherObjectiveResultValue(i,j,tempStr);
04853                                 if (!ok) 
04854                                         throw ErrorClass("Error during setOtherObjectiveResultValue!");
04855 
04856                                 tempInt = osresult1->getOtherObjectiveResultNumberOfObj(i,j);
04857                                 ok &= osresult2->setOtherObjectiveResultNumberOfObj(i,j,tempInt);
04858                                 if (!ok) 
04859                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfObj!");
04860 
04861                                 nObj = tempInt;
04862                                 for (int k=0; k < nObj; ++k)
04863                                 {
04864                                         tempInt = osresult1->getOtherObjectiveResultObjIdx(i,j,k);
04865                                         ok &= osresult2->setOtherObjectiveResultObjIdx(i,j,k,tempInt);
04866                                         if (!ok) 
04867                                                 throw ErrorClass("Error during setOtherObjectiveResultObjIdx!");
04868                                         tempStr = osresult1->getOtherObjectiveResultObj(i,j,k);
04869                                         ok &= osresult2->setOtherObjectiveResultObj(i,j,k,tempStr);
04870                                         if (!ok) 
04871                                                 throw ErrorClass("Error during setOtherObjectiveResultObj!");
04872                                 }
04873 
04874                                 int nEnum = osresult1->getOtherObjectiveResultNumberOfEnumerations(i,j);
04875                                 ok &= osresult2->setOtherObjectiveResultNumberOfEnumerations(i,j,nEnum);
04876                                 if (!ok) 
04877                                         throw ErrorClass("Error during setOtherObjectiveResultNumberOfEnumerations!");
04878                                 std::string tempStr1, tempStr2;
04879 
04880                                 for (int k=0; k < nEnum; ++k)
04881                                 {
04882 //                      if (tempArray != NULL) delete[] tempArray;
04883                                         tempStr1  = osresult1->getOtherObjectiveResultEnumerationValue(i,j,k);
04884                                         tempStr2  = osresult1->getOtherObjectiveResultEnumerationDescription(i,j,k);
04885                                         tempInt   = osresult1->getOtherObjectiveResultEnumerationNumberOfEl(i,j,k);
04886                                         for (int l=0; l<tempInt; ++l)
04887                                                 tempArray[l] = osresult1->getOtherObjectiveResultEnumerationEl(i,j,k,l);
04888                                         ok &= osresult2->setOtherOptionEnumeration(i,j,ENUM_PROBLEM_COMPONENT_objectives,k,tempStr1,tempStr2,tempArray,tempInt);
04889                                         if (!ok) 
04890                                                 throw ErrorClass("Error during setOtherObjectiveResultEnumeration!");
04891                                 }
04892                         }
04893 
04894 
04895                         tempInt = osresult1->getNumberOfDualValues(i);
04896                         ok &= osresult2->setNumberOfDualValues(i,tempInt);
04897                         if (!ok) 
04898                                 throw ErrorClass("Error during setNumberOfDualValues!");
04899                         nCon = tempInt;
04900                         for (int j=0; j < nCon; ++j)
04901                         {
04902                                 tempInt = osresult1->getDualValueIdx(i,j);
04903                                 tempStr = osresult1->getDualValueName(i,j);
04904                                 tempDbl = osresult1->getDualValue(i,j);
04905                                 ok &= osresult2->setDualValue(i,j,tempInt,tempStr,tempDbl);
04906                                 if (!ok) 
04907                                         throw ErrorClass("Error during setDualValue!");
04908                         }
04909 
04910 
04911                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic);
04912                         for (int j=0; j<tempInt; ++j)
04913                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic,j);
04914                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_basic,tempArray,tempInt);
04915                         if (!ok) 
04916                                 throw ErrorClass("Error during setBasisStatus (constraints basic)!");
04917 
04918                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower);
04919                         for (int j=0; j<tempInt; ++j)
04920                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower,j);
04921                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atLower,tempArray,tempInt);
04922                         if (!ok) 
04923                                 throw ErrorClass("Error during setBasisStatus (constraints atLower)!");
04924 
04925                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper);
04926                         for (int j=0; j<tempInt; ++j)
04927                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper,j);
04928                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_atUpper,tempArray,tempInt);
04929                         if (!ok) 
04930                                 throw ErrorClass("Error during setBasisStatus (constraints atUpper)!");
04931 
04932                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree);
04933                         for (int j=0; j<tempInt; ++j)
04934                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree,j);
04935                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_isFree,tempArray,tempInt);
04936                         if (!ok) 
04937                                 throw ErrorClass("Error during setBasisStatus (constraints isFree)!");
04938 
04939                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic);
04940                         for (int j=0; j<tempInt; ++j)
04941                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic,j);
04942                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_superbasic,tempArray,tempInt);
04943                         if (!ok) 
04944                                 throw ErrorClass("Error during setBasisStatus (constraints superbasic)!");
04945 
04946                         tempInt = osresult1->getBasisStatusNumberOfEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown);
04947                         for (int j=0; j<tempInt; ++j)
04948                                 tempArray[j] = osresult1->getBasisStatusEl(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown,j);
04949                         ok &= osresult2->setBasisStatus(i,ENUM_PROBLEM_COMPONENT_constraints,ENUM_BASIS_STATUS_unknown,tempArray,tempInt);
04950                         if (!ok) 
04951                                 throw ErrorClass("Error during setBasisStatus (constraints unknown)!");
04952 
04953 
04954 
04955 
04956                         tempInt = osresult1->getNumberOfOtherConstraintResults(i);
04957                         ok &= osresult2->setNumberOfOtherConstraintResults(i,tempInt);
04958                         if (!ok) 
04959                                 throw ErrorClass("Error during setNumberOfOtherConstraintResults!");
04960                         nOther = tempInt;
04961                         for (int j=0; j < nOther; ++j)
04962                         {
04963                                 tempStr = osresult1->getOtherConstraintResultName(i,j);
04964                                 ok &= osresult2->setOtherConstraintResultName(i,j,tempStr);
04965                                 if (!ok) 
04966                                         throw ErrorClass("Error during setOtherConstraintResultName!");
04967                                 tempStr = osresult1->getOtherConstraintResultDescription(i,j);
04968                                 ok &= osresult2->setOtherConstraintResultDescription(i,j,tempStr);
04969                                 if (!ok) 
04970                                         throw ErrorClass("Error during setOtherConstraintResultDescription!");
04971                                 tempStr = osresult1->getOtherConstraintResultValue(i,j);
04972                                 ok &= osresult2->setOtherConstraintResultValue(i,j,tempStr);
04973                                 if (!ok) 
04974                                         throw ErrorClass("Error during setOtherConstraintResultValue!");
04975                                 tempInt = osresult1->getOtherConstraintResultNumberOfCon(i,j);
04976                                 ok &= osresult2->setOtherConstraintResultNumberOfCon(i,j,tempInt);
04977                                 if (!ok) 
04978                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfCon!");
04979 
04980                                 nCon = tempInt;
04981                                 for (int k=0; k < nCon; ++k)
04982                                 {
04983                                         tempInt = osresult1->getOtherConstraintResultConIdx(i,j,k);
04984                                         ok &= osresult2->setOtherConstraintResultConIdx(i,j,k,tempInt);
04985                                         if (!ok) 
04986                                                 throw ErrorClass("Error during setOtherConstraintResultConIdx!");
04987                                         tempStr = osresult1->getOtherConstraintResultCon(i,j,k);
04988                                         ok &= osresult2->setOtherConstraintResultCon(i,j,k,tempStr);
04989                                         if (!ok) 
04990                                                 throw ErrorClass("Error during setOtherConstraintResultCon!");
04991                                 }
04992 
04993 
04994 
04995                                 int nEnum = osresult1->getOtherConstraintResultNumberOfEnumerations(i,j);
04996                                 ok &= osresult2->setOtherConstraintResultNumberOfEnumerations(i,j,nEnum);
04997                                 if (!ok) 
04998                                         throw ErrorClass("Error during setOtherConstraintResultNumberOfEnumerations!");
04999                                 std::string tempStr1, tempStr2;
05000 
05001                                 for (int k=0; k < nEnum; ++k)
05002                                 {
05003 //                      if (tempArray != NULL) delete[] tempArray;
05004                                         tempStr1  = osresult1->getOtherConstraintResultEnumerationValue(i,j,k);
05005                                         tempStr2  = osresult1->getOtherConstraintResultEnumerationDescription(i,j,k);
05006                                         tempInt   = osresult1->getOtherConstraintResultEnumerationNumberOfEl(i,j,k);
05007                                         for (int l=0; l<tempInt; ++l)
05008                                                 tempArray[l] = osresult1->getOtherConstraintResultEnumerationEl(i,j,k,l);
05009                                         ok &= osresult2->setOtherOptionEnumeration(i,j,ENUM_PROBLEM_COMPONENT_constraints,k,tempStr1,tempStr2,tempArray,tempInt);
05010                                         if (!ok) 
05011                                                 throw ErrorClass("Error during setOtherConstraintResultEnumeration!");
05012                                 }
05013                         }
05014 
05015 
05016                         tempInt = osresult1->getNumberOfOtherSolutionResults(i);
05017                         ok &= osresult2->setNumberOfOtherSolutionResults(i,tempInt);
05018                         if (!ok) 
05019                                 throw ErrorClass("Error during setNumberOfOtherSolutionResults!");
05020                         nOther = tempInt;
05021                         for (int j=0; j < nOther; ++j)
05022                         {
05023                                 tempStr = osresult1->getOtherSolutionResultName(i,j);
05024                                 ok &= osresult2->setOtherSolutionResultName(i,j,tempStr);
05025                                 if (!ok) 
05026                                         throw ErrorClass("Error during setOtherSolutionResultName!");
05027                                 tempStr = osresult1->getOtherSolutionResultCategory(i,j);
05028                                 ok &= osresult2->setOtherSolutionResultCategory(i,j,tempStr);
05029                                 if (!ok) 
05030                                         throw ErrorClass("Error during setOtherSolutionResultCategory!");
05031                                 tempStr = osresult1->getOtherSolutionResultDescription(i,j);
05032                                 ok &= osresult2->setOtherSolutionResultDescription(i,j,tempStr);
05033                                 if (!ok) 
05034                                         throw ErrorClass("Error during setOtherSolutionResultDescription!");
05035                                 tempInt = osresult1->getOtherSolutionResultNumberOfItems(i,j);
05036                                 ok &= osresult2->setOtherSolutionResultNumberOfItems(i,j,tempInt);
05037                                 if (!ok) 
05038                                         throw ErrorClass("Error during setOtherSolutionResultNumberOfItems!");
05039 
05040                                 nItem = tempInt;
05041                                 for (int k=0; k < nItem; ++k)
05042                                 {
05043                                         tempStr = osresult1->getOtherSolutionResultItem(i,j,k);
05044                                         ok &= osresult2->setOtherSolutionResultItem(i,j,k,tempStr);
05045                                         if (!ok) 
05046                                                 throw ErrorClass("Error during setSolutionResultItem!");
05047                                 }
05048                         }
05049                 }
05050 
05051                 tempInt = osresult1->getNumberOfSolverOutputs();
05052                 ok &= osresult2->setNumberOfSolverOutputs(tempInt);
05053                 if (!ok) 
05054                         throw ErrorClass("Error during setNumberOfSolverOutputs!");
05055                 nOther = tempInt;
05056                 for (int i=0; i < nOther; ++i)
05057                 {
05058                         tempStr = osresult1->getSolverOutputName(i);
05059                         ok &= osresult2->setSolverOutputName(i,tempStr);
05060                         if (!ok) 
05061                                 throw ErrorClass("Error during setSolverOutputName!");
05062                         tempStr = osresult1->getSolverOutputCategory(i);
05063                         ok &= osresult2->setSolverOutputCategory(i,tempStr);
05064                         if (!ok) 
05065                                 throw ErrorClass("Error during setSolverOutputCategory!");
05066                         tempStr = osresult1->getSolverOutputDescription(i);
05067                         ok &= osresult2->setSolverOutputDescription(i,tempStr);
05068                         if (!ok) 
05069                                 throw ErrorClass("Error during setSolverOutputDescription!");
05070                         tempInt = osresult1->getSolverOutputNumberOfItems(i);
05071                         ok &= osresult2->setSolverOutputNumberOfItems(i,tempInt);
05072                         if (!ok) 
05073                                 throw ErrorClass("Error during setSolverOutputNumberOfItems!");
05074                         for (int j=0; j < tempInt; ++j)
05075                         {
05076                                 tempStr = osresult1->getSolverOutputItem(i,j);
05077                                 ok &= osresult2->setSolverOutputItem(i,j,tempStr);
05078                                 if (!ok) 
05079                                         throw ErrorClass("Error during setSolverOutputItem!");
05080                         }
05081                 }
05082 
05083 
05084                 ok &= osresult1->IsEqual(osresult2);
05085                 if (!ok)
05086                         throw ErrorClass("Error duplicating OSResult object using get() and set() methods");
05087 
05088                 if (osrlwriter != NULL) delete osrlwriter;
05089                 osrlwriter = NULL;
05090                 if (osrlreader != NULL) delete osrlreader;
05091                 osrlreader = NULL;
05092                 if (osresult1  != NULL) delete osresult1;
05093                 osresult1 = NULL;
05094                 if (osresult2  != NULL) delete osresult2;
05095                 osresult2 = NULL;
05096 //              if (osresult   != NULL) delete osresult;
05097 //              osresult = NULL;
05098                 if (tempArray  != NULL) delete[] tempArray;
05099                 tempArray = NULL;
05100 //#endif    //#ifdef TEMP   //---------------------------for the time being----------------------------------
05101 
05102                 unitTestResult << "TEST " << nOfTest << ": Successful test of OSrL tools" << std::endl;
05103                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05104         }       
05105         
05106         catch(const ErrorClass& eclass){
05107                 cout << endl << endl << endl;
05108                 if (osrlwriter != NULL) delete osrlwriter;
05109                 osrlwriter = NULL;
05110                 if (osrlreader != NULL) delete osrlreader;
05111                 osrlreader = NULL;
05112                 if (osresult1  != NULL) delete osresult1;
05113                 osresult1 = NULL;
05114                 if (osresult2  != NULL) delete osresult2;
05115                 osresult2 = NULL;
05116 //              if (osresult   != NULL) delete osresult;
05117 //              osresult = NULL;
05118                 if (tempArray  != NULL) delete[] tempArray;
05119                 tempArray = NULL;
05120                 // " Problem with the test reading OSoL data";
05121                 unitTestResultFailure << eclass.errormsg << endl;
05122                 unitTestResultFailure << "There was a failure in the test of OSrL get() methods" << endl;
05123         }
05124 //#endif    //#ifdef TEMP   //---------------------------for the time being----------------------------------
05125 
05126         // Now test the OSrL parser
05127         try{ 
05138                 cout << endl << "TEST " << ++nOfTest << ": OSrL parser" << endl << endl;
05139                 std::string tmpOSrL;
05140                 clock_t start, finish;
05141                 double duration;
05142                 std::string osrl;
05143                 osrlwriter = new OSrLWriter();
05144                 osrlreader = new OSrLReader();
05145                 cout << "Test parsing an OSrL file" << endl;
05146                 cout << "First read the OSrL file into a string" << endl;
05147                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest.osrl"; 
05148                 start = clock();
05149                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05150                 finish = clock();
05151                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05152                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05153                 cout << osrl << endl;
05154                 start = clock();
05155                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05156                 osresult = osrlreader->readOSrL( osrl);
05157                 cout << "Finished read; write OSResult object to temporary string" << endl;
05158 
05159                 tmpOSrL = osrlwriter->writeOSrL( osresult);
05160 
05161                 cout << tmpOSrL << endl;
05162 
05163 
05164                 // make sure we can parse without error
05165                 delete osrlreader;
05166                 osrlreader = new OSrLReader();
05167                 osrlreader->readOSrL( tmpOSrL);
05168 
05169                 delete osrlwriter;
05170                 osrlwriter = NULL;
05171                 delete osrlreader;
05172                 osrlreader = NULL;
05173 
05174 
05175 /*              // now a second example
05176                 cout << endl << "Test parsing another OSrL file" << endl;
05177                 osrlwriter = new OSrLWriter();
05178                 osrlreader = new OSrLReader();
05179                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05180                 //errorExample.osrl -- check to see if we read an error message correctly;
05181                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "errorExample.osrl"; 
05182                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05183                 finish = clock();
05184                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05185                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05186                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05187                 osresult = osrlreader->readOSrL( osrl);
05188                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05189                 delete osrlreader;
05190                 osrlreader = new OSrLReader();
05191                 osrlreader->readOSrL( tmpOSrL);
05192                 delete osrlwriter;
05193                 osrlwriter = NULL;
05194                 delete osrlreader;
05195                 osrlreader = NULL;
05196 
05197                 // ... and another
05198                 cout << endl << "parserTest1.osrl" << endl;
05199                 osrlwriter = new OSrLWriter();
05200                 osrlreader = new OSrLReader();
05201                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05202                 //errorExample.osrl -- check to see if we read an error message correctly;
05203                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest1.osrl"; 
05204                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05205                 finish = clock();
05206                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05207                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05208                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05209                 osresult = osrlreader->readOSrL( osrl);
05210                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05211                 delete osrlreader;
05212                 osrlreader = new OSrLReader();
05213                 osrlreader->readOSrL( tmpOSrL);
05214                 delete osrlwriter;
05215                 osrlwriter = NULL;
05216                 delete osrlreader;
05217                 osrlreader = NULL;
05218 
05219                 // ... and another
05220                 cout << endl << "parserTest2.osrl" << endl;
05221                 osrlwriter = new OSrLWriter();
05222                 osrlreader = new OSrLReader();
05223                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05224                 //errorExample.osrl -- check to see if we read an error message correctly;
05225                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest2.osrl"; 
05226                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05227                 finish = clock();
05228                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05229                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05230                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05231                 osresult = osrlreader->readOSrL( osrl);
05232                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05233                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05234                 delete osrlreader;
05235                 osrlreader = new OSrLReader();
05236                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05237                 osrlreader->readOSrL( tmpOSrL);
05238                 delete osrlwriter;
05239                 osrlwriter = NULL;
05240                 delete osrlreader;
05241                 osrlreader = NULL;
05242 
05243                 // ... and another
05244                 cout << endl << "parserTest3.osrl" << endl;
05245                 osrlwriter = new OSrLWriter();
05246                 osrlreader = new OSrLReader();
05247                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05248                 //errorExample.osrl -- check to see if we read an error message correctly;
05249                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest3.osrl"; 
05250                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05251                 finish = clock();
05252                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05253                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05254                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05255                 osresult = osrlreader->readOSrL( osrl);
05256                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05257                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05258                 delete osrlreader;
05259                 osrlreader = new OSrLReader();
05260                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05261                 osrlreader->readOSrL( tmpOSrL);
05262                 delete osrlwriter;
05263                 osrlwriter = NULL;
05264                 delete osrlreader;
05265                 osrlreader = NULL;
05266 
05267                 // ... and another
05268                 cout << endl << "parserTest4.osrl" << endl;
05269                 osrlwriter = new OSrLWriter();
05270                 osrlreader = new OSrLReader();
05271                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05272                 //errorExample.osrl -- check to see if we read an error message correctly;
05273                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest4.osrl"; 
05274                 start = clock();
05275                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05276                 finish = clock();
05277                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05278                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05279                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05280                 osresult = osrlreader->readOSrL( osrl);
05281                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05282                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05283                 delete osrlreader;
05284                 osrlreader = new OSrLReader();
05285                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05286                 osrlreader->readOSrL( tmpOSrL);
05287                 delete osrlwriter;
05288                 osrlwriter = NULL;
05289                 delete osrlreader;
05290                 osrlreader = NULL;
05291 
05292                 // ... and another
05293                 cout << endl << "parserTest5.osrl" << endl;
05294                 osrlwriter = new OSrLWriter();
05295                 osrlreader = new OSrLReader();
05296                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05297                 //errorExample.osrl -- check to see if we read an error message correctly;
05298                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest5.osrl"; 
05299                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05300                 finish = clock();
05301                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05302                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05303                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05304                 osresult = osrlreader->readOSrL( osrl);
05305                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05306                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05307                 delete osrlreader;
05308                 osrlreader = new OSrLReader();
05309                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05310                 osrlreader->readOSrL( tmpOSrL);
05311                 delete osrlwriter;
05312                 osrlwriter = NULL;
05313                 delete osrlreader;
05314                 osrlreader = NULL;
05315 
05316                 // ... and another
05317                 cout << endl << "parserTest6.osrl" << endl;
05318                 osrlwriter = new OSrLWriter();
05319                 osrlreader = new OSrLReader();
05320                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05321                 //errorExample.osrl -- check to see if we read an error message correctly;
05322                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest6.osrl"; 
05323                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05324                 finish = clock();
05325                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05326                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05327                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05328                 osresult = osrlreader->readOSrL( osrl);
05329                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05330                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05331                 delete osrlreader;
05332                 osrlreader = new OSrLReader();
05333                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05334                 osrlreader->readOSrL( tmpOSrL);
05335                 delete osrlwriter;
05336                 osrlwriter = NULL;
05337                 delete osrlreader;
05338                 osrlreader = NULL;
05339 
05340                 // ... and another
05341                 cout << endl << "parserTest7.osrl" << endl;
05342                 osrlwriter = new OSrLWriter();
05343                 osrlreader = new OSrLReader();
05344                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05345                 //errorExample.osrl -- check to see if we read an error message correctly;
05346                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest7.osrl"; 
05347                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05348                 finish = clock();
05349                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05350                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05351                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05352                 osresult = osrlreader->readOSrL( osrl);
05353                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05354                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05355                 delete osrlreader;
05356                 osrlreader = new OSrLReader();
05357                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05358                 osrlreader->readOSrL( tmpOSrL);
05359                 delete osrlwriter;
05360                 osrlwriter = NULL;
05361                 delete osrlreader;
05362                 osrlreader = NULL;
05363 
05364                 // ... and another
05365                 cout << endl << "parserTest8.osrl" << endl;
05366                 osrlwriter = new OSrLWriter();
05367                 osrlreader = new OSrLReader();
05368                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05369                 //errorExample.osrl -- check to see if we read an error message correctly;
05370                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest8.osrl"; 
05371                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05372                 finish = clock();
05373                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05374                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05375                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05376                 osresult = osrlreader->readOSrL( osrl);
05377                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05378                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05379                 delete osrlreader;
05380                 osrlreader = new OSrLReader();
05381                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05382                 osrlreader->readOSrL( tmpOSrL);
05383                 delete osrlwriter;
05384                 osrlwriter = NULL;
05385                 delete osrlreader;
05386                 osrlreader = NULL;
05387 
05388                 // ... and another
05389                 cout << endl << "parserTest9.osrl" << endl;
05390                 osrlwriter = new OSrLWriter();
05391                 osrlreader = new OSrLReader();
05392                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05393                 //errorExample.osrl -- check to see if we read an error message correctly;
05394                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest9.osrl"; 
05395                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05396                 finish = clock();
05397                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05398                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05399                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05400                 osresult = osrlreader->readOSrL( osrl);
05401                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05402                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05403                 delete osrlreader;
05404                 osrlreader = new OSrLReader();
05405                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05406                 osrlreader->readOSrL( tmpOSrL);
05407                 delete osrlwriter;
05408                 osrlwriter = NULL;
05409                 delete osrlreader;
05410                 osrlreader = NULL;
05411 
05412 
05413                 // ... last file...
05414                 cout << endl << "parserTest10.osrl" << endl;
05415                 osrlwriter = new OSrLWriter();
05416                 osrlreader = new OSrLReader();
05417                 cout << "FIRST READ THE OSrL FILE INTO A STRING" << endl;
05418                 //errorExample.osrl -- check to see if we read an error message correctly;
05419                 osrlFileName = dataDir  + "osrlFiles" + dirsep + "parserTest10.osrl"; 
05420                 osrl = fileUtil->getFileAsString( osrlFileName.c_str() );
05421                 finish = clock();
05422                 duration = (double) (finish - start) / CLOCKS_PER_SEC;
05423                 cout << "Reading the file into a string took (seconds): "<< duration << endl;
05424                 cout << "PARSE THE OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05425                 osresult = osrlreader->readOSrL( osrl);
05426                 cout << "WRITE THE OSRESULT OBJECT INTO A NEW OSRL STRING" << endl;
05427                 tmpOSrL = osrlwriter->writeOSrL( osresult) ;
05428                 delete osrlreader;
05429                 osrlreader = new OSrLReader();
05430                 cout << "PARSE THE NEW OSRL STRING INTO AN OSRESULT OBJECT" << endl;
05431                 osrlreader->readOSrL( tmpOSrL);
05432                 delete osrlwriter;
05433                 osrlwriter = NULL;
05434                 delete osrlreader;
05435                 osrlreader = NULL;
05436 */
05437                 unitTestResult << 
05438                      "TEST " << nOfTest << ": Successful test of OSrL parser on file parserTest.osrl" 
05439                       << std::endl;
05440                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05441         }       
05442         catch(const ErrorClass& eclass){
05443 
05444                 cout << endl << endl << endl;
05445                 if(osrlwriter != NULL) delete osrlwriter;
05446                 osrlwriter = NULL;
05447                 if(osrlreader != NULL) delete osrlreader;
05448                 osrlreader = NULL;
05449                 // " Problem with the test reading OSrL data";
05450                 unitTestResultFailure << eclass.errormsg << endl;
05451                 unitTestResultFailure << "There was a failure in the test for reading OSrL" << endl;
05452         }
05453 
05454         if (intArray !=NULL) 
05455         {
05456                 delete[] intArray;
05457                 intArray = NULL;
05458         }
05459 
05460 }       // PARSER_TESTS
05461 
05462 
05463 if (SOLVER_TESTS){
05464         try{
05465                 cout << endl << "TEST " << ++nOfTest << ": Clp solver on parincLinearByRow.osil" << endl << endl;
05466                 ok = true; 
05467                 std::cout << "create a new COIN Clp for OSiL string solution" << std::endl;
05468                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinearByRow.osil";
05469                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinearByRow_clp.osol";
05470                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05471                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05472 
05473                 std::cout << "create a new Solver object" << std::endl;
05474                 osilreader = new OSiLReader(); 
05475                 osolreader = new OSoLReader(); 
05476                 solver = new CoinSolver();
05477                 solver->sSolverName = "clp";
05478                 solver->osinstance = osilreader->readOSiL( osil);
05479                 std::cout << " Done reading the OSiL" << std::endl;
05480                 // now write it again as a string
05481                 OSiLWriter *osilwriter;
05482                 osilwriter = new OSiLWriter();
05483                 osilwriter->m_bWhiteSpace = true;
05484                 std::cout << " Write the OSiL" << std::endl;
05485                 osil = osilwriter->writeOSiL( solver->osinstance) ;
05486                 //std::cout <<  osil  << std::endl;
05487                 std::cout << " Done writing the OSiL" << std::endl;
05488                 solver->osoption   = osolreader->readOSoL( osol);
05489                 cout << "call the COIN - clp Solver for parincLinearbyRow" << endl;
05490                 //solver->buildSolverInstance();
05491                 std::cout << "call solver" << std::endl;
05492                 solver->solve();
05493                 std::cout << "returned from solver" << std::endl;
05494                 check = 7668;
05495                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05496                 if (ok)
05497                 {       
05498 #ifdef DEBUG
05499                         cout << solver->osrl << endl;
05500 #endif
05501                         cout << "COIN clp solver solution for parincLinearByRow checks." << endl;               
05502                 }
05503                 else
05504                 {       cout << "COIN clp solver solution for parincLinearByRow in error:" << endl;
05505                         cout << solver->osrl << endl;
05506                 }
05507                 if(ok == false) throw ErrorClass(" Fail unit test with clp on parincLinearByRow.osil");
05508                 // parse the osrl file
05509                 osrlreader =  new OSrLReader();
05510 #ifdef DEBUG
05511                 cout << "\nThe osrl file:\n" << solver->osrl << endl;
05512                 cout << "Start parsing the file" << endl;
05513 #endif
05514                 osrlreader->readOSrL( solver->osrl);
05515 #ifdef DEBUG
05516                 cout << "read successfully" << endl;
05517 #endif
05518                 delete osilreader;
05519                 osilreader = NULL;      
05520 #ifdef DEBUG
05521                 cout << "osilreader successfully deleted" << endl;
05522 #endif
05523                 delete osolreader;
05524                 osolreader = NULL;      
05525 #ifdef DEBUG
05526                 cout << "osolreader successfully deleted" << endl;
05527 #endif
05528                 delete solver;
05529                 solver = NULL;
05530 #ifdef DEBUG
05531                 cout << "solver successfully deleted" << endl;
05532 #endif
05533                 delete osilwriter;
05534                 osilwriter = NULL;
05535 #ifdef DEBUG
05536                 cout << "osilwriter successfully deleted" << endl;
05537 #endif
05538                 delete osrlreader;
05539                 osrlreader = NULL;
05540 #ifdef DEBUG
05541                 cout << "osrlreader successfully deleted" << endl;
05542 #endif          
05543                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinearByRow.osil with Clp" << std::endl;
05544                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05545         }
05546         catch(const ErrorClass& eclass){
05547                 unitTestResultFailure << "Sorry Unit Test Failed Testing Clp Solver:"  + eclass.errormsg<< endl;
05548 
05549                 if (osilreader != NULL)
05550                         delete osilreader;
05551                 osilreader = NULL;      
05552                 if (osolreader != NULL)
05553                         delete osolreader;
05554                 osolreader = NULL;      
05555                 if (solver != NULL)
05556                         delete solver;
05557                 solver = NULL;
05558                 if (osilwriter != NULL)
05559                         delete osilwriter;
05560                 osilwriter = NULL;
05561                 if (osrlreader != NULL)
05562                         delete osrlreader;
05563                 osrlreader = NULL;
05564         }
05565 
05566         // now solve another problem -- try an integer program
05567         try{
05568                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033.osil" << endl << endl;
05569                 std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
05570                 ok = true;
05571                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
05572                 //osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
05573                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05574                 //osol = fileUtil->getFileAsString( osolFileName.c_str());
05575                 osol = "";
05576                 osilreader = new OSiLReader(); 
05577                 osolreader = new OSoLReader(); 
05578                 solver = new CoinSolver();
05579                 solver->sSolverName ="cbc";
05580                 solver->osil = osil;
05581                 solver->osol = osol;  
05582                 solver->osinstance = NULL; 
05583                 solver->osoption   = NULL;
05584                 cout << "call the COIN - Cbc Solver for p0033" << endl;
05585                 solver->buildSolverInstance();
05586                 solver->solve();
05587                 check = 3089;
05588                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05589                 if (ok)
05590                 {       
05591 #ifdef DEBUG
05592                         cout << solver->osrl << endl;
05593 #endif
05594                         cout << "Coin cbc solution for p0033 checks" << endl;
05595                 }
05596                 else
05597                 {       cout << "Coin cbc solution for p0033 in error:" << endl;
05598                         cout << solver->osrl << endl;
05599                 }
05600                 if (ok == false) throw ErrorClass(" Fail unit test with Cbc on p0033.osil");
05601                 delete solver;
05602                 solver = NULL;
05603                 delete osilreader;
05604                 osilreader = NULL;
05605                 delete osolreader;
05606                 osolreader = NULL;
05607                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with Cbc" << std::endl;
05608                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05609         }
05610         catch(const ErrorClass& eclass){
05611                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
05612                 if (solver != NULL)
05613                         delete solver;
05614                 solver = NULL;
05615                 if (osilreader != NULL)
05616                         delete osilreader;
05617                 osilreader = NULL;
05618                 if (osolreader != NULL)
05619                         delete osolreader;
05620                 osolreader = NULL;
05621         }
05622 
05623 if( THOROUGH == true){
05624 
05625         // now solve the same problem with a different instance representation --- using mult and incr
05626         try{
05627                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033MULT.osil" << endl << endl;
05628                 std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
05629                 ok = true;
05630                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033MULT.osil";
05631                 //osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
05632                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05633                 //osol = fileUtil->getFileAsString( osolFileName.c_str());
05634                 osol = "";
05635                 osilreader = new OSiLReader(); 
05636                 osolreader = new OSoLReader(); 
05637                 solver = new CoinSolver();
05638                 solver->sSolverName ="cbc";
05639                 solver->osil = osil;
05640                 solver->osol = osol;  
05641                 solver->osinstance = NULL; 
05642                 solver->osoption   = NULL;
05643                 cout << "call the COIN - Cbc Solver for p0033MULT" << endl;
05644                 solver->buildSolverInstance();
05645                 solver->solve();
05646                 check = 3089;
05647                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05648                 if (ok)
05649                 {       
05650 #ifdef DEBUG
05651                         cout << solver->osrl << endl;
05652 #endif
05653                         cout << "Coin cbc solution for p0033MULT checks" << endl;
05654                 }
05655                 else
05656                 {       cout << "Coin cbc solution for p0033MULT in error:" << endl;
05657                         cout << solver->osrl << endl;
05658                 }
05659                 if (ok == false) throw ErrorClass(" Fail unit test with Cbc on p0033MULT.osil");
05660                 delete solver;
05661                 solver = NULL;
05662                 delete osilreader;
05663                 osilreader = NULL;
05664                 delete osolreader;
05665                 osolreader = NULL;
05666                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033MULT.osil with Cbc" << std::endl;
05667                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05668         }
05669         catch(const ErrorClass& eclass){
05670                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
05671                 if (solver != NULL)
05672                         delete solver;
05673                 solver = NULL;
05674                 if (osilreader != NULL)
05675                         delete osilreader;
05676                 osilreader = NULL;
05677                 if (osolreader != NULL)
05678                         delete osolreader;
05679                 osolreader = NULL;
05680         }
05681 
05682 
05683         // now test p0201.osil
05684         try{
05685                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0033.osil - node limit set" << endl << endl;
05686                 //std::cout << "create a new COIN Cbc for OSiL string solution" << std::endl;
05687                 ok = true;
05688                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
05689                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cbc.osol";
05690                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05691                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05692                 osilreader = new OSiLReader(); 
05693                 osolreader = new OSoLReader(); 
05694                 solver = new CoinSolver();
05695                 solver->sSolverName ="cbc";
05696                 solver->osil = osil;
05697                 solver->osol = osol;  
05698                 solver->osinstance = NULL; 
05699                 solver->osoption   = NULL;
05700                 cout << "call the COIN - Cbc Solver for p0033" << endl;
05701                 solver->buildSolverInstance();
05702                 solver->solve();
05703                 //cout << "Here is the COIN Cbc solver solution for p0033" << endl;
05704                 //cout << solver->osrl << endl;
05705                 if( solver->osrl.find("node limit reached") != std::string::npos)
05706                         ok = true;
05707                 else
05708                         ok = false;
05709                 if (ok == false) throw ErrorClass(" node limit option on p0033.osil not processed properly");
05710                 delete solver;
05711                 solver = NULL;
05712                 delete osilreader;
05713                 osilreader = NULL;
05714                 delete osolreader;
05715                 osolreader = NULL;
05716                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with Cbc node limit" << std::endl;
05717                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05718         }
05719         catch(const ErrorClass& eclass){
05720                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
05721                 if (solver != NULL)
05722                         delete solver;
05723                 solver = NULL;
05724                 if (osilreader != NULL)
05725                         delete osilreader;
05726                 osilreader = NULL;
05727                 if (osolreader != NULL)
05728                         delete osolreader;
05729                 osolreader = NULL;
05730         }
05731 
05732 
05733         try{
05734                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on p0201.osil" << endl << endl;
05735                 ok = true;
05736                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0201.osil";
05737                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0201_cbc.osol";
05738                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05739                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05740                 solver = new CoinSolver();
05741                 solver->sSolverName ="cbc";
05742                 solver->osil = osil;
05743                 osilreader = new OSiLReader(); 
05744                 osolreader = new OSoLReader(); 
05745                 solver->osol = osol;  
05746                 solver->osinstance = NULL; 
05747                 solver->osoption   = NULL;
05748                 cout << "call the COIN - Cbc Solver for p0201" << endl;
05749                 solver->solve();
05750                 cout << "Here is the COIN Cbc solver solution for p0201" << endl;
05751                 std::cout << solver->osrl << std::endl;
05752                 check = 7615;
05753                 // we put a node limit in, so we should not find 7615
05754                 // check that the node limit was found
05755                 string::size_type pos;
05756                 pos = solver->osrl.find( "node limit");
05757                 if(pos == std::string::npos)  throw ErrorClass(" Error with p0201 on Cbc");
05758                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
05759                 //ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05760                 //if(ok == false) throw ErrorClass(" Fail unit test with Cbc on p0201.osil");
05761                 delete solver;
05762                 solver = NULL;
05763                 delete osilreader;
05764                 osilreader = NULL;
05765                 delete osolreader;
05766                 osolreader = NULL;
05767                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0201.osil with Cbc" << std::endl;
05768                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05769         }
05770         catch(const ErrorClass& eclass){
05771                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
05772                 if (solver != NULL)
05773                         delete solver;
05774                 solver = NULL;
05775                 if (osilreader != NULL)
05776                         delete osilreader;
05777                 osilreader = NULL;
05778                 if (osolreader != NULL)
05779                         delete osolreader;
05780                 osolreader = NULL;
05781         }
05782 
05783         try{
05784                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver on parincInteger.osil" << endl << endl;
05785                 ok = true;
05786                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincInteger.osil";
05787                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincInteger_cbc.osol";
05788                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05789                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05790                 osilreader = new OSiLReader(); 
05791                 osolreader = new OSoLReader(); 
05792 
05793                 solver = new CoinSolver();
05794                 solver->sSolverName ="cbc";
05795                 cout << "parse OSiL file" << endl;
05796                 solver->osinstance = osilreader->readOSiL( osil);
05797                 solver->osol = osol; 
05798                 cout << "call the COIN - Cbc Solver for parincInteger" << endl;
05799 //              solver->buildSolverInstance();
05800                 solver->solve();
05801                 check = 7668;
05802                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05803                 if (ok)
05804                 {       
05805 #ifdef DEBUG
05806                         cout << solver->osrl << endl;
05807 #endif
05808                         cout << "COIN cbc solver solution for parincInteger checks." << endl;
05809                 }
05810                 else
05811                 {       cout << "COIN cbc solver solution for parincInteger in error:" << endl;
05812                         cout << solver->osrl << endl;
05813                 }
05814                 if(ok == false) throw ErrorClass(" Fail unit test with Cbc on parincInteger.osil");
05815                 delete osilreader;
05816                 osilreader = NULL;      
05817                 delete osolreader;
05818                 osolreader = NULL;      
05819                 delete solver;
05820                 solver = NULL;
05821                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincInteger.osil with Cbc" << std::endl;
05822                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05823         }
05824         catch(const ErrorClass& eclass){
05825                 unitTestResultFailure << "Sorry Unit Test Failed Testing Cbc Solver:"  + eclass.errormsg<< endl;
05826                 if (solver != NULL)
05827                         delete solver;
05828                 solver = NULL;
05829                 if (osilreader != NULL)
05830                         delete osilreader;
05831                 osilreader = NULL;
05832                 if (osolreader != NULL)
05833                         delete osolreader;
05834                 osolreader = NULL;
05835         }
05836 }       // end of if(THOROUGH)
05837 
05838 #ifdef COIN_HAS_SYMPHONY
05839         try{
05840                 cout << endl << "TEST " << ++nOfTest << ": SYMPHONY solver on p0033.osil" << endl << endl;
05841                 ok = true; 
05842                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
05843                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_sym.osol";
05844                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05845                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05846                 osolreader = new OSoLReader(); 
05847                 solver = new CoinSolver();
05848                 solver->sSolverName = "symphony";
05849                 solver->osil = osil;
05850                 solver->osinstance = NULL; 
05851                 solver->osoption   = osolreader->readOSoL( osol);
05852                 cout << "build the solver instance for COIN - SYMPHONY" << endl;
05853                 solver->buildSolverInstance();
05854 //              cout << "call the COIN - SYMPHONY Solver for p0033" << endl;
05855                 solver->solve();
05856                 check = 3089;
05857                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
05858                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05859                 if (ok)
05860                 {       
05861 #ifdef DEBUG
05862                         cout << solver->osrl << endl;
05863 #endif
05864                         cout << "COIN SYMPHONY solver solution for p0033 checks." << endl;
05865                 }
05866                 else
05867                 {       cout << "COIN SYMPHONY solver solution for p0033 in error:" << endl;
05868                         cout << solver->osrl << endl;
05869                 }
05870                 if(ok == false) throw ErrorClass(" Fail unit test with SYMPHONY on p0033.osil");
05871                 delete solver;
05872                 solver = NULL;
05873                 delete osolreader;
05874                 osolreader = NULL;      
05875                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with SYMPHONY" << std::endl;
05876                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05877         }
05878         catch(const ErrorClass& eclass){
05879                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the SYMPHONY Solver:"  + eclass.errormsg << endl;
05880                 if (solver != NULL)
05881                         delete solver;
05882                 solver = NULL;
05883                 if (osolreader != NULL)
05884                         delete osolreader;
05885                 osolreader = NULL;
05886         }       
05887 #endif
05888         
05889 
05890 
05891 #ifdef COIN_HAS_DYLP
05892         try{
05893                 cout << endl << "TEST " << ++nOfTest << ": DyLP solver on parincLinear.osil" << endl << endl;
05894                 ok = true; 
05895                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
05896                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinear_dylp.osol";
05897                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05898                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05899                 osilreader = new OSiLReader(); 
05900                 solver = new CoinSolver();
05901                 solver->sSolverName = "dylp";
05902                 solver->osol = osol;   
05903                 solver->osinstance = osilreader->readOSiL( osil);
05904                 cout << "call the COIN - DyLP solver for parincLinear" << endl;
05905                 solver->buildSolverInstance();
05906                 solver->solve();
05907                 check = 7668;
05908                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
05909                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05910                 if (ok)
05911                 {       
05912 #ifdef DEBUG
05913                         cout << solver->osrl << endl;
05914 #endif
05915                         cout << "COIN DyLP solver solution for parincLinear checks." << endl;
05916                 }
05917                 else
05918                 {       cout << "COIN DyLP solver solution for parincLinear in error:" << endl;
05919                         cout << solver->osrl << endl;
05920                 }
05921                 if(ok == false) throw ErrorClass(" Fail unit test with DyLP on parincLinear.osil");
05922                 delete solver;
05923                 solver = NULL;
05924                 delete osilreader;
05925                 osilreader = NULL;      
05926                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinear.osil with DyLP" << std::endl;
05927                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05928         }
05929         catch(const ErrorClass& eclass){
05930                 cout << "OSrL =  " <<  solver->osrl <<  endl;
05931                 cout << endl << endl << endl;
05932                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the DyLP Solver:"  + eclass.errormsg << endl;
05933                 if (solver != NULL)
05934                         delete solver;
05935                 solver = NULL;
05936                 if (osilreader != NULL)
05937                         delete osilreader;
05938                 osilreader = NULL;
05939         }       
05940 #endif
05941         
05942 
05943 #ifdef COIN_HAS_VOL
05944         try{
05945                 cout << endl << "TEST " << ++nOfTest << ": Vol solver on volumeTest.osil" << endl << endl;
05946                 ok = true; 
05947                 osilFileName = dataDir  + "osilFiles" + dirsep + "volumeTest.osil";
05948                 osolFileName = dataDir  + "osolFiles" + dirsep + "volumeTest_vol.osol";
05949                 osil = fileUtil->getFileAsString( osilFileName.c_str());
05950                 osol = fileUtil->getFileAsString( osolFileName.c_str());
05951                 osolreader = new OSoLReader(); 
05952                 solver = new CoinSolver();
05953                 solver->sSolverName = "vol";
05954                 solver->osil = osil;
05955                 solver->osinstance = NULL; 
05956                 solver->osoption = osolreader->readOSoL( osol);
05957                 cout << "call the COIN - Vol solver for volumeTest" << endl;
05958                 solver->buildSolverInstance();
05959                 solver->solve();
05960                 check = 7;
05961                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
05962                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
05963                 if (ok)
05964                 {       
05965 #ifdef DEBUG
05966                         cout << solver->osrl << endl;
05967 #endif
05968                         cout << "COIN Vol solver solution for parincLinear checks." << endl;
05969                 }
05970                 else
05971                 {       cout << "COIN Vol solver solution for parincLinear in error:" << endl;
05972                         cout << solver->osrl << endl;
05973                 }
05974                 if(ok == false) throw ErrorClass(" Fail unit test with Vol on volumeTest.osil");
05975                 delete solver;
05976                 solver = NULL;
05977                 delete osolreader;
05978                 osolreader = NULL;      
05979                 unitTestResult << "TEST " << nOfTest << ": Solved problem volumeTest.osil with Vol" << std::endl;
05980                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
05981         }
05982         catch(const ErrorClass& eclass){
05983                 cout << "OSrL =  " <<  solver->osrl <<  endl;
05984                 cout << endl << endl << endl;
05985                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Vol Solver:"  + eclass.errormsg << endl;
05986                 if (solver != NULL)
05987                         delete solver;
05988                 solver = NULL;
05989                 if (osolreader != NULL)
05990                         delete osolreader;
05991                 osolreader = NULL;
05992         }       
05993 #endif
05994         
05995 #ifdef COIN_HAS_GLPK
05996         try{
05997                 cout << endl << "TEST " << ++nOfTest << ": GLPK solver on p0033.osil" << endl << endl;
05998                 ok = true; 
05999                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
06000                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_glpk.osol";
06001                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06002                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06003                 osilreader = new OSiLReader(); 
06004                 osolreader = new OSoLReader(); 
06005                 solver = new CoinSolver();
06006                 solver->sSolverName = "glpk";
06007                 solver->osinstance = osilreader->readOSiL( osil);
06008                 solver->osoption   = osolreader->readOSoL( osol);
06009                 cout << "call the GLPK Solver for p0033" << endl;
06010                 solver->buildSolverInstance();
06011                 solver->solve();
06012                 check = 3089;
06013                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06014                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06015                 if (ok)
06016                 {       
06017 #ifdef DEBUG
06018                         cout << solver->osrl << endl;
06019 #endif
06020                         cout << "GLPK solver solution for p0033 checks." << endl;
06021                 }
06022                 else
06023                 {       cout << "GLPK solver solution for p0033 in error:" << endl;
06024                         cout << solver->osrl << endl;
06025                 }
06026                 if(ok == false) throw ErrorClass(" Fail unit test with GLPK on p0033.osil");
06027                 delete solver;
06028                 solver = NULL;
06029                 delete osilreader;
06030                 osilreader = NULL;      
06031                 delete osolreader;
06032                 osolreader = NULL;      
06033                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with GLPK" << std::endl;
06034                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06035         }
06036         catch(const ErrorClass& eclass){
06037                 cout << "OSrL =  " <<  solver->osrl <<  endl;
06038                 cout << endl << endl << endl;
06039                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Glpk Solver:"  + eclass.errormsg << endl;
06040                 if (solver != NULL)
06041                         delete solver;
06042                 solver = NULL;
06043                 if (osilreader != NULL)
06044                         delete osilreader;
06045                 osilreader = NULL;
06046                 if (osolreader != NULL)
06047                         delete osolreader;
06048                 osolreader = NULL;
06049         }       
06050 #endif
06051         
06052 
06053 
06054 #ifdef COIN_HAS_CPX
06055         try{
06056                 cout << endl << "TEST " << ++nOfTest << ": Cplex solver on p0033.osil" << endl << endl;
06057                 ok = true; 
06058                 osilFileName = dataDir  + "osilFiles" + dirsep + "p0033.osil";
06059                 osolFileName = dataDir  + "osolFiles" + dirsep + "p0033_cpx.osol";
06060                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06061                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06062                 solver = new CoinSolver();
06063                 solver->sSolverName = "cplex";
06064                 solver->osil = osil;
06065                 solver->osol = osol;  
06066                 solver->osinstance = NULL; 
06067                 cout << "call the CPLEX Solver for p0033" << endl;
06068                 solver->buildSolverInstance();
06069                 solver->solve();
06070                 check = 3089;
06071                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06072                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06073                 if (ok)
06074                 {       
06075 #ifdef DEBUG
06076                         cout << solver->osrl << endl;
06077 #endif
06078                         cout << "CPLEX solver solution for p0033 checks." << endl;
06079                 }
06080                 else
06081                 {       cout << "CPLEX solver solution for p0033 in error:" << endl;
06082                         cout << solver->osrl << endl;
06083                 }
06084                 if(ok == false) throw ErrorClass(" Fail unit test with CPLEX on p0033.osil");
06085                 delete solver;
06086                 solver = NULL;
06087                 unitTestResult << "TEST " << nOfTest << ": Solved problem p0033.osil with CPLEX" << std::endl;
06088                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06089         }
06090         catch(const ErrorClass& eclass){
06091                 cout << "OSrL =  " <<  solver->osrl <<  endl;
06092                 cout << endl << endl << endl;
06093                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the Cplex Solver:"  + eclass.errormsg << endl;
06094                 if (solver != NULL)
06095                         delete solver;
06096                 solver = NULL;
06097         }       
06098 #endif
06099         
06100 
06101 
06102 #ifdef COIN_HAS_IPOPT
06103         IpoptSolver *ipoptSolver  =  NULL;      
06104         try{
06105                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver with avion2.osil" << endl << endl;
06106             ipoptSolver  = new IpoptSolver();
06107                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06108                 ok = true;
06109                 // avion does not work with Mumps on AIX xlC compiler
06110 #ifndef XLC_
06111                 osilFileName =  dataDir  + "osilFiles" + dirsep +  "avion2.osil";
06112                 osolFileName = dataDir  + "osolFiles" + dirsep + "avion2_ipopt.osol";
06113                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06114                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06115                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06116                 ipoptSolver->osol = osol;
06117                 osilreader = new OSiLReader(); 
06118                 osolreader = new OSoLReader(); 
06119                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
06120                 ipoptSolver->osol = osol;
06121                 cout << "call the IPOPT Solver" << endl;        
06122                 ipoptSolver->buildSolverInstance();
06123                 ipoptSolver->solve();
06124                 check = 9.46801e+07;
06125                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06126                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06127                 if (ok)
06128                 {       
06129 #ifdef DEBUG
06130                         cout << ipoptSolver->osrl << endl;
06131 #endif
06132                         cout << "IPOPT solver solution for avion2 checks." << endl;
06133                 }
06134                 else
06135                 {       cout << "IPOPT solver solution for avion2 in error:" << endl;
06136                         cout << ipoptSolver->osrl << endl;
06137                 }
06138                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on avion2.osil");
06139                 delete osilreader;
06140                 osilreader = NULL;
06141                 delete osolreader;
06142                 osolreader = NULL;
06143                 delete ipoptSolver;
06144                 ipoptSolver = NULL;
06145                 unitTestResult << "TEST " << nOfTest << ": Solved problem avion2.osil with Ipopt" << std::endl;
06146                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06147 #endif
06148         }
06149         catch(const ErrorClass& eclass){
06150                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06151                 if (osilreader != NULL)
06152                         delete osilreader;
06153                 osilreader = NULL;
06154                 if (osolreader != NULL)
06155                         delete osolreader;
06156                 osolreader = NULL;
06157                 if (ipoptSolver != NULL)
06158                         delete ipoptSolver;
06159                 ipoptSolver = NULL;
06160         }
06161 
06162 if(THOROUGH == true){
06163         // solve another problem
06164         try{
06165                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver with HS071_NLPMod.osil" << endl << endl;
06166                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06167                 ipoptSolver  = new IpoptSolver();
06168                 // a problem with all nonlinear terms no linear terms
06169                 osilFileName = dataDir  + "osilFiles" + dirsep + "HS071_NLPMod.osil";
06170                 osolFileName = dataDir  + "osolFiles" + dirsep + "HS071_NLPMod_ipopt.osol";
06171                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06172                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06173                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06174 //              osol = "<osol></osol>";
06175                 osilreader = new OSiLReader(); 
06176                 osolreader = new OSoLReader(); 
06177                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
06178                 ipoptSolver->osoption   = osolreader->readOSoL( osol);
06179                 ipoptSolver->osol = osol;
06180                 ipoptSolver->buildSolverInstance();
06181                 ipoptSolver->solve();
06182                 cout << "Here is the IPOPT solver solution for HS071_NLP" << endl;
06183                 check = 17.014;
06184                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06185                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06186                 if (ok)
06187                 {       
06188 #ifdef DEBUG
06189                         cout << ipoptSolver->osrl << endl;
06190 #endif
06191                         cout << "IPOPT solver solution for HS071_NLP checks." << endl;
06192                 }
06193                 else
06194                 {       cout << "IPOPT solver solution for HS071_NLP in error:" << endl;
06195                         cout << ipoptSolver->osrl << endl;
06196                 }
06197                 delete osilreader;
06198                 osilreader = NULL;
06199                 delete osolreader;
06200                 osolreader = NULL;
06201                 delete ipoptSolver;
06202                 ipoptSolver = NULL;
06203                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on HS071_NLP.osil");
06204                 unitTestResult << "TEST " << nOfTest << ": Solved problem HS071.osil with Ipopt" << std::endl;
06205                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06206         }
06207         catch(const ErrorClass& eclass){
06208                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06209                 if (osilreader != NULL)
06210                         delete osilreader;
06211                 osilreader = NULL;
06212                 if (osolreader != NULL)
06213                         delete osolreader;
06214                 osolreader = NULL;
06215                 if (ipoptSolver != NULL)
06216                         delete ipoptSolver;
06217                 ipoptSolver = NULL;
06218         }
06219 
06220         try{
06221                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on rosenbrockmod.osil" << endl << endl;
06222                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06223                 ipoptSolver  = new IpoptSolver();
06224                 // solve another problem
06225                 // a problem with both quadratic terms and general nonlinear terms
06226                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
06227                 osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockmod_ipopt.osol";
06228                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06229                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06230                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06231                 osilreader = new OSiLReader(); 
06232                 osolreader = new OSoLReader(); 
06233                 ipoptSolver->osil     = osil;
06234                 ipoptSolver->osoption = osolreader->readOSoL( osol);
06235                 cout << "call the IPOPT Solver" << endl;
06236                 ipoptSolver->buildSolverInstance();
06237                 ipoptSolver->solve();
06238                 check = 6.7279;
06239                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06240                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06241                 if (ok)
06242                 {       
06243 #ifdef DEBUG
06244                         cout << ipoptSolver->osrl << endl;
06245 #endif
06246                         cout << "Ipopt solver solution for rosenbrockmod checks." << endl;
06247                 }
06248                 else
06249                 {       cout << "Ipopt solver solution for rosenbrockmod in error:" << endl;
06250                         cout << ipoptSolver->osrl << endl;
06251                 }
06252                 if(ok == false) 
06253                         throw ErrorClass(" Fail unit test with Ipopt on rosenbrockmod.osil");
06254                 delete osilreader;
06255                 osilreader = NULL;
06256                 delete osolreader;
06257                 osolreader = NULL;
06258                 delete ipoptSolver;
06259                 ipoptSolver = NULL;
06260                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockmod.osil with Ipopt" << std::endl;
06261                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06262                 //return 0;
06263         }
06264         catch(const ErrorClass& eclass){
06265                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06266                 if (osilreader != NULL)
06267                         delete osilreader;
06268                 osilreader = NULL;
06269                 if (osolreader != NULL)
06270                         delete osolreader;
06271                 osolreader = NULL;
06272                 if (ipoptSolver != NULL)
06273                         delete ipoptSolver;
06274                 ipoptSolver = NULL;
06275         }
06276 
06277         try{
06278                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on parincQuadratic.osil" << endl << endl;
06279                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06280                 ipoptSolver  = new IpoptSolver();
06281                 // solve another problem
06282                 // a problem that is a pure quadratic
06283                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincQuadratic.osil";
06284                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincQuadratic_ipopt.osol";
06285                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06286                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06287                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06288                 osilreader = new OSiLReader(); 
06289                 osolreader = new OSoLReader(); 
06290                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
06291                 ipoptSolver->osil = osil;
06292                 ipoptSolver->osol = osol;
06293                 cout << "call the IPOPT Solver" << endl;
06294                 ipoptSolver->buildSolverInstance();
06295                 ipoptSolver->solve();
06296                 check = 49920.5;
06297                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06298                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06299                 if (ok)
06300                 {       
06301 #ifdef DEBUG
06302                         cout << ipoptSolver->osrl << endl;
06303 #endif
06304                         cout << "IPOPT solver solution for parincQuadratic checks." << endl;
06305                 }
06306                 else
06307                 {       cout << "IPOPT solver solution for parincQuadratic in error:" << endl;
06308                         cout << ipoptSolver->osrl << endl;
06309                 }
06310                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on parincQuadradic.osil");
06311                 delete osilreader;
06312                 osilreader = NULL;      
06313                 delete osolreader;
06314                 osolreader = NULL;      
06315                 delete ipoptSolver;
06316                 ipoptSolver = NULL;
06317                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincQuadratic.osil with Ipopt" << std::endl;
06318                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06319         }
06320         catch(const ErrorClass& eclass){
06321                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06322                 if (osilreader != NULL)
06323                         delete osilreader;
06324                 osilreader = NULL;
06325                 if (osolreader != NULL)
06326                         delete osolreader;
06327                 osolreader = NULL;
06328                 if (ipoptSolver != NULL)
06329                         delete ipoptSolver;
06330                 ipoptSolver = NULL;
06331         }
06332 
06333         try{
06334                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on parincLinear.osil" << endl << endl;
06335                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06336                 ipoptSolver  = new IpoptSolver();
06337                 // solve another problem
06338                 // try a pure linear program
06339                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincLinear.osil";
06340                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincLinear_ipopt.osol";
06341                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06342                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06343                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06344                 osilreader = new OSiLReader(); 
06345                 osolreader = new OSoLReader(); 
06346                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
06347                 ipoptSolver->osoption   = NULL;
06348                 ipoptSolver->osol = ""; 
06349                 cout << "call the IPOPT Solver" << endl;
06350                 ipoptSolver->buildSolverInstance();
06351                 ipoptSolver->solve();
06352                 check = 7668;
06353                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-1 , 1e-1);
06354                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06355                 if (ok)
06356                 {       
06357 #ifdef DEBUG
06358                         cout << ipoptSolver->osrl << endl;
06359 #endif
06360                         cout << "IPOPT solver solution for parincLinear checks." << endl;
06361                 }
06362                 else
06363                 {       cout << "IPOPT solver solution for parincLinear in error:" << endl;
06364                         cout << ipoptSolver->osrl << endl;
06365                 }
06366                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on parincLinear.osil");
06367                 delete osilreader;
06368                 osilreader = NULL;      
06369                 delete osolreader;
06370                 osolreader = NULL;      
06371                 delete ipoptSolver;
06372                 ipoptSolver = NULL;
06373                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincLinear.osil with Ipopt" << std::endl;
06374                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06375         }
06376         catch(const ErrorClass& eclass){
06377                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06378                 if (osilreader != NULL)
06379                         delete osilreader;
06380                 osilreader = NULL;
06381                 if (osolreader != NULL)
06382                         delete osolreader;
06383                 osolreader = NULL;
06384                 if (ipoptSolver != NULL)
06385                         delete ipoptSolver;
06386                 ipoptSolver = NULL;
06387         }
06388 
06389         try{
06390                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on callBackTest.osil" << endl << endl;
06391                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06392                 ipoptSolver  = new IpoptSolver();
06393                 // solve another problem
06394                 // callBackTest.osil
06395                 osilFileName = dataDir  + "osilFiles" + dirsep + "callBackTest.osil";
06396                 osolFileName = dataDir  + "osolFiles" + dirsep + "callBackTest_ipopt.osol";
06397                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06398                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06399                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06400                 osilreader = new OSiLReader(); 
06401                 osolreader = new OSoLReader(); 
06402                 ipoptSolver->osinstance = osilreader->readOSiL( osil);
06403                 ipoptSolver->osoption   = osolreader->readOSoL( osol);
06404                 ipoptSolver->osol = osol;
06405                 cout << "call the IPOPT Solver" << endl;
06406                 ipoptSolver->buildSolverInstance();
06407                 ipoptSolver->solve();
06408                 check = 1.00045e+06;
06409                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06410                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06411                 if (ok)
06412                 {       
06413 #ifdef DEBUG
06414                         cout << ipoptSolver->osrl << endl;
06415 #endif
06416                         cout << "IPOPT solver solution for callBackTest checks." << endl;
06417                 }
06418                 else
06419                 {       cout << "IPOPT solver solution for callBackTest in error:" << endl;
06420                         cout << ipoptSolver->osrl << endl;
06421                 }
06422                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on callBackTest.osil");
06423                 delete osilreader;
06424                 osilreader = NULL;      
06425                 delete osolreader;
06426                 osolreader = NULL;      
06427                 delete ipoptSolver;
06428                 ipoptSolver = NULL;
06429                 unitTestResult << "TEST " << nOfTest << ": Solved problem callBackTest.osil with Ipopt" << std::endl;   
06430                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06431         }
06432         catch(const ErrorClass& eclass){
06433                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06434                 if (osilreader != NULL)
06435                         delete osilreader;
06436                 osilreader = NULL;
06437                 if (osolreader != NULL)
06438                         delete osolreader;
06439                 osolreader = NULL;
06440                 if (ipoptSolver != NULL)
06441                         delete ipoptSolver;
06442                 ipoptSolver = NULL;
06443         }
06444 
06445         try{
06446                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on callBackTestRowMajor.osil" << endl << endl;
06447                 cout << "create a new IPOPT Solver for OSiL string solution" << endl;
06448                 ipoptSolver  = new IpoptSolver();
06449                 // solve another problem
06450                 // callBackTest.osil
06451                 osilFileName =  dataDir  + "osilFiles" + dirsep + "callBackTestRowMajor.osil";
06452                 osolFileName = dataDir  + "osolFiles" + dirsep + "callBackTestRowMajor_ipopt.osol";
06453                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06454                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06455                 cout << "IPOPT Solver created for OSiL string solution" << endl;
06456                 osilreader = new OSiLReader(); 
06457                 osolreader = new OSoLReader(); 
06458                 ipoptSolver->osinstance = NULL;
06459                 ipoptSolver->osoption   = NULL;
06460                 ipoptSolver->osil = osil;
06461                 ipoptSolver->osol = osol;
06462                 cout << "call the IPOPT Solver" << endl;
06463 //              ipoptSolver->buildSolverInstance();
06464                 ipoptSolver->solve();
06465                 check = 1.00045e+06;
06466                 //ok &= NearEqual(getObjVal( ipoptSolver->osrl) , check,  1e-10 , 1e-10);
06467                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06468                 if (ok)
06469                 {       
06470 #ifdef DEBUG
06471                         cout << ipoptSolver->osrl << endl;
06472 #endif
06473                         cout << "IPOPT solver solution for callBackTestRowMajor checks." << endl;
06474                 }
06475                 else
06476                 {       cout << "IPOPT solver solution for callBackTestRowMajor in error:" << endl;
06477                         cout << ipoptSolver->osrl << endl;
06478                 }
06479                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on callBackTestRowMajor.osil");
06480                 delete osilreader;
06481                 osilreader = NULL;      
06482                 delete osolreader;
06483                 osolreader = NULL;      
06484                 delete ipoptSolver;
06485                 ipoptSolver = NULL;     
06486                 unitTestResult << "TEST " << nOfTest << ": Solved problem callBackRowMajor.osil with Ipopt" << std::endl;
06487                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06488         }
06489         catch(const ErrorClass& eclass){
06490                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06491                 if (osilreader != NULL)
06492                         delete osilreader;
06493                 osilreader = NULL;
06494                 if (osolreader != NULL)
06495                         delete osolreader;
06496                 osolreader = NULL;
06497                 if (ipoptSolver != NULL)
06498                         delete ipoptSolver;
06499                 ipoptSolver = NULL;
06500         }
06501 
06502         try{
06503                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on rosenbrockorig.osil" << endl << endl;
06504 //              OSiLReader *osilreader = NULL;
06505                 osilreader = new OSiLReader(); 
06506                 osolreader = new OSoLReader(); 
06507                 ok = true; 
06508                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
06509 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockorig_Ipopt.osol";
06510                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06511 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
06512                 osol = "";
06513                 ipoptSolver = new IpoptSolver();
06514                 ipoptSolver->sSolverName = "ipopt";
06515                 ipoptSolver->osil = osil;
06516                 ipoptSolver->osol = osol; 
06517 //              ipoptSolver->osinstance = osilreader->readOSiL( osil);
06518 //              ipoptSolver->osoption   = osolreader->readOSoL( osol);
06519                 cout << "call the COIN - Ipopt Solver for rosenbrockorig" << endl;
06520                 cout << endl << endl << osil << endl << endl;
06521                 ipoptSolver->buildSolverInstance();
06522 
06523                 cout << ipoptSolver->osinstance->printModel() << endl << endl;
06524                 //cout << osilreader->m_osinstance->printModel() << endl << endl;
06525         
06526                 std::cout << " CALL SOLVE " << std::endl;
06527                 ipoptSolver->solve();
06528                 check = 0;
06529                 ok = ( fabs(check - getObjVal( ipoptSolver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06530                 if (ok)
06531                 {       
06532 #ifdef DEBUG
06533                         cout << ipoptSolver->osrl << endl;
06534 #endif
06535                         cout << "Ipopt solver solution for rosenbrockorig checks." << endl;
06536                 }
06537                 else
06538                 {       cout << "Ipopt solver solution for rosenbrockorig in error:" << endl;
06539                         cout << ipoptSolver->osrl << endl;
06540                 }
06541                 if(ok == false) throw ErrorClass(" Fail unit test with Ipopt on rosenbrockorig.osil");
06542 
06543                 delete ipoptSolver;
06544                 ipoptSolver = NULL;
06545                 delete osilreader;
06546                 osilreader = NULL;
06547                 delete osolreader;
06548                 osolreader = NULL;
06549                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Ipopt" << std::endl;
06550                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06551         }
06552         catch(const ErrorClass& eclass){
06553                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06554                 if (osilreader != NULL)
06555                         delete osilreader;
06556                 osilreader = NULL;
06557                 if (osolreader != NULL)
06558                         delete osolreader;
06559                 osolreader = NULL;
06560                 if (ipoptSolver != NULL)
06561                         delete ipoptSolver;
06562                 ipoptSolver = NULL;
06563         }
06564 
06565         try{
06566                 cout << endl << "TEST " << ++nOfTest << ": Ipopt solver on HS071_feas.osil" << endl << endl;
06567                 try {
06568                         //osilreader = new OSiLReader(); 
06569                         //osolreader = new OSoLReader(); 
06570                         ok = true; 
06571                         osilFileName = dataDir  + "osilFiles" + dirsep + "HS071_feas.osil";
06572 //                      osolFileName = dataDir  + "osolFiles" + dirsep + "HS071_feas_Ipopt.osol";
06573                         osil = fileUtil->getFileAsString( osilFileName.c_str());
06574 //                      osol = fileUtil->getFileAsString( osolFileName.c_str());
06575                         osol = "";
06576                         ipoptSolver = new IpoptSolver();
06577                         ipoptSolver->sSolverName = "ipopt";
06578                         ipoptSolver->osil = osil;
06579                         ipoptSolver->osol = osol; 
06580 //                      ipoptSolver->osinstance = osilreader->readOSiL( osil);
06581 //                      ipoptSolver->osoption   = osolreader->readOSoL( osol);
06582                         ipoptSolver->buildSolverInstance();
06583         
06584                         cout << "call the COIN - Ipopt Solver for HS071_feas.osil" << endl;
06585                         ipoptSolver->solve();
06586                 }
06587                 catch(const ErrorClass& eclass)
06588                 {
06589                         ok = (ipoptSolver->osresult->getGeneralMessage() == "Ipopt NEEDS AN OBJECTIVE FUNCTION");
06590                         if(ok == false) 
06591                         {       cout << "Ipopt solver returns:" << endl;
06592                                 cout << ipoptSolver->osrl << endl;
06593                                 throw ErrorClass(" Fail unit test with Ipopt on HS071_feas.osil");
06594                         }
06595                 }
06596         
06597                 cout << "Received error message from Ipopt: \"Ipopt NEEDS AN OBJECTIVE FUNCTION\"" << endl;
06598         
06599                 delete ipoptSolver;
06600                 ipoptSolver = NULL;
06601                 //delete osilreader;
06602                 osilreader = NULL;
06603                 //delete osolreader;
06604                 osolreader = NULL;
06605 
06606                 unitTestResult << "TEST " << nOfTest << ": Correctly diagnosed problem HS071_feas with Ipopt" << std::endl;
06607                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06608         }
06609         catch(const ErrorClass& eclass){
06610                 unitTestResultFailure << "Sorry Unit Test Failed Testing the Ipopt Solver:"  + eclass.errormsg<< endl; 
06611                 if (osilreader != NULL)
06612                         delete osilreader;
06613                 osilreader = NULL;
06614                 if (osolreader != NULL)
06615                         delete osolreader;
06616                 osolreader = NULL;
06617                 if (ipoptSolver != NULL)
06618                         delete ipoptSolver;
06619                 ipoptSolver = NULL;
06620         }
06621 } // end of if( THOROUGH)
06622 #endif // end of #ifdef COIN_HAS_IPOPT
06623 
06624 
06625 #ifdef COIN_HAS_BONMIN
06626         try{
06627                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on bonminEx1.osil" << endl << endl;
06628 //              OSiLReader *osilreader = NULL;
06629                 osilreader = new OSiLReader(); 
06630                 osolreader = new OSoLReader(); 
06631                 ok = true; 
06632                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1.osil";
06633                 osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Bonmin.osol";
06634                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06635                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06636                 solver = new BonminSolver();
06637                 //solver->sSolverName = "bonmin";
06638 //              solver->osinstance = osilreader->readOSiL( osil);
06639                 solver->osil = osil;
06640                 solver->osoption = osolreader->readOSoL( osol);
06641                 cout << "call the COIN - Bonmin Solver for bonminEx1" << endl;
06642 //              solver->buildSolverInstance();
06643                 solver->solve();
06644                 check = -17.07106795327683;
06645                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06646                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06647                 if (ok)
06648                 {       
06649 #ifdef DEBUG
06650                         cout << solver->osrl << endl;
06651 #endif
06652                         cout << "Bonmin solver solution for bonminEx1 checks." << endl;
06653                 }
06654                 else
06655                 {       cout << "Bonmin solver solution for bonminEx1 in error:" << endl;
06656                         cout << solver->osrl << endl;
06657                 }
06658                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on bonminEx1.osil");
06659                 delete solver;
06660                 solver = NULL;
06661                 delete osilreader;
06662                 osilreader = NULL;
06663                 delete osolreader;
06664                 osolreader = NULL;
06665                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1.osil with Bonmin" << std::endl;
06666                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06667         }
06668         catch(const ErrorClass& eclass){
06669                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
06670                 if (solver != NULL)
06671                         delete solver;
06672                 solver = NULL;
06673                 if (osilreader != NULL)
06674                         delete osilreader;
06675                 osilreader = NULL;
06676                 if (osolreader != NULL)
06677                         delete osolreader;
06678                 osolreader = NULL;
06679         }       
06680 
06681 if (THOROUGH == true){
06682         try{
06683                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on wayneQuadratic.osil" << endl << endl;
06684                 ok = true;
06685                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
06686                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin1.osol";
06687                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06688                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06689                 osilreader = new OSiLReader(); 
06690                 solver = new BonminSolver();    
06691                 solver->osol = osol;
06692                 solver->osinstance = osilreader->readOSiL( osil);
06693                 cout << "call the Bonmin Solver for wayneQuadratic" << endl;
06694                 solver->buildSolverInstance();
06695                 // Do this one with two different osol files!!!
06696                 solver->solve();
06697                 check = 2.925;
06698                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06699                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06700                 if (ok)
06701                 {       
06702 #ifdef DEBUG
06703                         cout << solver->osrl << endl;
06704 #endif
06705                         cout << "Bonmin solver solution for wayneQuadratic checks." << endl;
06706                 }
06707                 else
06708                 {       cout << "Bonmin solver solution for wayneQuadratic in error:" << endl;
06709                         cout << solver->osrl << endl;
06710                 }
06711                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on wayneQuadratic.osil");
06712                 delete solver;
06713                 solver = NULL;
06714                 delete osilreader;
06715                 osilreader = NULL;
06716                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Bonmin" << std::endl;
06717                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06718         }
06719         catch(const ErrorClass& eclass){
06720                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
06721                 if (solver != NULL)
06722                         delete solver;
06723                 solver = NULL;
06724                 if (osilreader != NULL)
06725                         delete osilreader;
06726                 osilreader = NULL;
06727         }       
06728 
06729         try{
06730                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on wayneQuadratic.osil" << endl << endl;
06731                 ok = true;
06732                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
06733                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin2.osol";
06734                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06735                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06736                 osilreader = new OSiLReader(); 
06737                 osolreader = new OSoLReader(); 
06738                 solver = new BonminSolver();    
06739                 solver->osol = osol;
06740                 solver->osinstance = osilreader->readOSiL( osil);
06741                 solver->osoption   = osolreader->readOSoL( osol);
06742                 cout << "call the Bonmin Solver for wayneQuadratic" << endl;
06743                 solver->buildSolverInstance();
06744                 // Do this one with two different osol files!!!
06745                 solver->solve();
06746                 check = 2.925;
06747                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06748                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06749                 if (ok)
06750                 {       
06751 #ifdef DEBUG
06752                         cout << solver->osrl << endl;
06753 #endif
06754                         cout << "Bonmin solver solution for wayneQuadratic checks." << endl;
06755                 }
06756                 else
06757                 {       cout << "Bonmin solver solution for wayneQuadratic in error:" << endl;
06758                         cout << solver->osrl << endl;
06759                 }
06760                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on wayneQuadratic.osil");
06761                 delete solver;
06762                 solver = NULL;
06763                 delete osilreader;
06764                 osilreader = NULL;      
06765                 delete osolreader;
06766                 osolreader = NULL;      
06767                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Bonmin" << std::endl;
06768                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06769         }
06770         catch(const ErrorClass& eclass){
06771                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
06772                 if (solver != NULL)
06773                         delete solver;
06774                 solver = NULL;
06775                 if (osilreader != NULL)
06776                         delete osilreader;
06777                 osilreader = NULL;
06778                 if (osolreader != NULL)
06779                         delete osolreader;
06780                 osolreader = NULL;
06781         }       
06782 
06783         try{
06784                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on rosenbrockorig.osil" << endl << endl;
06785                 ok = true;
06786                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
06787                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06788 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
06789                 osilreader = new OSiLReader(); 
06790 //              osolreader = new OSoLReader(); 
06791                 solver = new BonminSolver();    
06792                 solver->osol = "";
06793                 solver->osinstance = osilreader->readOSiL( osil);
06794 //              solver->osoption   = osolreader->readOSoL( osol);
06795                 cout << "build solver instance" << endl;
06796                 solver->buildSolverInstance();
06797                 cout << "call the Bonmin Solver for rosenbrockorig" << endl;
06798                 solver->solve();
06799                 check = 0;
06800                 cout << "Verify solution" <<endl;
06801                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06802                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06803                 if (ok)
06804                 {       
06805 #ifdef DEBUG
06806                         cout << solver->osrl << endl;
06807 #endif
06808                         cout << "Bonmin solver solution for rosenbrockorig checks." << endl;
06809                 }
06810                 else
06811                 {       cout << "Bonmin solver solution for rosenbrockorig in error:" << endl;
06812                         cout << solver->osrl << endl;
06813                 }
06814                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on rosenbrockorig.osil");
06815                 delete solver;
06816                 solver = NULL;
06817                 delete osilreader;
06818                 osilreader = NULL;      
06819                 delete osolreader;
06820                 osolreader = NULL;      
06821                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Bonmin" << std::endl;
06822                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06823         }
06824         catch(const ErrorClass& eclass){
06825                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
06826                 if (solver != NULL)
06827                         delete solver;
06828                 solver = NULL;
06829                 if (osilreader != NULL)
06830                         delete osilreader;
06831                 osilreader = NULL;
06832                 if (osolreader != NULL)
06833                         delete osolreader;
06834                 osolreader = NULL;
06835         }       
06836 
06837         try{
06838                 cout << endl << "TEST " << ++nOfTest << ": Bonmin solver on rosenbrockorigInt.osil" << endl << endl;
06839                 ok = true;
06840                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorigInt.osil";
06841 //              osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Bonmin2.osol";
06842                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06843 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
06844                 osilreader = new OSiLReader(); 
06845 //              osolreader = new OSoLReader(); 
06846                 solver = new BonminSolver();    
06847                 solver->osol = "";
06848                 solver->osinstance = osilreader->readOSiL( osil);
06849 //              solver->osoption   = osolreader->readOSoL( osol);
06850                 cout << "call the Bonmin Solver for rosenbrockinteger" << endl;
06851                 solver->buildSolverInstance();
06852                 solver->solve();
06853                 check = 0;
06854                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06855                 if (ok)
06856                 {       
06857 #ifdef DEBUG
06858                         cout << solver->osrl << endl;
06859 #endif
06860                         cout << "Bonmin solver solution for rosenbrockorigInt checks." << endl;
06861                 }
06862                 else
06863                 {       cout << "Bonmin solver solution for rosenbrockorigInt in error:" << endl;
06864                         cout << solver->osrl << endl;
06865                 }
06866                 if(ok == false) throw ErrorClass(" Fail unit test with Bonmin on rosenbrockorigInt.osil");
06867                 delete solver;
06868                 solver = NULL;
06869                 delete osilreader;
06870                 osilreader = NULL;      
06871                 delete osolreader;
06872                 osolreader = NULL;      
06873                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorigInt.osil with Bonmin" << std::endl;
06874                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06875         }
06876         catch(const ErrorClass& eclass){
06877                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Bonmin Solver:"  + eclass.errormsg << endl;
06878                 if (solver != NULL)
06879                         delete solver;
06880                 solver = NULL;
06881                 if (osilreader != NULL)
06882                         delete osilreader;
06883                 osilreader = NULL;
06884                 if (osolreader != NULL)
06885                         delete osolreader;
06886                 osolreader = NULL;
06887         }
06888 }   // end of if( THOROUGH )
06889 #endif   // end of #ifdef COIN_HAS_BONMIN
06890 
06891 
06892 
06893 #ifdef COIN_HAS_COUENNE
06894         try{
06895                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on bonminEx1.osil" << endl << endl;
06896                 CouenneSolver *solver = NULL;
06897 
06898 //              OSiLReader *osilreader = NULL;
06899                 osilreader = new OSiLReader(); 
06900                 osolreader = new OSoLReader(); 
06901                 ok = true; 
06902                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1.osil";
06903                 osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
06904                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06905                 osol = fileUtil->getFileAsString( osolFileName.c_str());
06906                 solver = new CouenneSolver();
06907                 solver->sSolverName = "bonmin";
06908                 solver->osil = osil;
06909                 solver->osol = osol; 
06910 //              solver->osinstance = osilreader->readOSiL( osil);
06911 //              solver->osoption   = osolreader->readOSoL( osol);
06912                 cout << "call the COIN - Couenne Solver for bonminEx1" << endl;
06913                 solver->buildSolverInstance();
06914         
06915                 std::cout << " CALL SOLVE " << std::endl;
06916                 solver->solve();
06917         
06918                 check = -17.07106795327683;
06919                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06920                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06921                 if (ok)
06922                 {       
06923 #ifdef DEBUG
06924                         cout << solver->osrl << endl;
06925 #endif
06926                         cout << "Couenne solver solution for bonminEx1 checks." << endl;
06927                 }
06928                 else
06929                 {       cout << "Couenne solver solution for bonminEx1 in error:" << endl;
06930                         cout << solver->osrl << endl;
06931                 }
06932                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on bonminEx1.osil");
06933 
06934                 delete solver;
06935                 solver = NULL;
06936                 delete osilreader;
06937                 osilreader = NULL;
06938                 delete osolreader;
06939                 osolreader = NULL;
06940                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1.osil with Couenne" << std::endl;
06941                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
06942         }
06943         catch(const ErrorClass& eclass){
06944                 cout << "OSrL =  " <<  solver->osrl <<  endl;
06945                 cout << endl << endl << endl;
06946                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
06947                 if (solver != NULL)
06948                         delete solver;
06949 
06950                 solver = NULL;
06951                 if (osilreader != NULL)
06952                         delete osilreader;
06953                 osilreader = NULL;
06954                 if (osolreader != NULL)
06955                         delete osolreader;
06956                 osolreader = NULL;
06957         }       
06958         
06959 if( THOROUGH == true){
06960         try{
06961                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on bonminEx1_Nonlinear.osil" << endl << endl;
06962 //              OSiLReader *osilreader = NULL;
06963                 osilreader = new OSiLReader(); 
06964                 osolreader = new OSoLReader(); 
06965                 ok = true; 
06966                 osilFileName = dataDir  + "osilFiles" + dirsep + "bonminEx1_Nonlinear.osil";
06967 //              osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
06968                 osil = fileUtil->getFileAsString( osilFileName.c_str());
06969 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
06970                 osol = "";
06971                 solver = new CouenneSolver();
06972                 solver->osil = osil;
06973                 solver->osol = osol; 
06974 //              solver->osinstance = osilreader->readOSiL( osil);
06975 //              solver->osoption   = osolreader->readOSoL( osol);
06976                 cout << "call the COIN - Couenne Solver for bonminEx1_Nonlinear" << endl;
06977                 solver->buildSolverInstance();
06978         
06979                 std::cout << " CALL SOLVE " << std::endl;
06980                 solver->solve();
06981         
06982                 check = -1.707107;
06983                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
06984                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
06985                 if (ok)
06986                 {       
06987 #ifdef DEBUG
06988                         cout << solver->osrl << endl;
06989 #endif
06990                         cout << "Couenne solver solution for bonminEx1_Nonlinear checks." << endl;
06991                 }
06992                 else
06993                 {       cout << "Couenne solver solution for bonminEx1_Nonlinear in error:" << endl;
06994                         cout << solver->osrl << endl;
06995                 }
06996                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on bonminEx1_Nonlinear.osil");
06997 
06998                 delete solver;
06999                 solver = NULL;
07000                 delete osilreader;
07001                 osilreader = NULL;
07002                 delete osolreader;
07003                 osolreader = NULL;
07004                 unitTestResult << "TEST " << nOfTest << ": Solved problem bonminEx1_Nonlinear with Couenne" << std::endl;
07005                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07006         }
07007         catch(const ErrorClass& eclass){
07008                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
07009                 if (solver != NULL)
07010                         delete solver;
07011                 solver = NULL;
07012                 if (osilreader != NULL)
07013                         delete osilreader;
07014                 osilreader = NULL;
07015                 if (osolreader != NULL)
07016                         delete osolreader;
07017                 osolreader = NULL;
07018         }       
07019 
07020         try{
07021                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on nonconvex.osil" << endl << endl;
07022 //              OSiLReader *osilreader = NULL;
07023                 osilreader = new OSiLReader(); 
07024                 osolreader = new OSoLReader(); 
07025                 ok = true; 
07026                 osilFileName = dataDir  + "osilFiles" + dirsep + "nonconvex.osil";
07027 //              osolFileName = dataDir  + "osolFiles" + dirsep + "bonminEx1_Couenne.osol";
07028                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07029 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
07030                 osol = "";
07031                 solver = new CouenneSolver();
07032                 solver->osil = osil;
07033                 solver->osol = osol; 
07034 //              solver->osinstance = osilreader->readOSiL( osil);
07035 //              solver->osoption   = osolreader->readOSoL( osol);
07036                 cout << "call the COIN - Couenne Solver for nonconvex.osil" << endl;
07037                 solver->buildSolverInstance();
07038         
07039                 std::cout << " CALL SOLVE " << std::endl;
07040                 solver->solve();
07041         
07042                 check = -6.551133;
07043                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07044                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07045                 if (ok)
07046                 {       
07047 #ifdef DEBUG
07048                         cout << solver->osrl << endl;
07049 #endif
07050                         cout << "Couenne solver solution for nonconvex.osil checks." << endl;
07051                 }
07052                 else
07053                 {       cout << "Couenne solver solution for nonconvex.osil in error:" << endl;
07054                         cout << solver->osrl << endl;
07055                 }
07056                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on nonconvex.osil");
07057 
07058                 delete solver;
07059                 solver = NULL;
07060                 delete osilreader;
07061                 osilreader = NULL;
07062                 delete osolreader;
07063                 osolreader = NULL;
07064                 unitTestResult << "TEST " << nOfTest << ": Solved problem nonconvex.osil with Couenne" << std::endl;
07065                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07066         }
07067         catch(const ErrorClass& eclass){
07068                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
07069                 if (solver != NULL)
07070                         delete solver;
07071                 solver = NULL;
07072                 if (osilreader != NULL)
07073                         delete osilreader;
07074                 osilreader = NULL;
07075                 if (osolreader != NULL)
07076                         delete osolreader;
07077                 osolreader = NULL;
07078         }       
07079 
07080         try{
07081                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on rosenbrockorig.osil" << endl << endl;
07082 //              OSiLReader *osilreader = NULL;
07083                 osilreader = new OSiLReader(); 
07084                 osolreader = new OSoLReader(); 
07085                 ok = true; 
07086                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockorig.osil";
07087 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockorig_Couenne.osol";
07088                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07089 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
07090                 osol = "";
07091                 solver = new CouenneSolver();
07092                 solver->osil = osil;
07093                 solver->osol = osol; 
07094 //              solver->osinstance = osilreader->readOSiL( osil);
07095 //              solver->osoption   = osolreader->readOSoL( osol);
07096                 cout << "call the COIN - Couenne Solver for rosenbrockorig" << endl;
07097                 solver->buildSolverInstance();
07098         
07099                 std::cout << " CALL SOLVE " << std::endl;
07100                 solver->solve();
07101         
07102                 check = 0;
07103                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07104                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07105                 if (ok)
07106                 {       
07107 #ifdef DEBUG
07108                         cout << solver->osrl << endl;
07109 #endif
07110                         cout << "Couenne solver solution for rosenbrockorig checks." << endl;
07111                 }
07112                 else
07113                 {       cout << "Couenne solver solution for rosenbrockorig in error:" << endl;
07114                         cout << solver->osrl << endl;
07115                 }
07116                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on rosenbrockorig.osil");
07117 
07118                 delete solver;
07119                 solver = NULL;
07120                 delete osilreader;
07121                 osilreader = NULL;
07122                 delete osolreader;
07123                 osolreader = NULL;
07124                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockorig.osil with Couenne" << std::endl;
07125                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07126         }
07127         catch(const ErrorClass& eclass){
07128                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
07129                 if (solver != NULL)
07130                         delete solver;
07131                 solver = NULL;
07132                 if (osilreader != NULL)
07133                         delete osilreader;
07134                 osilreader = NULL;
07135                 if (osolreader != NULL)
07136                         delete osolreader;
07137                 osolreader = NULL;
07138         }       
07139 
07140         try{
07141                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on wayneQuadratic.osil" << endl << endl;
07142 //              OSiLReader *osilreader = NULL;
07143                 osilreader = new OSiLReader(); 
07144                 osolreader = new OSoLReader(); 
07145                 ok = true; 
07146                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
07147                 
07148 //              osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockinteger_Couenne.osol";
07149                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07150 //              osol = fileUtil->getFileAsString( osolFileName.c_str());
07151                 osol = "";
07152                 solver = new CouenneSolver();
07153                 solver->osinstance = NULL;
07154                 solver->osil = osil;
07155                 solver->osol = osol; 
07156 //              solver->osinstance = osilreader->readOSiL( osil);
07157 //              solver->osoption   = osolreader->readOSoL( osol);
07158                 cout << "call the COIN - Couenne Solver for wayneQuadraticr" << endl;
07159                 //solver->buildSolverInstance();
07160                 std::cout << " CALL SOLVE " << std::endl;
07161                 solver->buildSolverInstance();
07162                 solver->setSolverOptions();
07163                 solver->solve();
07164                 check = 2.925;
07165                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07166                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07167                 if (ok)
07168                 {       
07169 #ifdef DEBUG
07170                         cout << solver->osrl << endl;
07171 #endif
07172                         cout << "Couenne solver solution for wayneQuadratic checks." << endl;
07173                 }
07174                 else
07175                 {       cout << "Couenne solver solution for wayneQuadratic in error:" << endl;
07176                         cout << solver->osrl << endl;
07177                 }
07178                 if(ok == false) throw ErrorClass(" Fail unit test with Couenne on rosenbrockinteger.osil");
07179 
07180                 delete solver;
07181                 solver = NULL;
07182                 delete osilreader;
07183                 osilreader = NULL;
07184                 delete osolreader;
07185                 osolreader = NULL;
07186                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Couenne" << std::endl;
07187                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07188         }
07189         catch(const ErrorClass& eclass){
07190                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
07191                 if (solver != NULL)
07192                         delete solver;
07193                 solver = NULL;
07194                 if (osilreader != NULL)
07195                         delete osilreader;
07196                 osilreader = NULL;
07197                 if (osolreader != NULL)
07198                         delete osolreader;
07199                 osolreader = NULL;
07200         }       
07201 
07202         OSrLWriter *tmp_writer = NULL;
07203         try{
07204                 cout << endl << "TEST " << ++nOfTest << ": Couenne solver on wayneQuadratic.osil" << endl << endl;
07205 //              OSiLReader *osilreader = NULL;
07206                 osilreader = new OSiLReader(); 
07207                 osolreader = new OSoLReader(); 
07208                 ok = true; 
07209                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
07210                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_Couenne.osol";
07211                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07212                 osol = fileUtil->getFileAsString( osolFileName.c_str());
07213                 solver = new CouenneSolver();
07214                 solver->osil = osil;
07215                 solver->osol = osol; 
07216                 cout << "call the COIN - Couenne Solver for wayneQuadratic.osil" << endl;
07217                 solver->buildSolverInstance();
07218         
07219                 std::cout << " CALL SOLVE " << std::endl;
07220                 solver->solve();
07221         
07222                 cout << "Here is the Couenne solver solution for wayneQuadratic" << endl;
07223 
07224 //              OSrLWriter *tmp_writer;
07225                 tmp_writer = new OSrLWriter();
07226                 solver->osrl = tmp_writer->writeOSrL(solver->osresult);
07227                 delete tmp_writer;
07228                 tmp_writer = NULL;
07229                 
07230                 string::size_type pos;
07231                 pos = solver->osrl.find( "LIMIT_EXCEEDED[COUENNE]");
07232                 if(pos == std::string::npos)  
07233                 {
07234                         cout << solver->osrl << endl << endl;
07235                         throw ErrorClass(" Error with wayneQuadratic running on Couenne");
07236                 }
07237 #ifdef DEBUG
07238                 else
07239                 {
07240                         cout << solver->osrl << endl << endl;
07241                 }
07242 #endif
07243                 delete solver;
07244                 solver = NULL;
07245                 delete osilreader;
07246                 osilreader = NULL;
07247                 delete osolreader;
07248                 osolreader = NULL;
07249                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic with Couenne" << std::endl;
07250                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07251         }
07252         catch(const ErrorClass& eclass){
07253                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Couenne Solver:"  + eclass.errormsg << endl;
07254                 if (solver != NULL)
07255                         delete solver;
07256                 solver = NULL;
07257                 if (osilreader != NULL)
07258                         delete osilreader;
07259                 osilreader = NULL;
07260                 if (osolreader != NULL)
07261                         delete osolreader;
07262                 osolreader = NULL;
07263         }       
07264 } //end of if (THOROUGH)
07265 #endif // end of #ifdef COIN_HAS_COUENNE
07266 
07267 
07268         
07269 #ifdef COIN_HAS_LINDO
07270         try{
07271                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on lindoapiaddins.osil" << endl << endl;
07272                 ok = true;
07273                 osilFileName = dataDir  + "osilFiles" + dirsep + "lindoapiaddins.osil";
07274                 osolFileName = dataDir  + "osolFiles" + dirsep + "lindoapiaddins_lindo.osol";
07275                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07276                 osol = fileUtil->getFileAsString( osolFileName.c_str());
07277                 osilreader = new OSiLReader(); 
07278                 cout << "create a new LINDO Solver for OSiL string solution" << endl;
07279                 solver = new LindoSolver();     
07280                 solver->osinstance = osilreader->readOSiL( osil);
07281                 solver->osol = osol;
07282                 cout << "call the LINDO Solver" << endl;
07283                 solver->buildSolverInstance();
07284                 solver->solve();
07285                 check = 99;
07286                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07287                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07288                 if (ok)
07289                 {       
07290 #ifdef DEBUG
07291                         cout << solver->osrl << endl;
07292 #endif
07293                         cout << "LINDO solver solution for lindoapiaddins checks." << endl;
07294                 }
07295                 else
07296                 {       cout << "LINDO solver solution for lindoapiaddins in error:" << endl;
07297                         cout << solver->osrl << endl;
07298                 }
07299                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on lindoapiaddins.osil");
07300                 solver->osinstance = NULL;
07301                 delete solver;
07302                 solver = NULL;
07303                 delete osilreader;
07304                 osilreader = NULL;      
07305                 unitTestResult << "TEST " << nOfTest << ": Solved problem lindoapiaddins.osil with Lindo" << std::endl;
07306                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07307         }
07308         catch(const ErrorClass& eclass){
07309                 //cout << "OSrL =  " <<  solver->osrl <<  endl;
07310                 cout << endl << endl << endl;
07311                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the LINDO Solver:"  + eclass.errormsg << endl << endl;
07312                 if (solver != NULL)
07313                         delete solver;
07314                 solver = NULL;
07315                 if (osilreader != NULL)
07316                         delete osilreader;
07317                 osilreader = NULL;
07318         }
07319 
07320 if (THOROUGH == true){
07321         try{
07322                 // now solve the rosenbrock problem from the OSiL paper
07323                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on rosenbrockmod.osil" << endl << endl;
07324                 osilFileName = dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
07325                 osolFileName = dataDir  + "osolFiles" + dirsep + "rosenbrockmod_lindo.osol";
07326                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07327                 osol = fileUtil->getFileAsString( osolFileName.c_str());
07328                 solver = new LindoSolver();     
07329                 solver->osil = osil;
07330                 solver->osol = osol;
07331                 solver->osinstance = NULL;
07332                 cout << "call the LINDO Solver" << endl;
07333                 solver->buildSolverInstance();
07334                 solver->solve();
07335                 check = 6.7279;
07336                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07337                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07338                 if (ok)
07339                 {       
07340 #ifdef DEBUG
07341                         cout << solver->osrl << endl;
07342 #endif
07343                         cout << "LINDO solver solution for rosenbrockmod checks." << endl;
07344                 }
07345                 else
07346                 {       cout << "LINDO solver solution for rosenbrockmod in error:" << endl;
07347                         cout << solver->osrl << endl;
07348                 }
07349                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on rosenbrockmod.osil");
07350                 solver->osinstance = NULL;
07351                 delete solver;
07352                 solver = NULL;
07353                 unitTestResult << "TEST " << nOfTest << ": Solved problem rosenbrockmod.osil with Lindo" << std::endl;
07354                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07355         }
07356         catch(const ErrorClass& eclass){
07357                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the Lindo Solver:"  + eclass.errormsg << endl;
07358                 if (solver != NULL)
07359                         delete solver;
07360                 solver = NULL;
07361         }       
07362 
07363         try{
07364                 // now solve a pure quadratic
07365                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on parincQuadratic.osil" << endl << endl;
07366                 osilFileName = dataDir  + "osilFiles" + dirsep + "parincQuadratic.osil";
07367                 osolFileName = dataDir  + "osolFiles" + dirsep + "parincQuadratic_lindo.osol";
07368                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07369                 osol = fileUtil->getFileAsString( osolFileName.c_str());
07370                 osolreader = new OSoLReader(); 
07371                 solver = new LindoSolver();     
07372                 solver->osil = osil;
07373                 solver->osol = osol;
07374                 solver->osinstance = NULL;
07375                 solver->osoption   = osolreader->readOSoL( osol);
07376                 cout << "call the LINDO Solver" << endl;
07377                 solver->buildSolverInstance();
07378                 solver->solve();
07379                 check = 49920.5;
07380                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07381                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07382                 if (ok)
07383                 {       
07384 #ifdef DEBUG
07385                         cout << solver->osrl << endl;
07386 #endif
07387                         cout << "LINDO solver solution for parincQuadratic checks." << endl;
07388                 }
07389                 else
07390                 {       cout << "LINDO solver solution for parincQuadratic in error:" << endl;
07391                         cout << solver->osrl << endl;
07392                 }
07393                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on parincQuadratic.osil");
07394                 delete solver;
07395                 solver = NULL;
07396                 delete osolreader;
07397                 osolreader = NULL;      
07398                 unitTestResult << "TEST " << nOfTest << ": Solved problem parincQuadratic.osil with Lindo" << std::endl;
07399                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07400         }
07401         catch(const ErrorClass& eclass){
07402                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the LINDO Solver:"  + eclass.errormsg << endl;
07403                 if (solver != NULL)
07404                         delete solver;
07405                 solver = NULL;
07406                 if (osolreader != NULL)
07407                         delete osolreader;
07408                 osolreader = NULL;
07409         }       
07410 
07411         try{
07412                 // now solve a quadratic binary problem
07413                 // wayneQuadratic.osil
07414                 /*
07415                 cout << endl << "TEST " << ++nOfTest << ": Lindo solver on wayneQuadratic.osil" << endl << endl;
07416                 osilFileName = dataDir  + "osilFiles" + dirsep + "wayneQuadratic.osil";
07417                 osolFileName = dataDir  + "osolFiles" + dirsep + "wayneQuadratic_lindo.osol";
07418                 osil = fileUtil->getFileAsString( osilFileName.c_str());
07419                 osol = fileUtil->getFileAsString( osolFileName.c_str());
07420                 osilreader = new OSiLReader(); 
07421                 solver = new LindoSolver();     
07422                 solver->osil = osil;
07423                 solver->osol = osol;
07424                 solver->osinstance = osilreader->readOSiL( osil);
07425                 cout << "call the LINDO Solver" << endl;
07426                 solver->buildSolverInstance();
07427                 solver->solve();
07428                 check = 2.925;
07429                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-10 , 1e-10);
07430                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07431                 if (ok)
07432                 {       
07433 #ifdef DEBUG
07434                         cout << solver->osrl << endl;
07435 #endif
07436                         cout << "LINDO solver solution for wayneQuadratic checks." << endl;
07437                 }
07438                 else
07439                 {       cout << "LINDO solver solution for wayneQuadratic in error:" << endl;
07440                         cout << solver->osrl << endl;
07441                 }
07442                 if(ok == false) throw ErrorClass(" Fail unit test with LINDO on wayneQuadratic.osil");
07443                 delete solver;
07444                 solver = NULL;
07445                 delete osolreader;
07446                 osolreader = NULL;      
07447                 unitTestResult << "TEST " << nOfTest << ": Solved problem wayneQuadratic.osil with Lindo" << std::endl;
07448                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07449         }
07450         catch(const ErrorClass& eclass){
07451                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the LINDO Solver:"  + eclass.errormsg << endl;
07452                 if (solver != NULL)
07453                         delete solver;
07454                 solver = NULL;
07455                 if (osilreader != NULL)
07456                         delete osilreader;
07457                 osilreader = NULL;
07458                 if (osolreader != NULL)
07459                         delete osolreader;
07460                 osolreader = NULL;
07461         }       
07462                 */
07463 } // end of if( THOROUGH)
07464 #endif // end of #ifdef COIN_HAS_LINDO
07465 } // end of if(SOLVER_TESTS)
07466 
07467 
07468 
07469 // now solve with an OSInstance created from an MPS file
07470 if (OTHER_TESTS){
07471         try{
07472                 cout << endl << "TEST " << ++nOfTest << ": Cbc solver using MPS file" << endl << endl;
07473                 ok = true;
07474 //              cout << endl;
07475 //              cout << "Start testing MPS file conversion" << endl << endl;
07476                 cout << "create a COIN Solver for MPS - OSInstance solution" << endl;
07477                 solver = new CoinSolver();
07478                 solver->sSolverName = "cbc";
07479                 mpsFileName = dataDir +  "mpsFiles" + dirsep + "parinc.mps";
07480                 mps2osil = new OSmps2osil( mpsFileName);
07481                 mps2osil->createOSInstance() ;
07482                 solver->osinstance = mps2osil->osinstance;
07483                 osol = "<osol></osol>";
07484                 solver->osol = osol;
07485                 cout << "call COIN Solve" << endl;
07486                 solver->buildSolverInstance();
07487                 solver->solve();
07488                 check = -7668;
07489                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
07490                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07491                 if (ok)
07492                 {       
07493 #ifdef DEBUG
07494                         cout << solver->osrl << endl;
07495 #endif
07496                         cout << "COIN solver solution for parinc.mps checks." << endl;
07497                 }
07498                 else
07499                 {       cout << "COIN solver solution for parinc.mps in error:" << endl;
07500                         cout << solver->osrl << endl;
07501                 }
07502                 if(ok == false) throw ErrorClass(" Fail unit test with COIN Solver on MPS test problem parincLinear.mps");
07503                 delete solver;
07504                 solver = NULL;
07505                 delete mps2osil; 
07506                 mps2osil = NULL;
07507 //              cout << endl;
07508 //              cout << "Done with MPS testing" << endl;
07509                 unitTestResult << "TEST " << nOfTest << ": Test the MPS -> OSiL converter on parinc.mps using Cbc" << std::endl;
07510                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07511         }
07512         catch(const ErrorClass& eclass){
07513                 cout << "OSrL =  " <<  solver->osrl <<  endl;
07514                 cout << endl << endl << endl;
07515                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing the MPS converter:"  + eclass.errormsg << endl;
07516 
07517                 if (solver != NULL)
07518                         delete solver;
07519                 solver = NULL;
07520                 if (mps2osil != NULL)
07521                         delete mps2osil; 
07522                 mps2osil = NULL;
07523         }
07524         
07525         
07526 // test reading a GAMS file
07527 
07528 #if  0
07529 #ifdef COIN_HAS_GAMSUTILS
07530         try{
07531                 std::cout  << "Working with GAMSIO " << std::endl;
07532 
07533                 std::string gmsControlFile = "/home/kmartin/bin/gams/23.2/225a/gamscntr.dat";
07534 
07535         
07536                 OSgams2osil *gams2osil;
07537                 gams2osil = new OSgams2osil( gmsControlFile);
07538                 gams2osil->createOSInstance();
07539                 std::cout << gams2osil->osinstance->printModel() << std::endl;
07540                 std::cout  << "Done Working with GAMSIO " << std::endl;
07541                 delete gams2osil;
07542                 gams2osil = NULL;
07543         }
07544         catch(const ErrorClass& eclass){
07545                 unitTestResultFailure  << "Sorry Unit Test Failed Testing the GAMS interface:"  + eclass.errormsg << endl;
07546                 if (gams2osil != NULL)
07547                         delete gams2osil;
07548                 gams2osil = NULL;
07549         }       
07550 #endif
07551 #endif
07552 
07553 // now solve with an OSInstance created from an AMPL nl file
07554 #ifdef COIN_HAS_ASL
07555         try{
07556                 cout << endl << "TEST " << ++nOfTest << ": AMPL solver interface" << endl << endl;
07557                 ok = true;
07558                 cout << "create a cbc Solver for AMPL nl - OSInstance solution" << endl;
07559                 solver = new CoinSolver();
07560                 solver->sSolverName = "cbc";
07561                 nlFileName  = dataDir + "amplFiles" + dirsep + "parinc.nl";
07562                 nl2osil = new OSnl2osil( nlFileName); 
07563                 nl2osil->createOSInstance() ;
07564                 solver->osinstance = nl2osil->osinstance;       
07565 
07566                 OSiLWriter tmp_osil_writer;
07567                 tmp_osil_writer.m_bWhiteSpace = true;
07568                 //std::cout << tmp_osil_writer.writeOSiL( solver->osinstance) << std::endl;
07569 
07570                 osol = "";  //<osol></osol>";
07571                 solver->osol = osol;
07572                 cout << "call Cbc Solve" << endl;
07573                 solver->buildSolverInstance();
07574                 solver->solve();
07575                 check = 7668;
07576                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
07577                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07578                 if (ok)
07579                 {       
07580 #ifdef DEBUG
07581                         cout << solver->osrl << endl;
07582 #endif
07583                         cout << "COIN cbc solver solution for parinc.nl checks." << endl;
07584                 }
07585                 else
07586                 {       cout << "COIN cbc solver solution for parinc.nl in error:" << endl;
07587                         cout << solver->osrl << endl;
07588                 }
07589                 if(ok == false) throw ErrorClass(" Fail unit test with OSnl2osil on problem parinc.nl");
07590                 solver->osinstance = NULL;
07591                 delete solver;
07592                 solver = NULL;
07593                 //cout << "call delete nl2osil" << endl;
07594                 delete nl2osil;
07595                 nl2osil = NULL; 
07596                 unitTestResult << "TEST " << nOfTest << ": Test the AMPL nl -> OSiL converter on parinc.nl using Cbc" << std::endl; 
07597                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07598         }       
07599         catch(const ErrorClass& eclass){
07600                 cout << "OSrL =  " <<  solver->osrl <<  endl;
07601                 cout << endl << endl << endl;
07602                 unitTestResultFailure  <<"Sorry Unit Test Failed Testing AMPL:"  + eclass.errormsg << endl;
07603 
07604                 if (solver != NULL)
07605                         delete solver;
07606                 solver = NULL;
07607                 if (nl2osil != NULL)
07608                         delete nl2osil; 
07609                 nl2osil = NULL;
07610         }
07611 #endif
07612 
07613         //
07614         // Now read an mps file and write in b64 format to test the b64 feature 
07615         //
07616         try{
07617                 cout << endl << "TEST " << ++nOfTest << ": b64 operations" << endl << endl;
07618                 ok = true;
07619                 OSiLWriter osilwriter;
07620                 osilwriter.m_bWriteBase64 = true;
07621                 solver = new CoinSolver();
07622                 solver->sSolverName = "cbc";
07623                 mpsFileName = dataDir +  "mpsFiles" + dirsep + "parinc.mps";
07624                 mps2osil = new OSmps2osil( mpsFileName);
07625                 solver->osinstance = NULL;
07626                 osol = "<osol></osol>";
07627                 solver->osol = osol;
07628                 mps2osil->createOSInstance() ;
07629                 solver->osil = osilwriter.writeOSiL( mps2osil->osinstance) ;
07630                 //std::cout << solver->osil << std::endl;
07631                 solver->buildSolverInstance();
07632                 solver->solve();
07633                 cout << endl << endl;
07634                 check = -7668;
07635                 //ok &= NearEqual(getObjVal( solver->osrl) , check,  1e-1 , 1e-1);
07636                 ok = ( fabs(check - getObjVal( solver->osrl) )/(fabs( check) + OS_NEAR_EQUAL) <= OS_NEAR_EQUAL) ? true : false;
07637                 if (ok)
07638                 {       cout << "COIN solution of an OSiL string in b64 format." << endl;
07639 #ifdef DEBUG
07640                         cout << solver->osrl << endl;
07641 #endif                  
07642                 }
07643                 else
07644                 {       cout << "COIN solution of a OSiL string in b64 format:" << endl;
07645                         cout << solver->osrl << endl;
07646                 }
07647                 if(ok == false) throw ErrorClass(" Fail unit test with COIN Cbc Solver on b64 test problem parincLinear.mps");
07648                 solver->osinstance = NULL;
07649                 delete solver;
07650                 solver = NULL;
07651                 delete mps2osil;
07652                 mps2osil = NULL;
07653                 unitTestResult << "TEST " << nOfTest << ": Test a problem written in b64 and then converted to OSInstance" << std::endl;
07654                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07655         }       
07656         catch(const ErrorClass& eclass){
07657                 cout << endl << endl;
07658                 cout << eclass.errormsg <<  endl << endl;
07659                 cout << "OSrL =  " <<  solver->osrl <<  endl;
07660                 cout << endl << endl << endl;
07661                 unitTestResultFailure   << "Sorry Unit Test Failed Testing Use of Base 64" << endl;
07662 
07663                 if (solver != NULL)
07664                         delete solver;
07665                 solver = NULL;
07666                 if (mps2osil != NULL)
07667                         delete mps2osil; 
07668                 mps2osil = NULL;
07669         }  
07670 
07671 
07672         // now test postfix and prefix routines
07673         try{
07674                 cout << endl << "TEST " << ++nOfTest << ": postfix and prefix routines" << endl << endl;
07675                 std::string expTreeTest =  dataDir  + "osilFiles" + dirsep + "rosenbrockmod.osil";
07676                 osil = fileUtil->getFileAsString( expTreeTest.c_str() ) ;
07677                 OSInstance *osinstance = NULL;
07678                 //osinstance = new OSInstance();
07679                 OSiLReader *osilreader = NULL;
07680                 osilreader = new OSiLReader();
07681                 //create an osinstance
07682                 osinstance = osilreader->readOSiL( osil);
07683                 OSExpressionTree* expTree = osinstance->getNonlinearExpressionTree( -1);
07684                 if(expTree == NULL) throw ErrorClass(" Null expression tree when testing prefix and postfix routines");
07685                 std::vector<OSnLNode*> postfixVec;
07686                 //postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
07687                 postfixVec = osinstance->getNonlinearExpressionTreeInPostfix( -1);
07688         
07689                 unsigned int n = postfixVec.size();
07690                 unsigned int i;
07691                 nodeNames1 = new std::string[ n];
07692                 nodeNames2 = new std::string[ n];
07693                 for (i = 0 ; i < n; i++){
07694                         //std::cout << postfixVec[i]->getTokenName() << std::endl;
07695                         nodeNames1[i] = postfixVec[i]->getTokenName();
07696                 }
07697                 
07698                 // now create back the expression tree 
07699                 expTree->m_treeRoot = postfixVec[ n - 1]->createExpressionTreeFromPostfix( postfixVec);
07700         
07701                 // now get in prefix
07702                 std::vector<OSnLNode*> prefixVec;
07703                 //prefixVec = expTree->m_treeRoot->getPrefixFromExpressionTree();
07704                 prefixVec = osinstance->getNonlinearExpressionTreeInPrefix( -1);
07705                 
07706                 // now create back the expression tree
07707                 expTree->m_treeRoot = prefixVec[ 0]->createExpressionTreeFromPrefix( prefixVec);
07708                 
07709                 // now get postfix vector again and compare with original
07710                 postfixVec = expTree->m_treeRoot->getPostfixFromExpressionTree();
07711                 //postfixVec = osinstance->getNonlinearExpressionTreeInPostfix( -1);
07712                 if(postfixVec.size() != n) throw ErrorClass(" Problem with creating expression trees");
07713                 //std::cout << std::endl << std::endl;
07714                 for (i = 0 ; i < n; i++){
07715                         //std::cout << postfixVec[i]->getTokenName() << std::endl;
07716                         nodeNames2[i] = postfixVec[i]->getTokenName();
07717                         if( nodeNames1[i] != nodeNames2[ i]) throw ErrorClass(" Problem with creating expression trees");
07718                 }       
07719                 
07720                 //delete osinstance;
07721                 delete[] nodeNames1;
07722                 nodeNames1 = NULL;
07723                 delete[] nodeNames2; 
07724                 nodeNames2 = NULL;
07725 
07726                 delete osilreader;
07727                 osilreader = NULL;
07728                 osinstance = NULL;              
07729                 unitTestResult << "TEST " << nOfTest << ": Successful test of prefix and postfix conversion routines" << std::endl;
07730                 cout << endl << "TEST " << nOfTest << ": Completed successfully" << endl << endl;
07731                 
07732         }
07733         catch(const ErrorClass& eclass){
07734                 cout << endl << endl << endl;
07735                 unitTestResultFailure << eclass.errormsg << endl;
07736                 if (osilreader != NULL)
07737                         delete osilreader;
07738                 osilreader = NULL;
07739                 if (nodeNames1 != NULL)
07740                         delete[] nodeNames1;
07741                 nodeNames1 = NULL;
07742                 if (nodeNames2 != NULL)
07743                         delete[] nodeNames2; 
07744                 nodeNames2 = NULL;
07745         }
07746 
07747 } //end of if (OTHER_TESTS)
07748 
07749         delete fileUtil;
07750         fileUtil = NULL;
07751             
07752         if(unitTestResultFailure.str().length() > 0){
07753                 cout << endl << "THE UNIT TEST PASSED THE FOLLOWING:" << endl << endl;
07754                 cout << unitTestResult.str() << endl << endl;
07755                 cout << "UNFORTUNATELY, YOU FAILED ON THE FOLLOWING:" << endl << endl;
07756                 cout << unitTestResultFailure.str() << endl << endl;
07757                 cout << "Conclusion: FAILURE" << endl;
07758                 return 1;
07759         }
07760         else{
07761                 cout << endl << "THE UNIT TEST PASSED THE FOLLOWING:" << endl << endl;
07762                 cout << unitTestResult.str() << endl << endl;
07763                 cout << "All tests completed successfully" <<  endl <<  endl;
07764 #ifdef GUS_DEBUG
07765                 cout << "Make sure to #undef GUS_DEBUG before committing!!!" <<  endl <<  endl;
07766 #endif
07767                 return 0;
07768         }
07769 }//end main
07770 
07771 double getObjVal( std::string osrl){
07772         std::string sObjVal;
07773         double dObjVal;
07774         string::size_type pos2;
07775         string::size_type pos1 = osrl.find( "<obj ");
07776         if(pos1 != std::string::npos){
07777                 // get the end of the obj start tag
07778                 pos1 = osrl.find(">", pos1 + 1);
07779                 if(pos1 != std::string::npos){
07780                         // get the start of obj end tag
07781                         pos2 = osrl.find( "</obj", pos1 + 1);
07782                         if( pos2 != std::string::npos){
07783                                 // get the substring
07784                                 sObjVal = osrl.substr( pos1 + 1, pos2 - pos1 - 1);
07785                                 //std::cout << "HERE IS THE OBJECTIVE FUNCTION VALUE SUBSTRING  " << sObjVal<< std::endl; 
07786                                 // return dObjVal = strtod(sObjVal.c_str(), NULL);
07787                                 return dObjVal = os_strtod(sObjVal.c_str(), NULL); 
07788                         }
07789                         else return OSNaN();
07790                 }
07791                 else return OSNaN();
07792         }
07793         else return OSNaN();
07794 }
07795 
07796 
07797 void tempPrintArrays(OSResult* os)
07798 {
07799         std::cout << "Print out array content" << std::endl;
07800         for (int i=0; i < os->optimization->numberOfSolutions; ++i)
07801         {
07802                 std::cout << "solution " << i << std::endl << std::endl;
07803                 std::cout << "variables   basic      ";
07804                 std::cout << os->optimization->solution[i]->variables->basisStatus->basic->el[0] << "  ";
07805                 std::cout << os->optimization->solution[i]->variables->basisStatus->basic->el[1] << "  ";
07806                 std::cout << os->optimization->solution[i]->variables->basisStatus->basic->el[2] << endl;
07807                 std::cout << "variables   atLower    ";
07808                 std::cout << os->optimization->solution[i]->variables->basisStatus->atLower->el[0] << "  ";
07809                 std::cout << os->optimization->solution[i]->variables->basisStatus->atLower->el[1] << "  ";
07810                 std::cout << os->optimization->solution[i]->variables->basisStatus->atLower->el[2] << endl;
07811                 std::cout << "variables   atUpper    ";
07812                 std::cout << os->optimization->solution[i]->variables->basisStatus->atUpper->el[0] << "  ";
07813                 std::cout << os->optimization->solution[i]->variables->basisStatus->atUpper->el[1] << "  ";
07814                 std::cout << os->optimization->solution[i]->variables->basisStatus->atUpper->el[2] << endl;
07815                 std::cout << "variables   isFree     ";
07816                 std::cout << os->optimization->solution[i]->variables->basisStatus->isFree->el[0] << "  ";
07817                 std::cout << os->optimization->solution[i]->variables->basisStatus->isFree->el[1] << "  ";
07818                 std::cout << os->optimization->solution[i]->variables->basisStatus->isFree->el[2] << endl;
07819                 std::cout << "variables   superbasic ";
07820                 std::cout << os->optimization->solution[i]->variables->basisStatus->superbasic->el[0] << "  ";
07821                 std::cout << os->optimization->solution[i]->variables->basisStatus->superbasic->el[1] << "  ";
07822                 std::cout << os->optimization->solution[i]->variables->basisStatus->superbasic->el[2] << endl;
07823                 std::cout << "variables   unknown    ";
07824                 std::cout << os->optimization->solution[i]->variables->basisStatus->unknown->el[0] << "  ";
07825                 std::cout << os->optimization->solution[i]->variables->basisStatus->unknown->el[1] << "  ";
07826                 std::cout << os->optimization->solution[i]->variables->basisStatus->unknown->el[2] << endl;
07827 
07828                 std::cout << std::endl;
07829 
07830 
07831                 std::cout << "objectives  basic      ";
07832                 std::cout << os->optimization->solution[i]->objectives->basisStatus->basic->el[0] << "  ";
07833                 std::cout << os->optimization->solution[i]->objectives->basisStatus->basic->el[1] << "  ";
07834                 std::cout << os->optimization->solution[i]->objectives->basisStatus->basic->el[2] << endl;
07835                 std::cout << "objectives  atLower    ";
07836                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atLower->el[0] << "  ";
07837                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atLower->el[1] << "  ";
07838                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atLower->el[2] << endl;
07839                 std::cout << "objectives  atUpper    ";
07840                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atUpper->el[0] << "  ";
07841                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atUpper->el[1] << "  ";
07842                 std::cout << os->optimization->solution[i]->objectives->basisStatus->atUpper->el[2] << endl;
07843                 std::cout << "objectives  isFree     ";
07844                 std::cout << os->optimization->solution[i]->objectives->basisStatus->isFree->el[0] << "  ";
07845                 std::cout << os->optimization->solution[i]->objectives->basisStatus->isFree->el[1] << "  ";
07846                 std::cout << os->optimization->solution[i]->objectives->basisStatus->isFree->el[2] << endl;
07847                 std::cout << "objectives  superbasic ";
07848                 std::cout << os->optimization->solution[i]->objectives->basisStatus->superbasic->el[0] << "  ";
07849                 std::cout << os->optimization->solution[i]->objectives->basisStatus->superbasic->el[1] << "  ";
07850                 std::cout << os->optimization->solution[i]->objectives->basisStatus->superbasic->el[2] << endl;
07851                 std::cout << "objectives  unknown    ";
07852                 std::cout << os->optimization->solution[i]->objectives->basisStatus->unknown->el[0] << "  ";
07853                 std::cout << os->optimization->solution[i]->objectives->basisStatus->unknown->el[1] << "  ";
07854                 std::cout << os->optimization->solution[i]->objectives->basisStatus->unknown->el[2] << endl;
07855 
07856                 std::cout << std::endl;
07857 
07858                 std::cout << "constraints basic      ";
07859                 std::cout << os->optimization->solution[i]->constraints->basisStatus->basic->el[0] << "  ";
07860                 std::cout << os->optimization->solution[i]->constraints->basisStatus->basic->el[1] << "  ";
07861                 std::cout << os->optimization->solution[i]->constraints->basisStatus->basic->el[2] << endl;
07862                 std::cout << "constraints atLower    ";
07863                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atLower->el[0] << "  ";
07864                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atLower->el[1] << "  ";
07865                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atLower->el[2] << endl;
07866                 std::cout << "constraints atUpper    ";
07867                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atUpper->el[0] << "  ";
07868                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atUpper->el[1] << "  ";
07869                 std::cout << os->optimization->solution[i]->constraints->basisStatus->atUpper->el[2] << endl;
07870                 std::cout << "constraints isFree     ";
07871                 std::cout << os->optimization->solution[i]->constraints->basisStatus->isFree->el[0] << "  ";
07872                 std::cout << os->optimization->solution[i]->constraints->basisStatus->isFree->el[1] << "  ";
07873                 std::cout << os->optimization->solution[i]->constraints->basisStatus->isFree->el[2] << endl;
07874                 std::cout << "constraints superbasic ";
07875                 std::cout << os->optimization->solution[i]->constraints->basisStatus->superbasic->el[0] << "  ";
07876                 std::cout << os->optimization->solution[i]->constraints->basisStatus->superbasic->el[1] << "  ";
07877                 std::cout << os->optimization->solution[i]->constraints->basisStatus->superbasic->el[2] << endl;
07878                 std::cout << "constraints unknown    ";
07879                 std::cout << os->optimization->solution[i]->constraints->basisStatus->unknown->el[0] << "  ";
07880                 std::cout << os->optimization->solution[i]->constraints->basisStatus->unknown->el[1] << "  ";
07881                 std::cout << os->optimization->solution[i]->constraints->basisStatus->unknown->el[2] << endl;
07882 
07883                 std::cout << std::endl;
07884 
07885                 for (int k=0; k < os->optimization->solution[i]->variables->other[2]->numberOfEnumerations; k++)
07886                 {
07887                         std::cout << "other variable results --- enum " << k;
07888                         std::cout << "  " << os->optimization->solution[i]->variables->other[2]->enumeration[k]->el[0];
07889                         std::cout << "  " << os->optimization->solution[i]->variables->other[2]->enumeration[k]->el[1];
07890                         std::cout << "  " << os->optimization->solution[i]->variables->other[2]->enumeration[k]->el[2];
07891 
07892                         std::cout << std::endl;
07893                 }
07894 
07895                 std::cout << std::endl;
07896 
07897                 for (int k=0; k < os->optimization->solution[i]->objectives->other[2]->numberOfEnumerations; k++)
07898                 {
07899                         std::cout << "other objective results --- enum " << k;
07900                         std::cout << "  " << os->optimization->solution[i]->objectives->other[2]->enumeration[k]->el[0];
07901                         std::cout << "  " << os->optimization->solution[i]->objectives->other[2]->enumeration[k]->el[1];
07902                         std::cout << "  " << os->optimization->solution[i]->objectives->other[2]->enumeration[k]->el[2];
07903 
07904                         std::cout << std::endl;
07905                 }
07906 
07907                 std::cout << std::endl;
07908 
07909                 for (int k=0; k < os->optimization->solution[i]->constraints->other[2]->numberOfEnumerations; k++)
07910                 {
07911                         std::cout << "other constraint results --- enum " << k;
07912                         std::cout << "  " << os->optimization->solution[i]->constraints->other[2]->enumeration[k]->el[0];
07913                         std::cout << "  " << os->optimization->solution[i]->constraints->other[2]->enumeration[k]->el[1];
07914                         std::cout << "  " << os->optimization->solution[i]->constraints->other[2]->enumeration[k]->el[2];
07915 
07916                         std::cout << std::endl;
07917                 }
07918                 return;
07919         }
07920 }
07921 

Generated on Wed Nov 30 03:04:31 2011 by  doxygen 1.4.7