Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

OsiMpsReaderTest.cpp

00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #if defined(_MSC_VER)
00004 // Turn off compiler warning about long names
00005 #  pragma warning(disable:4786)
00006 #endif
00007 
00008 #include <cassert>
00009 
00010 
00011 #include "OsiMpsReader.hpp"
00012 
00013 //#############################################################################
00014 
00015 #ifdef NDEBUG
00016 #undef NDEBUG
00017 #endif
00018 
00019 //--------------------------------------------------------------------------
00020 // test import methods
00021 void
00022 OsiMpsReaderUnitTest(const std::string & mpsDir)
00023 {
00024   
00025   // Test default constructor
00026   {
00027     OsiMpsReader m;
00028     assert( m.rowsense_==NULL );
00029     assert( m.rhs_==NULL );
00030     assert( m.rowrange_==NULL );
00031     assert( m.matrixByRow_==NULL );
00032     assert( m.matrixByColumn_==NULL );
00033     assert( m.integerType_==NULL);
00034     assert( !strcmp( m.getFileName() , "stdin"));
00035     assert( !strcmp( m.getProblemName() , ""));
00036     assert( !strcmp( m.objectiveName_ , ""));
00037     assert( !strcmp( m.rhsName_ , ""));
00038     assert( !strcmp( m.rangeName_ , ""));
00039     assert( !strcmp( m.boundName_ , ""));
00040   }
00041   
00042   
00043   {    
00044     OsiRelFltEq eq;
00045     OsiMpsReader m;
00046     std::string fn = mpsDir+"exmip1";
00047     m.readMps(fn.c_str(),"mps");
00048     
00049      // Test language and re-use
00050     m.newLanguage(OsiMessages::it);
00051     m.messageHandler()->setPrefix(false);
00052     m.readMps(fn.c_str(),"mps");
00053 
00054     assert( !strcmp( m.problemName_ , "EXAMPLE"));
00055     assert( !strcmp( m.objectiveName_ , "OBJ"));
00056     assert( !strcmp( m.rhsName_ , "RHS1"));
00057     assert( !strcmp( m.rangeName_ , "RNG1"));
00058     assert( !strcmp( m.boundName_ , "BND1"));
00059     
00060     // Test copy constructor and assignment operator
00061     {
00062       OsiMpsReader lhs;
00063       {      
00064         OsiMpsReader im(m);        
00065         
00066         OsiMpsReader imC1(im);
00067         assert( imC1.getNumCols() == im.getNumCols() );
00068         assert( imC1.getNumRows() == im.getNumRows() );   
00069         
00070         OsiMpsReader imC2(im);
00071         assert( imC2.getNumCols() == im.getNumCols() );
00072         assert( imC2.getNumRows() == im.getNumRows() );  
00073         
00074         lhs=imC2;
00075       }
00076       // Test that lhs has correct values even though rhs has gone out of scope
00077       
00078       assert( lhs.getNumCols() == m.getNumCols() );
00079       assert( lhs.getNumRows() == m.getNumRows() );      
00080     }
00081     
00082     
00083     {    
00084       OsiMpsReader dumSi(m);
00085       int nc = dumSi.getNumCols();
00086       int nr = dumSi.getNumRows();
00087       const double * cl = dumSi.getColLower();
00088       const double * cu = dumSi.getColUpper();
00089       const double * rl = dumSi.getRowLower();
00090       const double * ru = dumSi.getRowUpper();
00091       assert( nc == 8 );
00092       assert( nr == 5 );
00093       assert( eq(cl[0],2.5) );
00094       assert( eq(cl[1],0.0) );
00095       assert( eq(cu[1],4.1) );
00096       assert( eq(cu[2],1.0) );
00097       assert( eq(rl[0],2.5) );
00098       assert( eq(rl[4],3.0) );
00099       assert( eq(ru[1],2.1) );
00100       assert( eq(ru[4],15.0) );
00101       
00102       assert( !eq(cl[3],1.2345) );
00103       
00104       assert( !eq(cu[4],10.2345) );
00105       
00106       assert( eq( dumSi.getObjCoefficients()[0],  1.0) );
00107       assert( eq( dumSi.getObjCoefficients()[1],  0.0) );
00108       assert( eq( dumSi.getObjCoefficients()[2],  0.0) );
00109       assert( eq( dumSi.getObjCoefficients()[3],  0.0) );
00110       assert( eq( dumSi.getObjCoefficients()[4],  2.0) );
00111       assert( eq( dumSi.getObjCoefficients()[5],  0.0) );
00112       assert( eq( dumSi.getObjCoefficients()[6],  0.0) );
00113       assert( eq( dumSi.getObjCoefficients()[7], -1.0) );
00114     }
00115     
00116     // Test matrixByRow method
00117     { 
00118       const OsiMpsReader si(m);
00119       const OsiPackedMatrix * smP = si.getMatrixByRow();
00120       // LL:      const OsiDumPackedMatrix * osmP = dynamic_cast<const OsiDumPackedMatrix*>(smP);
00121       // LL: assert( osmP!=NULL );
00122       
00123       OsiRelFltEq eq;
00124       const double * ev = smP->getElements();
00125       assert( eq(ev[0],   3.0) );
00126       assert( eq(ev[1],   1.0) );
00127       assert( eq(ev[2],  -2.0) );
00128       assert( eq(ev[3],  -1.0) );
00129       assert( eq(ev[4],  -1.0) );
00130       assert( eq(ev[5],   2.0) );
00131       assert( eq(ev[6],   1.1) );
00132       assert( eq(ev[7],   1.0) );
00133       assert( eq(ev[8],   1.0) );
00134       assert( eq(ev[9],   2.8) );
00135       assert( eq(ev[10], -1.2) );
00136       assert( eq(ev[11],  5.6) );
00137       assert( eq(ev[12],  1.0) );
00138       assert( eq(ev[13],  1.9) );
00139       
00140       const int * mi = smP->getVectorStarts();
00141       assert( mi[0]==0 );
00142       assert( mi[1]==5 );
00143       assert( mi[2]==7 );
00144       assert( mi[3]==9 );
00145       assert( mi[4]==11 );
00146       assert( mi[5]==14 );
00147       
00148       const int * ei = smP->getIndices();
00149       assert( ei[0]  ==  0 );
00150       assert( ei[1]  ==  1 );
00151       assert( ei[2]  ==  3 );
00152       assert( ei[3]  ==  4 );
00153       assert( ei[4]  ==  7 );
00154       assert( ei[5]  ==  1 );
00155       assert( ei[6]  ==  2 );
00156       assert( ei[7]  ==  2 );
00157       assert( ei[8]  ==  5 );
00158       assert( ei[9]  ==  3 );
00159       assert( ei[10] ==  6 );
00160       assert( ei[11] ==  0 );
00161       assert( ei[12] ==  4 );
00162       assert( ei[13] ==  7 );    
00163       
00164       assert( smP->getMajorDim() == 5 ); 
00165       assert( smP->getNumElements() == 14 );
00166       
00167     }
00168         // Test matrixByCol method
00169     {
00170       
00171       const OsiMpsReader si(m);
00172       const OsiPackedMatrix * smP = si.getMatrixByCol();
00173       // LL:      const OsiDumPackedMatrix * osmP = dynamic_cast<const OsiDumPackedMatrix*>(smP);
00174       // LL: assert( osmP!=NULL );
00175       
00176       OsiRelFltEq eq;
00177       const double * ev = smP->getElements();
00178       assert( eq(ev[0],   3.0) );
00179       assert( eq(ev[1],   5.6) );
00180       assert( eq(ev[2],   1.0) );
00181       assert( eq(ev[3],   2.0) );
00182       assert( eq(ev[4],   1.1) );
00183       assert( eq(ev[5],   1.0) );
00184       assert( eq(ev[6],  -2.0) );
00185       assert( eq(ev[7],   2.8) );
00186       assert( eq(ev[8],  -1.0) );
00187       assert( eq(ev[9],   1.0) );
00188       assert( eq(ev[10],  1.0) );
00189       assert( eq(ev[11], -1.2) );
00190       assert( eq(ev[12], -1.0) );
00191       assert( eq(ev[13],  1.9) );
00192       
00193       const int * mi = smP->getVectorStarts();
00194       assert( mi[0]==0 );
00195       assert( mi[1]==2 );
00196       assert( mi[2]==4 );
00197       assert( mi[3]==6 );
00198       assert( mi[4]==8 );
00199       assert( mi[5]==10 );
00200       assert( mi[6]==11 );
00201       assert( mi[7]==12 );
00202       assert( mi[8]==14 );
00203       
00204       const int * ei = smP->getIndices();
00205       assert( ei[0]  ==  0 );
00206       assert( ei[1]  ==  4 );
00207       assert( ei[2]  ==  0 );
00208       assert( ei[3]  ==  1 );
00209       assert( ei[4]  ==  1 );
00210       assert( ei[5]  ==  2 );
00211       assert( ei[6]  ==  0 );
00212       assert( ei[7]  ==  3 );
00213       assert( ei[8]  ==  0 );
00214       assert( ei[9]  ==  4 );
00215       assert( ei[10] ==  2 );
00216       assert( ei[11] ==  3 );
00217       assert( ei[12] ==  0 );
00218       assert( ei[13] ==  4 );    
00219       
00220       assert( smP->getMajorDim() == 8 ); 
00221       assert( smP->getNumElements() == 14 );
00222 
00223       assert( smP->getSizeVectorStarts()==9 );
00224       assert( smP->getMinorDim() == 5 );
00225       
00226     }
00227     //--------------
00228     // Test rowsense, rhs, rowrange, matrixByRow
00229     {
00230       OsiMpsReader lhs;
00231       {      
00232         assert( m.rowrange_==NULL );
00233         assert( m.rowsense_==NULL );
00234         assert( m.rhs_==NULL );
00235         assert( m.matrixByRow_==NULL );
00236         
00237         OsiMpsReader siC1(m);     
00238         assert( siC1.rowrange_==NULL );
00239         assert( siC1.rowsense_==NULL );
00240         assert( siC1.rhs_==NULL );
00241         assert( siC1.matrixByRow_==NULL );
00242 
00243         const char   * siC1rs  = siC1.getRowSense();
00244         assert( siC1rs[0]=='G' );
00245         assert( siC1rs[1]=='L' );
00246         assert( siC1rs[2]=='E' );
00247         assert( siC1rs[3]=='R' );
00248         assert( siC1rs[4]=='R' );
00249         
00250         const double * siC1rhs = siC1.getRightHandSide();
00251         assert( eq(siC1rhs[0],2.5) );
00252         assert( eq(siC1rhs[1],2.1) );
00253         assert( eq(siC1rhs[2],4.0) );
00254         assert( eq(siC1rhs[3],5.0) );
00255         assert( eq(siC1rhs[4],15.) ); 
00256         
00257         const double * siC1rr  = siC1.getRowRange();
00258         assert( eq(siC1rr[0],0.0) );
00259         assert( eq(siC1rr[1],0.0) );
00260         assert( eq(siC1rr[2],0.0) );
00261         assert( eq(siC1rr[3],5.0-1.8) );
00262         assert( eq(siC1rr[4],15.0-3.0) );
00263         
00264         const OsiPackedMatrix * siC1mbr = siC1.getMatrixByRow();
00265         assert( siC1mbr != NULL );
00266         
00267         const double * ev = siC1mbr->getElements();
00268         assert( eq(ev[0],   3.0) );
00269         assert( eq(ev[1],   1.0) );
00270         assert( eq(ev[2],  -2.0) );
00271         assert( eq(ev[3],  -1.0) );
00272         assert( eq(ev[4],  -1.0) );
00273         assert( eq(ev[5],   2.0) );
00274         assert( eq(ev[6],   1.1) );
00275         assert( eq(ev[7],   1.0) );
00276         assert( eq(ev[8],   1.0) );
00277         assert( eq(ev[9],   2.8) );
00278         assert( eq(ev[10], -1.2) );
00279         assert( eq(ev[11],  5.6) );
00280         assert( eq(ev[12],  1.0) );
00281         assert( eq(ev[13],  1.9) );
00282         
00283         const int * mi = siC1mbr->getVectorStarts();
00284         assert( mi[0]==0 );
00285         assert( mi[1]==5 );
00286         assert( mi[2]==7 );
00287         assert( mi[3]==9 );
00288         assert( mi[4]==11 );
00289         assert( mi[5]==14 );
00290         
00291         const int * ei = siC1mbr->getIndices();
00292         assert( ei[0]  ==  0 );
00293         assert( ei[1]  ==  1 );
00294         assert( ei[2]  ==  3 );
00295         assert( ei[3]  ==  4 );
00296         assert( ei[4]  ==  7 );
00297         assert( ei[5]  ==  1 );
00298         assert( ei[6]  ==  2 );
00299         assert( ei[7]  ==  2 );
00300         assert( ei[8]  ==  5 );
00301         assert( ei[9]  ==  3 );
00302         assert( ei[10] ==  6 );
00303         assert( ei[11] ==  0 );
00304         assert( ei[12] ==  4 );
00305         assert( ei[13] ==  7 );    
00306         
00307         assert( siC1mbr->getMajorDim() == 5 ); 
00308         assert( siC1mbr->getNumElements() == 14 );
00309         
00310 
00311         assert( siC1rs  == siC1.getRowSense() );
00312         assert( siC1rhs == siC1.getRightHandSide() );
00313         assert( siC1rr  == siC1.getRowRange() );
00314       }
00315     }
00316   }
00317   
00318 }
00319 
00320 
00321 
00322 
00323 

Generated on Wed Dec 3 14:34:24 2003 for Coin by doxygen 1.3.5