Function/FB calls : persistence

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

Test case ID: R0101
Language: ST

Code:
tests2/t0101.st
// should run 2 times

FUNCTION F1_R0101 : INT  (* returns X+Y+2 *)
    VAR_INPUT
        X : INT ;
        Y : INT ;
    END_VAR

    F1_R0101 := X + Y +2;
END_FUNCTION

FUNCTION_BLOCK FB1_R0101 
    VAR_INPUT
        X : INT ;
        Y : INT := 30 ;
    END_VAR
    VAR_TEMP
         T1 : INT;  T2 : INT := 3;  (* these are kept fixed at 1,4 *)
    END_VAR
    VAR
         V1 : INT;  V2 : INT := 5; (* these increment by one in each call, from (0,5) *)
    END_VAR
    VAR_OUTPUT
         O1,O2,O3,O4 : INT;
    END_VAR
    (* increment all vars *)
    T1 := T1 + 1;
    T2 := T2 + 1;
    V1 := V1 + 1;
    V2 := V2 + 1;
    O4 := O1; // value of O1 in previous call
    O1 := X + Y + 2; // sum of inputs (+2)
    O2 := T1 + T2 ; // always 5
    O3 := V1 + V2 ; // 7 , 9 , 11
END_FUNCTION_BLOCK

PROGRAM R0101
    VAR
        I1,I2,I3,I4 : INT;
        f1 : FB1_R0101;
    END_VAR
    VAR_EXTERNAL 
        _T_PARAMS : TEST_PARAMS;
    END_VAR
    
    I2 := F1_R0101(X := 100, Y:= 50); // 152
    I4     := F1_R0101(100, 70); // 172
    

    f1( X := 1000 , Y := 300);
    // should Y persists its value ? norm is not clear    ; we do persist it
    f1( X := 5000);    
    (* 
     after one run we should have : 
           Test.f1.O1    :    5302
        Test.f1.O2    :    5
        Test.f1.O3    :    9
        Test.f1.O4    :    1302
     *)

 IF _T_PARAMS.cycle = _T_PARAMS.timestorun THEN  // last iteration 
_GEB_ASSERT_(I2 = 152);
//_GEB_ASSERT_(I3 = 62);
_GEB_ASSERT_(I4 = 172);
_GEB_ASSERT_(f1.O1=5302);
_GEB_MSG_(INT_TO_STRING(f1.O1));
_GEB_ASSERT_(f1.O2=5);
_GEB_ASSERT_(f1.O3=13);
_GEB_ASSERT_(f1.O4=1302);
_GEB_ASSERT_(f1.X=5000);
_GEB_ASSERT_(f1.Y=300);
END_IF;

END_PROGRAM