/***************************************************
 ** @author   STF 487
 ** @version  0.0.1
 ** @purpose  1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters
 ** @verdict  pass accept, ttcn3verdict:pass
 ***************************************************/

// The following requirement is tested:
// Templates parameters can be defined for templates, functions, altsteps, and test cases.
// To enable a parameterized object to accept templates or matching symbols as actual parameters,
// the extra keyword template shall be added before the type field of the corresponding formal
// parameter. This makes the parameter a template parameter and in effect extends the allowed actual
// parameters for the associated type to include the appropriate set of matching attributes (see
// annex B) as well as the normal set of values.
// Formal template parameters may be in, inout or out parameters. The default for formal template
// parameters is in parameterization.

module Sem_05040102_parameters_of_kind_template_005 {

	type component GeneralComp {
	}

    function f(template integer p_int1, in template integer p_int2, out template integer p_int3, inout template integer p_int4){
        setverdict(pass);
    }

	testcase TC_Sem_05040102_parameters_of_kind_template_005() runs on GeneralComp {
        var template integer v_int1, v_int2 := ?;
        f((1..3), 2, v_int1, v_int2);
	}

	control{
		execute(TC_Sem_05040102_parameters_of_kind_template_005());
	}
}
