Description
A simple check to verify the results when dumping special values from a variable- subfields to a CSV file using GDXDUMP and the CSVAllFields option. In addition, the EpsOut, NaOut, pInfOut etc. options to customize the output string of special values are checked. Contributor: Jan-Erik Justkowiak, September 2018 Check the results when dumping a variable with special values in the subfields
Small Model of Type : GAMS
Category : GAMS Test library
Main file : gdxdump4.gms
$title GDXDUMP - Dumping special Values of Variable-Subfields from GDX (GDXDUMP4,SEQ=786)
$onText
A simple check to verify the results when dumping special values from a variable-
subfields to a CSV file using GDXDUMP and the CSVAllFields option. In addition,
the EpsOut, NaOut, pInfOut etc. options to customize the output string of special
values are checked.
Contributor: Jan-Erik Justkowiak, September 2018
$offText
* Check the results when dumping a variable with special values in the subfields
$onEcho > testDefault.gms
Set
dim1 / i1*i6 /
dim2 / Eps, NA, '+Inf', '-Inf', Undf, 0 /;
Alias (dim2, dim3, dim4, dim5, dim6);
$onUNDF
Variable x(*) /
i1.l EPS, i2.l NA, i3.l INF, i4.l -INF, i5.l UNDF, i6.l 0
i1.m EPS, i2.m NA, i3.m INF, i4.m -INF, i5.m UNDF, i6.m 0
i1.lo EPS, i2.lo NA, i3.lo INF, i4.lo -INF, i5.lo UNDF, i6.lo 0
i1.up EPS, i2.up NA, i3.up INF, i4.up -INF, i5.up UNDF, i6.up 0
i1.scale EPS, i2.scale NA, i3.scale INF, i4.scale -INF, i5.scale UNDF, i6.scale 0
/;
$gdxOut varX.gdx
$unLoad x
$gdxOut
$call gdxdump varX.gdx format=csv symb=x CSVAllFields > dumpedX.csv
$ifE errorLevel<>0 $abort Error writing to dumpedX.csv!
* It's the best to read the CSV into a set, so we are sure not to miss something, e.g. zero's
$call csv2gdx dumpedX.csv output=dumpedX.gdx id=dumpedX index=1..lastCol useHeader=y trace=0
$ifE errorLevel<>0 $abort Error reading from dumpedX.csv!
* Expected results
Set dumpedX(*,*,*,*,*,*) /
i1.Eps.Eps.Eps.Eps.Eps
i2.NA.NA.NA.NA.NA
i3.'+Inf'.'+Inf'.'+Inf'.'+Inf'.'+Inf'
i4.'-Inf'.'-Inf'.'-Inf'.'-Inf'.'-Inf'
i5.Undf.Undf.Undf.Undf.Undf
i6.0.0.0.0.0
/;
$gdxOut controlData.gdx
$unLoad dim1 dim2 dim3 dim4 dim5 dim6 dumpedX
$gdxOut
* Check the results
$call gdxdiff controlData.gdx dumpedX.gdx > %system.nullfile%
$ifE errorLevel<>0 $abort Checking the results when dumping subfiels of a variable with special values failed!
$offEcho
$call gams testDefault.gms lo=%gams.lo%
$ifE errorLevel<>0 $abort Error running testDefault.gms
*-------------------------------------------------------------------------------
* Check the results when dumping a variable with special values in the subfields
* and change the string written of the special values by adding the EpsOut, NaOut etc. options
$onEcho > testNonDefault.gms
Set
dim1 / i1*i6 /
dim2 / Epsilon, 'Not Availible', 'Large Number', 'Small Number', 'Undefined', 'Zero' /;
Alias (dim2, dim3, dim4, dim5, dim6);
$call gdxdump varX.gdx format=csv symb=x CSVAllFields EpsOut=Epsilon NaOut="Not Availible" pInfOut="Large Number" mInfOut="Small Number" UndfOut=Undefined ZeroOut=Zero > dumpedXmod.csv
$ifE errorLevel<>0 $abort Error writing to dumpedXmod.csv!
* The identifier specified in the CSV2GDX call will be a parameter or set. Since
* the strings specified above will not be readable for CSV2GDX, we ommit the
* values specification and read the data as set using the index option
$call csv2gdx dumpedXmod.csv output=dumpedXmod.gdx id=dumpedXmod index=1..lastCol useHeader=y trace=0
$ifE errorLevel<>0 $abort Error reading from dumpedXmod.csv!
* To compare the results, we define the expected data also as a set
Set dumpedXmod(*,*,*,*,*,*) /
i1.Epsilon.Epsilon.Epsilon.Epsilon.Epsilon
i2."Not Availible"."Not Availible"."Not Availible"."Not Availible"."Not Availible"
i3."Large Number"."Large Number"."Large Number"."Large Number"."Large Number"
i4."Small Number"."Small Number"."Small Number"."Small Number"."Small Number"
i5.Undefined.Undefined.Undefined.Undefined.Undefined
i6.Zero.Zero.Zero.Zero.Zero
/;
$gdxOut controlData.gdx
$unLoad dim1 dim2 dim3 dim4 dim5 dim6 dumpedXmod
$gdxOut
* Check the results
$call gdxdiff controlData.gdx dumpedXmod.gdx > %system.nullfile%
$ifE errorLevel<>0 $abort Checking the results when dumping subfiels of a variable with special values failed!
$offEcho
$call gams testNonDefault.gms lo=%gams.lo%
$ifE errorLevel<>0 $abort Error running testNonDefault.gms
*-------------------------------------------------------------------------------