testexeq.gms : Test external equations

Description

This test makes sure that the simple examples using external equations work
with different compilers on different platforms.

Contributor: D. Tischinberg


Small Model of Type : GAMS


Category : GAMS Test library


Main file : testexeq.gms

$title Test external equations (TESTEXEQ,SEQ=562)

$onText
This test makes sure that the simple examples using external equations work
with different compilers on different platforms.

Contributor: D. Tischinberg
$offText


* Dataname same as Modelname and expanded with additional letter from Programming Language
* 'f' for fortran, 'd' for Delphi
* For Example Model 'ex1.gms' uses C library 'ex1c.dll' and Fortran library 'ex1f.dll'

Set ex   examples /er1*er3, ex1*ex6, ex1x, ex4x, exmcp1*exmcp5/
    cb   call back or message vector / '', '_cb' /
    lang languages / c '.c', fortran90 '.f90', delphi '.dpr', java '.java'/
    bc   GAMS build codes / wei, leg, deg, dac /
    extequExample(ex,cb,lang) /
    er1   .'_cb'.C         er1c
    er1   .'_cb'.Fortran90 er1f
    er2   .'_cb'.C         er2c
    er2   .'_cb'.Fortran90 er2f
    er3   .'_cb'.C         er3c
    er3   .'_cb'.Fortran90 er3f
    ex1   .''   .C         ex1c
    ex1   .''   .Fortran90 ex1f
    ex1   .''   .Delphi    ex1d
    ex1   .''   .Java      Ex1j
    ex1   .'_cb'.C         ex1c
    ex1   .'_cb'.Fortran90 ex1f
    ex1   .'_cb'.Delphi    ex1d
    ex1x  .''.   Fortran90 ex1xf
    ex1x  .'_cb'.C         ex1xc
    ex2   .'_cb'.C         ex2c
    ex2   .'_cb'.Fortran90 ex2f
    ex2   .'_cb'.Delphi    ex2d
    ex3   .''   .Delphi    ex3d
    ex3   .'_cb'.C         ex3c
    ex3   .'_cb'.Fortran90 ex3f
    ex4   .''   .Delphi    ex4d
    ex4   .'_cb'.C         ex4c
    ex4   .'_cb'.Fortran90 ex4f
    ex4x  .'_cb'.C         ex4xc
    ex4x  .'_cb'.Fortran90 ex4xf
    ex5   .''   .C         ex5c
    ex5   .''   .Fortran90 ex5f
    ex6   .''   .C         ex6c
    exmcp1.''   .C         exmcp1c
    exmcp1.''   .Fortran90 exmcp1f
    exmcp2.''   .C         exmcp2c
    exmcp2.''   .Fortran90 exmcp2f
    exmcp2.'_cb'.C         exmcp2c
    exmcp2.'_cb'.Fortran90 exmcp2f
    exmcp3.'_cb'.C         exmcp3c
    exmcp3.'_cb'.Fortran90 exmcp3f
    exmcp4.'_cb'.C         exmcp4c
    exmcp4.'_cb'.Fortran90 exmcp4f
    exmcp5.''   .C         exmcp5c
/;

Set os / Windows '.dll', Unix '.so', Mac '.dylib'/;
Set ExtraFiles(os,cb,lang) /
Unix.   '_cb'.Fortran90 gehelper.f90 msg2_f.f90
Unix.   ''   .Fortran90 gehelper.f90
Windows.'_cb'.Fortran90 gehelper.f90 msg2_f.f90
Windows.''   .Fortran90 gehelper.f90
/;
ExtraFiles('Mac',cb,lang) = ExtraFiles('Unix',cb,lang);

$set myos Windows
$ifI %system.filesys%==unix $set myos Unix
$ifI %system.platform%==dex $set myos Mac
$ifI %system.platform%==dax $set myos Mac

*Since we need to call compilers, run only during our tests (that is GSYS has been setup)
$ifI not %sysenv.GSYS% == %system.buildcode% $exit
*Now exclude the testers, as they don't have all compilers (nocomp is set in quality for the testers)
$if set nocomp $exit

*for Java: before using the DLL make sure jvm.dll is in the PATH
$ifI %system.buildcode%==wei $prefixPath C:\Java\bin\server
* anton.gams.com
$ifI %system.buildcode%==leg $setEnv LD_LIBRARY_PATH /usr/lib/jvm/jre/lib/server:%SysEnv.LD_LIBRARY_PATH%
*$ifI %system.buildcode%==deg $setEnv DYLD_LIBRARY_PATH/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries:%SysEnv.LD_LIBRARY_PATH%

*running single example from set
$if not set TEST $goTo alltests
 set ex2(ex) / %TEST% /;
$goTo singletests
$label alltests
 set ex2(ex); ex2(ex) = yes;
$label singletests

*not running single example from set
$if not set NOTEST $goTo noalltest
 set exn(ex) /%NOTEST%/;
ex2(ex) = not exn(ex);
$label noalltest

*under macOS no java
$if not set LAN
$ifI %system.buildcode%==deg $set LAN "c,fortran90,delphi"
$if not set LAN
$ifI %system.buildcode%==dac $set LAN "c,fortran90,delphi"

*under WEI no delphi, # 2237
$ifI %system.buildcode%==wei $set LAN "c,fortran90,java"

*run examples with defined language
$if not set LAN $goTo alllang
 set lang2(lang) / %LAN% /;
$goTo singlelang
$label alllang
 set lang2(lang); lang2(lang) = yes;
$label singlelang

* p3c makefile does not handle spaces in the path to the library that is build, #5912
* (for WEI, this skip is redundant, see above mention of #2237)
lang2('delphi') = no;

scalar fp;
file fpf / pf.txt /;
file fx;
loop(ex2(ex)$sum(extequExample(ex,cb,lang2),1),
  Put_utility fx 'exec' /'testlib -q ' ex.tl;
  loop(extequExample(ex,cb,lang2(lang)),
    put fpf / 'eolonly=1'
            / '--lang=', lang.tl:0
            / '--files=';
    loop(ExtraFiles('%myos%',cb,lang),
      put ExtraFiles.te('%myos%',cb,lang) ' ');
    put extequExample.te(extequExample);
    put cb.tl:0 lang.te(lang);
    put / '--libname='
    put extequExample.te(extequExample);
    loop(os$sameas('%myos%',os), put cb.tl:0 os.te(os));
    put / '--namestub='
    put extequExample.te(extequExample);
    putclose fpf;
    execute 'gams complink idir=.. lo=%gams.lo% pf=pf.txt'
    abort$errorlevel 'problems compiling';
  )


  put fpf / 'input=' ex.tl:0 '.gms'
  loop(extequExample(ex,cb,lang2(lang)),
    put / '--run';
    fp = fpf.cc;
    put lang.tl:0; put @(fp+1) '               ';
    put @(fp+1) cb.tl:0 '=yes'
  );
  putclose fpf;
  execute 'gams dummy lo=%gams.lo% pf=pf.txt';
  abort$errorlevel 'problems running example';
);