GAMS [ Home | Support | Sales | Solvers | Documentation | Model Libraries | Search | Contact Us ]

eval03.gms : test constant compile time evaluation functions


Functions:

abs   ceil  cos  exp  fact floor  frac   IfThen log   log2
log10 max   mod  mod  PI   power  round  sign   sin   sleep
sqr   sqrt  tan  trunc

 * ** ** Additional tests are welcome ** ** **

Contributor: Alex

Small Model of Type: GAMS
$title test constant compile time evaluation functions (EVAL03,SEQ=462) $ontext Functions: abs ceil cos exp fact floor frac IfThen log log2 log10 max mod mod PI power round sign sin sleep sqr sqrt tan trunc ** ** ** Additional tests are welcome ** ** ** Contributor: Alex $offtext $ondollar set f / abs,ceil,cos,exp,fact,floor,frac,ifthen,log,log2,log10,max,min,mod, power,round,sign,sin,sqr,sqrt,tan,trunc / c / 1*15 / v / calculated, expected /; $onundf table res(f,c,v) calculated and expected function values calculated expected abs.1 [abs(-inf)] inf abs.2 [abs(+inf)] inf abs.3 [abs(undf)] undf ceil.1 [ceil(-inf)] -inf ceil.2 [ceil(+inf)] inf ceil.3 [ceil(undf)] undf ceil.4 [ceil(0)] 0 ceil.5 [ceil(1.5)] 2 ceil.6 [ceil(-1.5)] -1 cos.1 [cos(-inf)] undf cos.2 [cos(+inf)] undf cos.3 [cos(undf)] undf exp.1 [exp(-inf)] 0 exp.2 [exp(+inf)] inf exp.3 [exp(undf)] undf exp.4 [exp(0)] 1 fact.1 [fact(-inf)] undf fact.2 [fact(+inf)] undf fact.3 [fact(undf)] undf fact.4 [fact(0)] 1 fact.5 [fact(21)] undf floor.1 [floor(-inf)] -inf floor.2 [floor(+inf)] inf floor.3 [floor(undf)] undf floor.4 [floor(0)] 0 floor.5 [floor(1.5)] 1 floor.6 [floor(-1.5)] -2 frac.1 [frac(-inf)] undf frac.2 [frac(+inf)] undf frac.3 [frac(undf)] undf ifthen.1 [ifthen(-inf,1,2)] 1 ifthen.2 [ifthen(+inf,1,2)] 1 ifthen.3 [ifthen(undf,1,2)] undf ifthen.4 [ifthen(0,undf,4)] 4 ifthen.5 [ifthen(1,undf,5)] undf ifthen.6 [ifthen(0,6,undf)] undf ifthen.7 [ifthen(1,7,undf)] 7 $ifthen SIG==%system.buildcode% * SIG gets log(-X) wrong! log.1 [undf] undf log.2 [undf] undf $else log.1 [log(-inf)] undf log.2 [log(-1)] undf $endif log.3 [log(0)] -inf log.4 [log(+inf)] inf log.5 [log(undf)] undf $ifthen SIG==%system.buildcode% * SIG gets log2(-X) wrong! log2.1 [undf] undf log2.2 [undf] undf $else log2.1 [log2(-inf)] undf log2.2 [log2(-1)] undf $endif log2.3 [log2(0)] -inf log2.4 [log2(+inf)] inf log2.5 [log2(undf)] undf $ifthen SIG==%system.buildcode% * SIG gets log10(-X) wrong! log10.1 [undf] undf log10.2 [undf] undf $else log10.1 [log10(-inf)] undf log10.2 [log10(-1)] undf $endif log10.3 [log10(0)] -inf log10.4 [log10(+inf)] inf log10.5 [log10(undf)] undf max.1 [max(-inf,inf)] inf max.2 [max(undf,0)] undf max.3 [max(0,undf)] undf max.4 [max(-1,1)] 1 max.5 [max(-inf,1)] 1 max.6 [max(inf,1)] inf max.7 [max(-inf,1,inf)] inf min.1 [min(-inf,inf)] -inf min.2 [min(undf,0)] undf min.3 [min(0,undf)] undf min.4 [min(-1,1)] -1 min.5 [min(-inf,1)] -inf min.6 [min(inf,1)] 1 min.7 [min(inf,1,5)] 1 mod.1 [mod(-inf,inf)] undf mod.2 [mod(undf,0)] undf mod.3 [mod(0,undf)] undf mod.4 [mod(-1,1)] 0 mod.5 [mod(-inf,1)] undf mod.6 [mod(inf,1)] undf power.1 [power(-inf,inf)] inf power.2 [power(undf,0)] undf power.3 [power(0,undf)] undf power.4 [power(-1,1)] -1 power.5 [power(-inf,2)] inf power.6 [power(inf,2)] inf power.7 [power(3,1.5)] undf power.8 [power(10,0)] 1 power.9 [power(-10,0)] 1 power.10 [power(0,0)] 1 power.11 [power(0.5,inf)] 0 power.12 [power(-0.5,inf)] 0 power.13 [power(0.5,-1)] 2 power.14 [power(-inf,3)] -inf power.15 [power(0,-inf)] inf round.1 [round(-inf,inf)] undf round.2 [round(undf,0)] undf round.3 [round(55.75,inf)] undf round.4 [round(inf,2)] inf round.5 [round(-inf,-10)] -inf * the 55.55 caused problems, isolated in eval07 * round.6 [round(55.55,1)] 55.5 round.6 [round(55.75,1)] 55.8 round.7 [round(55.75,0)] 56 round.8 [round(55.75,-1)] 60 round.9 [round(55.75,-2)] 100 round.10 [round(55.75,-3)] 0 sign.1 [sign(-inf)] -1 sign.2 [sign(+inf)] 1 sign.3 [sign(undf)] undf sign.4 [sign(0)] 0 sin.1 [sin(-inf)] undf sin.2 [sin(+inf)] undf sin.3 [sin(undf)] undf sin.4 [sin(0)] 0 sqr.1 [sqr(-inf)] inf sqr.2 [sqr(+inf)] inf sqr.3 [sqr(undf)] undf sqr.4 [sqr(0)] 0 sqrt.1 [sqrt(-inf)] undf sqrt.2 [sqrt(+inf)] inf sqrt.3 [sqrt(undf)] undf sqrt.4 [sqrt(0)] 0 sqrt.5 [sqrt(-1)] undf tan.1 [tan(-inf)] undf tan.2 [tan(+inf)] undf tan.3 [tan(undf)] undf tan.4 [tan(0)] 0 trunc.1 [trunc(-inf)] -inf trunc.2 [trunc(+inf)] inf trunc.3 [trunc(undf)] undf trunc.4 [trunc(55.55)] 55 trunc.5 [trunc(-55.55)] -55 Parameters diff(f,c,v) differences; set fc(f,c) differences; fc(f,c) = res(f,c,'calculated') <> res(f,c,'expected'); diff(fc,v) = res(fc,v); display diff; abort$card(diff) 'results do not match';