Description
This program tests the usage of GAMS Tool CSVWrite. The tool writes a GAMS symbol to a CSV file. Contributor: Vaibhavnath Jha, January 2025
Small Model of Type : GAMS
Category : GAMS Test library
Main file : csvwrite1.gms
$title 'Test GAMS Tool CSVWrite' (csvwrite1,SEQ=979)
$onText
This program tests the usage of GAMS Tool CSVWrite.
The tool writes a GAMS symbol to a CSV file.
Contributor: Vaibhavnath Jha, January 2025
$offText
$onEcho > t.gms
Set ij(*,*) /
'new-york'.'seattle',
'chicago'.'san-diego'/;
Set ij_with_text(*,*) /
'new-york'.'seattle' 'east-west',
'chicago'.'san-diego'/;
Set i(*) canning plants /
'seattle',
'san-diego' /;
Set j(*) markets /
'new-york',
'chicago',
'topeka' /;
Parameter a(i) capacity of plant i in cases /
'seattle' 350,
'san-diego' 600 /;
Parameter b(j) demand at market j in cases /
'new-york' 325,
'chicago' 300,
'topeka' 275 /;
Parameter d(i,j) distance in thousands of miles /
'seattle'.'new-york' 2.5,
'seattle'.'chicago' 1.7,
'seattle'.'topeka' 1.8,
'san-diego'.'new-york' 2.5,
'san-diego'.'chicago' 1.8,
'san-diego'.'topeka' 1.4 /;
Scalar f freight in dollars per case per thousand miles / 90 /;
Parameter c(i,j) transport cost in thousands of dollars per case /
'seattle'.'new-york' 0.225,
'seattle'.'chicago' 0.153,
'seattle'.'topeka' 0.162,
'san-diego'.'new-york' 0.225,
'san-diego'.'chicago' 0.162,
'san-diego'.'topeka' 0.126 /;
positive Variable x(i,j) shipment quantities in cases /
'seattle'.'new-york'.L 50,
'seattle'.'chicago'.L 300,
'seattle'.'topeka'.M 0.036,
'san-diego'.'new-york'.L 275,
'san-diego'.'chicago'.M 0.009,
'san-diego'.'topeka'.L 275 /;
free Variable z total transportation costs in thousands of dollars /L 153.675 /;
Equation cost define objective function /M 1, LO 0, UP 0 /;
Equation supply(i) observe supply limit at plant i /
'seattle'.L 350,
'seattle'.M Eps,
'seattle'.LO -Inf,
'seattle'.UP 350,
'san-diego'.L 550,
'san-diego'.LO -Inf,
'san-diego'.UP 600 /;
Equation demand(j) satisfy demand at market j /
'new-york'.L 325,
'new-york'.M 0.225,
'new-york'.LO 325,
'new-york'.UP +Inf,
'chicago'.L 300,
'chicago'.M 0.153,
'chicago'.LO 300,
'chicago'.UP +Inf,
'topeka'.L 275,
'topeka'.M 0.126,
'topeka'.LO 275,
'topeka'.UP +Inf /;
Set bulk /index1*index2/;
alias(bulk,i1,i2,i3,i4);
Parameter pbulk(i1,i2,i3,i4);
pbulk(i1,i2,i3,i4) = uniform(0,1);
Set jnew(*) new markets/
'toronto',
'vancouver'
/;
Set j_with_element_text /j1 'This is j1', j2 'This is j2'/;
$offEmpty
$offEcho
$call.checkErrorLevel gams t.gms lo=%gams.lo% gdx t.gdx
$log 1. Missing id
$call gamstool csvwrite gdxIn=t.gdx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 1. Error expected: parameter >id< not set.
$log
$log 2. Missing GDX
$call gamstool csvwrite id=c > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 2. Error expected: Command line use requires gdxIn=<gdx_filename>.
$log
$log 3. Wrong flag, allFields, which is effective only if variables and equations are involved
$call gamstool csvwrite id=demand gdxIn=t.gdx allFields=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 3. Error expected: Wrong flag: allFields=xxx.
$log
$log 4. Wrong flag, header
$call gamstool csvwrite id=a gdxIn=t.gdx header=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 4. Error expected: Wrong flag: header=xxx.
$log
$log 5. Wrong flag, skipText
$call gamstool csvwrite id=a gdxIn=t.gdx skipText=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 5. Error expected: Wrong flag: skipText=xxx.
$log
$log 6. Wrong flag, unstack
$call gamstool csvwrite id=a gdxIn=t.gdx unstack=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 6. Error expected: Wrong flag: unstack=xxx.
$log
$log 7. Wrong key, decimalSep
$call gamstool csvwrite id=a gdxIn=t.gdx decimalSep=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 7. Error expected: Wrong decimalSep input: xxx.
$log
$log 8. Wrong key, fieldSep
$call gamstool csvwrite id=a gdxIn=t.gdx fieldSep=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 8. Error expected: Wrong fieldSep input: xxx.
$log
$log 9. Wrong option, dFormat
$call gamstool csvwrite id=a gdxIn=t.gdx dFormat=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 9. Error expected: Unrecognized dformat
$log
$log 10. Wrong option, quoting
$call gamstool csvwrite id=a gdxIn=t.gdx quoting=xxx > %system.NullFile% 2>&1
$ifE errorLevel=0 $abort CSVWrite should have failed after running 10. Error expected: Cannot convert option value "xxx" into an integer
$log
$log 11. Check basic output,
$call.checkErrorLevel gamstool csvwrite id=a gdxIn=t.gdx file=output.csv
$onEcho>expected_out.csv
i,value
seattle,350.0
san-diego,600.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '11. Unexpected data in >a<'
$log
$log 12a. Check skipText=N (default)
$call.checkErrorLevel gamstool csvwrite id=j_with_element_text gdxIn=t.gdx skipText=N file=output.csv
$onEcho>expected_out.csv
uni,element_text
j1,This is j1
j2,This is j2
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '12a. Unexpected data in >j_with_element_text<'
$log
$log 12b. Check skipText=Y
$call.checkErrorLevel gamstool csvwrite id=j_with_element_text gdxIn=t.gdx skipText=Y file=output.csv
$onEcho>expected_out.csv
uni
j1
j2
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '12b. Unexpected data in >j_without_element_text<'
$log
$log 12c. Check skipText=Y with gdxdump, (dformat!=normal)
$call.checkErrorLevel gamstool csvwrite id=j_with_element_text gdxIn=t.gdx skipText=Y dFormat=hexponential file=output.csv
$onEcho>expected_out.csv
"Dim1"
"j1"
"j2"
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '12c. Unexpected data in >j_without_element_text< using GDXDUMP backend.'
$log
$log 13a. Check dformat=hexponential
$call.checkErrorLevel gamstool csvwrite id=b gdxIn=t.gdx dFormat=hexponential file=output.csv
$onEcho>expected_out.csv
"j","Val"
"new-york",0x1.45p8
"chicago",0x1.2cp8
"topeka",0x1.13p8
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '13a. Unexpected data in >hexponential_b<.'
$log
$log 13b. Check dFormat=hexbytes
$call.checkErrorLevel gamstool csvwrite id=b gdxIn=t.gdx dFormat=hexbytes file=output.csv
$onEcho>expected_out.csv
"j","Val"
"new-york",0x4074500000000000
"chicago",0x4072c00000000000
"topeka",0x4071300000000000
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '13b. Unexpected data in >hexbytes_b<'
$log
$log 14a. Check allFields=N (default)
$call.checkErrorLevel gamstool csvwrite id=demand gdxIn=t.gdx allFields=N file=output.csv
$onEcho>expected_out.csv
j,value
new-york,325.0
chicago,300.0
topeka,275.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '14a. Unexpected data in >n_allfields_demand<'
$log
$log 14b. Check allFields=Y
$call.checkErrorLevel gamstool csvwrite id=demand gdxIn=t.gdx allFields=Y file=output.csv
$onEcho>expected_out.csv
j,level,marginal,lower,upper,scale
new-york,325.0,0.225,325.0,INF,1.0
chicago,300.0,0.153,300.0,INF,1.0
topeka,275.0,0.126,275.0,INF,1.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '14b. Unexpected data in >y_allfields_demand<'
$log
$log 15a. Check decimalSep=period (default)
$call.checkErrorLevel gamstool csvwrite id=d gdxIn=t.gdx decimalSep=period file=output.csv
$onEcho>expected_out.csv
i,j,value
seattle,new-york,2.5
seattle,chicago,1.7
seattle,topeka,1.8
san-diego,new-york,2.5
san-diego,chicago,1.8
san-diego,topeka,1.4
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '15a. Unexpected data in >period_d<'
$log
$log 15b. Check decimalSep=comma (fieldSep=semicolon)
$call.checkErrorLevel gamstool csvwrite id=d gdxIn=t.gdx decimalSep=comma fieldSep=semicolon file=output.csv
$onEcho>expected_out.csv
i;j;value
seattle;new-york;2,5
seattle;chicago;1,7
seattle;topeka;1,8
san-diego;new-york;2,5
san-diego;chicago;1,8
san-diego;topeka;1,4
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '15b. Unexpected data in >comma_d<'
$log
$log 16. Check fieldSep=tab
$call.checkErrorLevel gamstool csvwrite id=d gdxIn=t.gdx fieldSep=tab file=output.csv
$onEcho>expected_out.csv
i j value
seattle new-york 2.5
seattle chicago 1.7
seattle topeka 1.8
san-diego new-york 2.5
san-diego chicago 1.8
san-diego topeka 1.4
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '16. Unexpected data in >tab_d<'
$log
$log 17a. Check header=Y (default)
$call.checkErrorLevel gamstool csvwrite id=a gdxIn=t.gdx header=Y file=output.csv
$onEcho>expected_out.csv
i,value
seattle,350.0
san-diego,600.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '17a. Unexpected data in >y_header_a<'
$log
$log 17b. Check header=N
$call.checkErrorLevel gamstool csvwrite id=a gdxIn=t.gdx header=N file=output.csv
$onEcho>expected_out.csv
seattle,350.0
san-diego,600.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '17b. Unexpected data in >n_header_a<'
$log
$log 18a. Check unstack=N (default)
$call.checkErrorLevel gamstool csvwrite id=c gdxIn=t.gdx unstack=N file=output.csv
$onEcho>expected_out.csv
i,j,value
seattle,new-york,0.225
seattle,chicago,0.153
seattle,topeka,0.162
san-diego,new-york,0.225
san-diego,chicago,0.162
san-diego,topeka,0.126
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '18a. Unexpected data in >n_unstack_c<'
$log
$log 18b. Check unstack=Y
$call.checkErrorLevel gamstool csvwrite id=c gdxIn=t.gdx unstack=Y file=output.csv
$onEcho>expected_out.csv
i,new-york,chicago,topeka
seattle,0.225,0.153,0.162
san-diego,0.225,0.162,0.126
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '18b. Unexpected data in >y_unstack_c<'
$log
$log 18c. Check unstack=Y, (dFormat=hexponential GDXDUMP backend)
$call.checkErrorLevel gamstool csvwrite id=c gdxIn=t.gdx unstack=Y dFormat=hexponential file=output.csv
$onEcho>expected_out.csv
"i","new-york","chicago","topeka"
"seattle",0x1.ccccccccccccdp-3,0x1.395810624dd2fp-3,0x1.4bc6a7ef9db23p-3
"san-diego",0x1.ccccccccccccdp-3,0x1.4bc6a7ef9db23p-3,0x1.020c49ba5e354p-3
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '18c. Unexpected data in >y_unstack_hexponential_c<'
$log
$log 19. Check setHeader=Y
$call.checkErrorLevel gamstool csvwrite id=x gdxIn=t.gdx setHeader="City_i,City_j,Shipment Quantities" file=output.csv
$onEcho>expected_out.csv
City_i,City_j,Shipment Quantities
seattle,new-york,50.0
seattle,chicago,300.0
seattle,topeka,0.0
san-diego,new-york,275.0
san-diego,chicago,0.0
san-diego,topeka,275.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '19. Unexpected data in >setHeader_x<'
$log
$log 20. Check quoting=2
$call.checkErrorLevel gamstool csvwrite id=x gdxIn=t.gdx quoting=2 file=output.csv
$onEcho>expected_out.csv
"i","j","value"
"seattle","new-york",50.0
"seattle","chicago",300.0
"seattle","topeka",0.0
"san-diego","new-york",275.0
"san-diego","chicago",0.0
"san-diego","topeka",275.0
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort '20. Unexpected data in >quoting_x<'
Set i /i1*i5/;
$log C1. Writing symbols from GMD at Compile-time
$callTool.checkErrorLevel csvwrite id=i skipText=Y file=output.csv
$onEcho > expected_out.csv
uni
i1
i2
i3
i4
i5
$offEcho
$call 'diff -bw output.csv expected_out.csv > %system.NullFile%'
$ifE errorLevel<>0 $abort 'C1. Unexpected data in >comp_i<'
$log
$log ---------Following are the execution-time tests---------
set ii(i);
ii(i) = Ord(i) <= 3;
executeTool.checkErrorLevel 'csvwrite id=ii skipText=Y file=output.csv';
$onEcho> expected_out.csv
i
i1
i2
i3
$offEcho
execute 'diff -bw output.csv expected_out.csv > %system.NullFile%';
abort$ErrorLevel 'E1. Unexpected data in >Exec_ii<'