/***************************************************
 ** @author   STF 409
 ** @version  0.0.1
 ** @purpose  1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them
 ** @verdict  pass reject
 ***************************************************/
module NegSem_1602_toplevel_004 {

    type record MessageType {
        integer  		field1,
        charstring  	field2
    }

    type port loopbackPort message {
        inout MessageType
    }

    type component GeneralComp {
        port loopbackPort messagePort
    }

    function f_test(inout integer p_int) return integer {
        //use of inout parameter within a function called at altstep variable initialization
        return p_int+1;
    }


    altstep AltSet1() runs on GeneralComp {
        var integer v_LocalVar1 := 1;
        var integer v_LocalVar2 := f_test(v_LocalVar1); // call of functions with inout params forbidden by 16.1.4 j) + 16.2.b)

        [] messagePort.receive {
            setverdict(pass);
        }

    }

    testcase TC_NegSem_1602_toplevel_004 () runs on GeneralComp {
        var MessageType v_testMessage;
        v_testMessage:=  {
            field1 := 1,
            field2 := "test string"
        }

        messagePort.send(v_testMessage);

        AltSet1();

    }

    control{

        execute(TC_NegSem_1602_toplevel_004());

    }

}
