00001
00002
00003 #if defined(_MSC_VER)
00004
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
00021 void
00022 OsiMpsReaderUnitTest(const std::string & mpsDir)
00023 {
00024
00025
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
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
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
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
00117 {
00118 const OsiMpsReader si(m);
00119 const OsiPackedMatrix * smP = si.getMatrixByRow();
00120
00121
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
00169 {
00170
00171 const OsiMpsReader si(m);
00172 const OsiPackedMatrix * smP = si.getMatrixByCol();
00173
00174
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
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