testapi.gms : API Quality Assurance Test

Description

This model runs all models included in the API Library.

Contributor: Lutz Westermann, October 2014


Small Model of Type : GAMS


Category : GAMS API library


Main file : testapi.gms   includes :  apimod.inc [html]

$TITLE 'API Quality Assurance Test' (TESTAPI,SEQ=2)

$ontext
This model runs all models included in the API Library.

Contributor: Lutz Westermann, October 2014
$offtext



* Do not do anything on Testers
$if %runAsTester%==1 $exit

set tests / Cex1
            Cex2
            CPPex1*CPPex3
            CPPtrseq
            DCex1
            DOex1
            DPex1
            DOex2
            Fex1
            Fex2
            gdxperf
            JAlias
            JBenders
            JClad
            JCutstock
            JDomainCheck
            Jex1
            Jex2
            JInterrupt
            JSpecialValues
            Jtrseq
            JTsp
            JWarehouse
            CSex1
            CSex2
            CSCalcInverse
            CStrseq
            CSAlias
            CSBenders
            CSClad
            CSCutstock
            CSDomainChecking
            CSNUnit
            CSSpecialValues
            CSTsp
            CSInterrupt
            CSWarehouse
            PBuildXPLevelAPI
            Pex1
            Pex2
            Pgamstransfer
            Pgams_engine
            Pneos
            Ptrseq
            PAlias
            PBenders
            PClad
            PCutstock
            PDomainChecking
            PInterrupt
            PWarehouse
            PTsp
            PSpecialValues
            VBex1
            VBex2
            VBtrseq /

    suite / C 'C and CPP'
            D 'Delphi'
            F 'Fortran'
            J 'Java'
            N '.Net'
            P 'Python'    /

    st(suite, tests) / C.(Cex1,  Cex2,  CPPex1* CPPex3)
                       D.(DCex1, DOex1, DPex1,  DOex2 )
                       F.(Fex1,  Fex2)
                       J.(JAlias, JBenders, JCutstock, JDomainCheck, Jex1,  Jex2, JInterrupt, Jtrseq
$if not set demosize      ,JWarehouse, JTsp, JSpecialValues, JClad
                         )
                       N.(CSex1, CSex2, CSCalcInverse, CStrseq, CSAlias, CSBenders, CSCutstock, CSDomainChecking, CSInterrupt, CSSpecialValues
$if not set demosize             ,CSTsp ,CSWarehouse, CSClad
$if not %system.filesys% == UNIX ,CSNUnit ,VBex1, VBex2, VBtrseq, CPPtrseq
                         )
                       P.(PBuildXPLevelAPI, Pex1,  Pex2, Pgamstransfer, Pgams_engine, Pneos, Ptrseq, PAlias, PBenders, PCutstock, PDomainChecking, PInterrupt, gdxperf
$if not set demosize      ,PWarehouse, PTsp, PSpecialValues, PClad
                         ) /

    pfsuite(*,suite) / (dac,deg,leg,wei).(C,F,J,N,P)
                     /;

$onempty
set skip(tests) List of skips /
* We know that these ones fail
* These should be temporary skips
$if %system.buildcode% == DEG JClad 'pstree/kill problem, #2824'
$if %system.buildcode% == DEG CPPex3 'some issues on Pete (because of old OS?), devel/gams-cpp#69'
$if %system.buildcode% == DAC Pgams_engine   'test only works if solver on engine server and local are equal, but tries that with xpress, which we do not have on DAC'
/;
$offempty

$set FLAGS lo=%GAMS.lo%
$if set demosize $set FLAGS %FLAGS% --demosize=1


$if not set TEST $goto checksuite
SET runtests(tests) / %TEST% /;
$if errorfree $goto TEST_OK
$clearerror
$log The test model(s) specified (--TEST=%TEST%) are not all valid
$abort

$label checksuite
$if not set SUITE $goto alltests
SET tsuite(suite) / %SUITE% /;
$if errorfree $goto SUITE_OK
$clearerror
$log The suite(s) specified (--SUITE=%SUITE%) are not all valid
$abort
$label SUITE_OK
SET runtests(tests);
runtests(tests) = sum{st(tsuite,tests),yes};
$goto TEST_OK

$label alltests
SET runtests(tests);
runtests(tests) = yes;
$label TEST_OK

scalar
  tot    / 0 /,
  err    / 0 /,
  cnt    / 0 /;

file fall / 'all_api.gms'      /
     ferr / 'failures_api.gms' /
     rmme / 'rmme.gms'         /
     log  / ''                 /
     fx;

putclose fall '* These are the tests we ran' /;
putclose ferr '* These are the tests that failed' /;
fall.ap = 1;
ferr.ap = 1;

$if not set PREFIX $set PREFIX %system.buildcode%
$set DIRNAME "'%PREFIX%_api_' tests.tl:0 "

loop(runtests(tests)$(sum(pfsuite('%system.buildcode%',suite)$st(suite,tests),1) and not skip(tests)),
  tot = tot + 1;
  put_utility fx 'shell' / 'rm -rf ' %DIRNAME%;
  put_utility fx 'shell' / 'mkdir ' %DIRNAME%;
  put_utility fx 'shell' / 'cd ' %DIRNAME% ' && apilib ' tests.tl:0 ' && gams ' tests.tl:0 ' %FLAGS% > stdout.txt 2>stderr.txt';
  if(errorlevel,
    err = err + 1;
    putclose ferr '$call =gams testapi --test=' tests.tl:0 ' %FLAGS% --dir='%DIRNAME% /;
 else
    put_utility fx 'shell' / 'rm -rf ' %DIRNAME%;
  );
  putclose fall '$call =gams testapi --test=' tests.tl:0 ' %FLAGS% --dir='%DIRNAME% /;
);


putclose ferr '*Total tests: ', tot:0:0, '  Failed tests: ', err:0:0 ;

put log;
if {(err > 0),
  put 'There were errors: ', err:0:0, ' out of ',
       tot:0:0, ' tests failed.' /;
  put 'See the file failures_api.gms to reproduce the failed runs'/;
  put 'You have some failures. See failures_api.gms for details.';
else
  put 'Congratulations!  All ', tot:0:0, ' tests passed.'/;
};

put 'See the file all_api.gms to reproduce all the runs'/;