All variants of function calls

This test case it part of the test suite proposed for new devices.

Test case ID: R0085
Language: ST

Code:
tests2/t0085.st
(* All types of function calls *)

FUNCTION FR0085 : INT
VAR_INPUT
    I1 : INT;
    I2 : INT;
END_VAR
VAR_IN_OUT
    IO1 : INT;
END_VAR
VAR_OUTPUT
    O1 : INT;
END_VAR
   FR0085 := I1 + I2;
   O1 :=  I1 - I2;
   IO1 := IO1 + 1;
END_FUNCTION


PROGRAM R0085
VAR
    G0,G1,G2 : REAL;
    GE0,GE1,GE2 : INT;
    NG1, NG2 : REAL;
    B1,B2 : BOOL;
    C1,C2,C3,C4,C5,C6: INT;
END_VAR
   // generic non extensible  (DIV)
   G0 := 60.0/3.0; // operator
   G1 := DIV(REAL#30.0,3.0); // informal    R1 = 30.0/3 = 10.0
   G2 := DIV(IN1:= REAL#20.0, IN2:=G1); // formal1  R2 = 20/10 = 2.0
   G2 := DIV(IN1:= G1, IN2:=G2+8.0); 
    
   // generic extensible  (ADD)
   GE0 := SINT#7 + INT#400; // operator  GE0 = 407
   GE1 := ADD(SINT#2,INT#400,-5); // informal  GE1 = 397
 //  GE2 := ADD(IN1:=SINT#2,IN2:= INT#400,IN4:=10); // this is prohibited    
   GE2 := ADD(IN1 := 2, IN2 := 400, IN3:=10, EN:=TRUE); // formal
   
   // non generic (COS)
   NG1 := COS(0.2);
   NG2 := COS(IN:=3.1416,ENO=>B1);
   
   // custom
   C1 := FR0085(30,20,C2,C3);
   C4 := FR0085(I1:=30, I2:=20, IO1:= C5, O1=>C6);

_GEB_ASSERT_(B1 = 1);
_GEB_ASSERT_EQFLOAT_(G0 , 20.0);
_GEB_ASSERT_EQFLOAT_(G1 , 10.0);
_GEB_ASSERT_EQFLOAT_(G2 ,1.0);
_GEB_ASSERT_(GE0 = 407);
_GEB_ASSERT_(GE1 = 397);
_GEB_ASSERT_(GE2 = 412);
_GEB_ASSERT_EQFLOAT_(NG1 , 0.98007);
_GEB_ASSERT_(NG2 = -1.0);

   
END_PROGRAM