$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=. $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<'