$title 'EMP Quality Assurance Test' (GOEMPGO,SEQ=16) $onText This model runs all models included in the EMP Library and their success Contributor: Jan-H. Jagla, January 2009 $offText $eolCom // $set SLASH \ $if %system.filesys% == UNIX $set SLASH / $if not set PREFIX $set PREFIX %system.platform% $set GAMSLO %gams.lo% $if %gams.ide% == 1 $set GAMSLO 2 $set FLAGS lo=%GAMSLO% etlim=1800 %gams.user1% $set ALL all_emp.gms $set FAIL failures_emp.gms $set RMDIR rmdir.gms $if not set TRACE $set TRACE emplib.trc // gtrace file trace=%TRACE% $if not set TRACEREP $set TRACEREP emplib.rep // Gtrace report file $set TL 6 scalar licensed /0/; $if '%LICENSE%' == 'yes' licensed = 1; $include empmod.inc $if not set TEST $goTo alltests set m2(m) / %TEST% /; $goTo singletests $label alltests set m2(m); m2(m) = yes; $label singletests set solvers master set of solvers / system.solverNames / solverPlatformMap(solvers,*) / system.SolverPlatformMap / mt modelTypes / system.modeltypes / avail(solvers) EMP Solvers available for this platform'; $ifThen set solver set singleS(solvers) / %solver% /; loop(singleS, abort$(not solvers(singleS)) 'Solver not valid'; abort$(not sum(solverPlatformMap(singleS,'%system.platform%'),1)) 'Solver not available on this platform'; abort$(not SolverCapabilities(singleS,'EMP')) 'Solver cannot solve EMP models'; avail(singleS) = yes; ); $else avail(solvers) = solvers(solvers) and sum(solverPlatformMap(solvers,'%system.platform%'),1) and SolverCapabilities(solvers,'EMP'); $endIf $onEmpty set skipM(m) skip model / emphtm 'utility to create EMP library web page but not a test' emputil 'utility to create EMP library file but not a test' goempgo 'the test itself' / skipMstdo(m) skip model stdout check / emppython1 'Ply writes "Generating LALR tables"' / skipMstde(m) skip model stderr check / / skipMtrace(m) skip model trace check / / skipS(solvers) skip solver / CONVERT KESTREL / skipSstdo(solvers) skip solver stdout check / / skipSstde(solvers) skip solver stderr check / / skipSM(solvers,m) skip model-solver-combination / LINDO.circlesp 'LINDOs local solve is not as precise as expected by the test' RESHOP.(exc2x2emp) 'Need to think about models with IEEE 754 undefined operations' RESHOP.(scarfemp-primal) 'DUALVAR not yet supported' RESHOP.(pies) 'DUALVAR not yet supported' RESHOP.(hark-stack) 'DUALVAR not yet supported' RESHOP.(two3emp) 'DUALVAR not yet supported' RESHOP.(vidualvar) 'DUALVAR not yet supported' $if %system.buildcode% == DEG LINDO.simplechance 'non-deterministic error on DEG' / skipSMtrace(solvers,m) skip model-solver-combination trace check / DE.tr20 'DE reports 9,14 on first and third solve' LINDO.tr20 'LINDO reports 9,14 on first and third solve' /; $offEmpty * Skip nonSP models with DE and LINDO skipSM('DE' ,m) $= not sum(sm(s,m),ts('SP',s)); skipSM('LINDO' ,m) $= not sum(sm(s,m),ts('SP',s)); * Skip SP models with JAMS skipSM('JAMS' ,m) $= sum(sm(s,m),ts('SP',s)); * Only do logic models with LOGMIP skipSM('LOGMIP',m) $= not sum(sm(s,m),ts('LOGICAL',s)); * Skip non VI/equil models with ReSHOP skipSM('RESHOP' ,m) $= not sum(sm(s,m),ts('VI',s)) and not sum(sm(s,m),ts('EQUIL',s)) and not sum(sm(s,m),ts('BP',s)) and not sum(sm(s,m),ts('EQUIL',s)); scalar rc / 0 /, tot / 0 /, err / 0 /, stderr / 0 /, stdout / 0 /; file fone / 'onetest.gms' / fstd / 'stdtest.gms' / fall / '%ALL%' / ffail / '%FAIL%' / frm / '%RMDIR%' / fx; $if %ALL% == all_emp.gms putclose fall '* These are the tests we ran' /; $if %FAIL% == failures_emp.gms putclose ffail '* These are the tests that failed' / '*Total tests: 0 Failed tests: 0'; putclose frm '* Delete directories of successfull tests' /; fone.lcase = 1; fstd.lcase = 1; fall.lcase = 1; ffail.lcase = 1; frm.lcase = 1; fx.lcase = 1; fall.ap = 1; ffail.ap = 1; frm.ap = 1; $set DIRNAME "'%PREFIX%_emp_' m.tl:0 '_' t.tl:0 '_' solvers.tl:0" loop((sm(s,m2(m)),ts(t,s))$(not skipM(m) and (not big(s) or licensed)), loop(avail(solvers)$(not skipS(solvers) and not skipSM(solvers,m)), tot = tot + 1; //Create empty dir and onetest put_utility fx 'shell' / 'rm -rf ' %DIRNAME% ' && mkdir ' %DIRNAME%; put fone '$offCheckErrorLevel' / '$call emplib -q ' m.tl:0 / '$if errorlevel 1 $abort' / '$echo JobStart ' m.tl:0 ' >> %TRACE%' / '$call gams ' m.tl:0 ' jt=' m.tl:0 ' emp=' solvers.tl:0 ' trace=%TRACE% %FLAGS%' / '$if errorlevel 1 $set err 1' put$(not skipMtrace(m) and not skipSMtrace(solvers,m)) / '$call gams %TRACE% a=gt ps=0 pw=255 tl=0 lo=2'; putclose / '$if errorlevel 1 $set err 1' / '$if set err scalar err /%err%/' / '$call cat %TRACE% >> ..%SLASH%%TRACE%' / "$if %err% == 1 $abort 'Problem'"; // move and run onetest put_utility fx 'shell' / 'mv -f onetest.gms ' %DIRNAME% ' && cd ' %DIRNAME% ' && gams onetest lo=%GAMSLO% --err=0 gdx=..%SLASH%err >stdout.txt 2>stderr.txt'; rc=1; execute_load 'err' rc=err; //Create stdout and stderr test putclose fstd '$offCheckErrorLevel' / '$call test -s stdout.txt' / '$if errorlevel 1 $set stdout 0' / '$call test -s stderr.txt' / '$if errorlevel 1 $set stderr 0' / 'scalar stdout /%stdout%/' / ' stderr /%stderr%/;'; //Run stdout/err test put_utility fx 'shell' / 'mv -f stdtest.gms ' %DIRNAME% ' && cd ' %DIRNAME% ' && gams stdtest.gms lo=%GAMSLO% --stderr=1 --stdout=1 gdx=..%SLASH%std'; stdout=1; stderr=1; execute_load 'std' stderr,stdout; //Create file containing all tests put fall '$call gams goempgo %FLAGS% --prefix=%PREFIX% --test=' m.tl:0 ' --solver=' solvers.tl:0 ; if (licensed, put ' --LICENSE=yes'); if (rc, put ' --ftrace=1' ); if (stdout and not skipMstdo(m) and not skipSstdo(solvers), put ' --fstdout=1' ); if (stderr and not skipMstde(m) and not skipSstde(solvers), put ' --fstderr=1' ); putclose ' --dir='%DIRNAME% /; if (rc or (stdout and not skipMstdo(m) and not skipSstdo(solvers)) or (stderr and not skipMstde(m) and not skipSstde(solvers)), err = err + 1; execute 'tail -n1 %ALL% >> %FAIL%'; else putclose frm '$call rm -rf ' %DIRNAME%; ); ); ); execute 'gams %TRACE% a=gt ps=0 pw=255 o=%TRACEREP% tl=%TL% lo=0'; execute 'gams %RMDIR% lo=0'; putclose ffail '*Total tests: ', tot:0:0, ' Failed tests: ', err:0:0; execute 'rm -f rmdir.* err.gdx std.gdx'; if ((err > 0), put_utility 'log' / err:0:0, ' out of ' ,tot:0:0, ' tests failed.'; put_utility 'log' / 'Check %FAIL%'; put_utility 'log' / 'Some test failed.'; else put_utility 'log' / 'Congratulations! All ', tot:0:0, ' tests passed.'/; ); put_utility 'log' / 'See the file %ALL% to reproduce all the runs'/;