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