Description
This model runs all models included in the EMP Library and their success Contributor: Jan-H. Jagla, January 2009
Small Model of Type : GAMS
Category : GAMS EMP library
Main file : goempgo.gms includes : empmod.inc [html]
$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 /
CONVERTOLD
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
'$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
'$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'/;