load18.gms : Test gdxLoad

Description

Test execution time function gdxLoad.

Contributor: Lutz Westermann, June 2023


Small Model of Type : GAMS


Category : GAMS Test library


Main file : load18.gms

$title 'Test gdxLoad' (LOAD18,SEQ=940)

$onText
Test execution time function gdxLoad. 

Contributor: Lutz Westermann, June 2023
$offText


$onEcho > data.gms
Set       i        / i1*i3 /;
Parameter p(i)     / i2 2, i3 3 /
          err(i,i) / #i.#i 22 /
          q(i)     / #i 11 /;
$offEcho

$call.checkErrorLevel gams data.gms gdx=data lo=%GAMS.lo%

Set       i    / i1*i2 /
          err(i);
          
Parameter pInit(i) / i1 1  /
          pWant(i)
          p(i),
          q(i);
          
* By default, gdxLoad replaces existing data
p(i) = pInit(i);
gdxLoad 'data.gdx', p;
pWant('i2') = 2;

err(i) = p(i)<>pWant(i);
abort$card(err) 'Unexpected p', p, pWant;

* Now merge instead of replace
p(i) = pInit(i);
option replace=off;
gdxLoad 'data.gdx', p;
pWant('i1') = 1;
pWant('i2') = 2;

err(i) = p(i)<>pWant(i);
abort$card(err) 'Unexpected p', p, pWant;

* The default is to read filterd, now try domain check
p(i) = pInit(i);
option filtered=off;
gdxLoad 'data.gdx', p;
abort$(execError=0) 'Expected domain violation';
execError = 0;

* Now try everything that matches
* - p and q should be loaded
* - i should be ignored, since it is used as domain set
* - err should be ignored since it has a mismatch in the declaration
* Note that $onImplicitAssign avoids an error because q did not get assigned explicitly
Parameter qWant(i)     / #i 11 /;
p(i) = pInit(i);
option filtered=on;
$onImplicitAssign 
gdxLoad 'data.gdx';
err(i) = p(i)<>pWant(i);
abort$card(err) 'Unexpected p', p, pWant;
err(i) = q(i)<>qWant(i);
abort$card(err) 'Unexpected q', q, qWant;