blob: 4cc7931f028f68b7b4c7c22b477a89bf8521668b [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v1.0 //
// which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_LGenBase_PerformanceTests
//
// Purpose:
// This module provides functions for testing LGenBase
//
// Module depends on:
// -
//
// Current Owner:
// Laszlo Skumat (ELSZSKU)
//
// Last Review Date:
// 2008-09-11
//
// Detailed Comments:
// Provide functions to test LGenBase
//
//
///////////////////////////////////////////////////////////////
module EPTF_LGenBase_PerformanceTests
{
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_LGenBase_Definitions all;
import from EPTF_CLL_LGenBaseStats_Definitions all;
import from EPTF_CLL_LGenBaseStats_Functions all;
#ifdef R3
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_LGenBase_ConfigFunctions all;
import from EPTF_CLL_LGenBase_TrafficFunctions all;
import from EPTF_CLL_LGenBase_EventHandlingFunctions all;
import from EPTF_CLL_LGenBase_StepFunctions all;
import from EPTF_CLL_HashMapStr2Int_Functions all;
import from EPTF_CLL_HashMapInt2Int_Functions all;
#endif
#ifdef R2
import from EPTF_CLL_Definitions all
import from EPTF_CLL_LGenBase_Functions all;
#endif
modulepar integer tsp_LGenBasePerformTest_numEntities := 1000;
modulepar integer tsp_LGenBasePerformTest_numInputs := 1000;
modulepar integer tsp_LGenBasePerformTest_numCalls := 10000;
modulepar integer tsp_LGenBasePerformTest_numTrial := 10;
function f_setVerdictFromBool(in boolean pl_result)
{
if(pl_result==true) {
setverdict(pass)
} else {
setverdict(fail)
}
}
type component EPTF_LGenBasePerformTest_CT extends EPTF_LGenBaseStats_CT{
var integer v_LGenBasePerformTest_nrCalls := 0;
var integer v_LGenBasePerformTest_myBehav := -1;
var EPTF_BooleanList v_LGenBasePerformTest_calls := {};
var boolean v_LGenBasePerformTest_finished := false;
var float v_LGenBasePerformTest_randomCumulated := 0.0;
var integer v_LGenBasePerformTest_randomCalls := 0;
var integer v_dummyInt
var boolean v_dummyBool
}
function f_EPTF_LGenBasePerformTest_msgStep (EPTF_LGenBase_TestStepArgs pl_ptr)
runs on EPTF_LGenBasePerformTest_CT {
v_LGenBasePerformTest_nrCalls := v_LGenBasePerformTest_nrCalls + 1;
//f_EPTF_LGenBase_step_trafficSuccess(pl_ptr);
}
function f_EPTF_LGenBasePerformTest_msgListener (
in EPTF_LGenBase_ReportedEventDescriptor pl_event,
in EPTF_IntegerList pl_listenerArgs)
runs on EPTF_LGenBasePerformTest_CT {
if(pl_event.event.iIdx != pl_listenerArgs[0]){
setverdict ( fail );
log(pl_event.event.iIdx," , ",pl_listenerArgs[0]);
}
v_LGenBasePerformTest_calls[pl_listenerArgs[0]] := true;
}
function f_EPTF_LGenBasePerformTest_init_CT()
runs on EPTF_LGenBasePerformTest_CT {
f_EPTF_LGenBaseStats_init("LGenBasePerformTest", "LGenBasePerformTest");
v_LGenBasePerformTest_myBehav := f_EPTF_LGenBase_declareBehaviorType("LGenBasePerformTest", -1, null, null, null);
v_dummyInt := f_EPTF_LGenBase_declareEntityType("etLGenBasePerformTest", {"LGenBasePerformTest"});
v_dummyInt := f_EPTF_LGenBase_createEntityGroup({"egLGenBasePerformTest", "etLGenBasePerformTest", tsp_LGenBasePerformTest_numEntities});
}
function f_LGenBasePerformTest_finished(in integer pl_idx)
runs on EPTF_LGenBasePerformTest_CT{
v_LGenBasePerformTest_finished := true;
}
/*
testcase tc_LGenBasePerformTest_FSM() runs on EPTF_LGenBasePerformTest_CT{
f_EPTF_LGenBasePerformTest_init_CT();
var integer vl_inputIdxF := f_EPTF_LGenBase_declareFsmEvent("LGenBasePerformTest", "send");
v_dummyInt := f_EPTF_LGenBase_declareFsmEvent("LGenBasePerformTest", "secondSent");
v_dummyInt := f_EPTF_LGenBase_declareFunction("finished",
{customFinishFunction := refers(f_LGenBasePerformTest_finished)});
var integer vl_tIdx := f_EPTF_LGenBase_declareCompactFsmTable({
name := "LGenBasePerformTestFsm",
// [0]
stateList := {"idle"},
timerList := {},
table := {
{eventToListen := {v_LGenBasePerformTest_myBehav,0,fsm},
cellRow := {
//state[0]==idle
{{{refers(f_EPTF_LGenBase_step_trafficSuccess),{}}}, omit,0}
}
}
}
}
);
var integer vl_eIdx := 0;
var integer vl_fsmCtxIdx:=f_EPTF_LGenBase_activateFsm(pl_eIdx:= vl_eIdx, pl_tIdx:= vl_tIdx, pl_sIdx:=0, pl_tcIdx:= -1)
timer T_test;
T_test.start(300.0)
var EPTF_LGenBase_ReportedEventDescriptor vl_event:=
{
event:={ bIdx:= v_LGenBasePerformTest_myBehav, iIdx:= vl_inputIdxF, target:={ vl_eIdx,vl_fsmCtxIdx}, source := omit },
reportedArgs:= {}
}
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numCalls ; vl_i := vl_i+1 )
{
f_EPTF_LGenBase_dispatchEvent(vl_event);
}
var float vl_duration := T_test.read;
T_test.stop;
log("Starts: ", tsp_LGenBasePerformTest_numCalls); //v_LGenBase_trafficCases[0].nrOfStarts);
log("time:", vl_duration);
log("CPS: ", int2float(tsp_LGenBasePerformTest_numCalls)/vl_duration);
f_EPTF_Base_cleanup_CT();
}
*/
testcase tc_LGenBasePerformTest_generic() runs on EPTF_LGenBasePerformTest_CT{
f_EPTF_LGenBasePerformTest_init_CT();
var EPTF_LGenBase_ReportableEventDescriptor vl_event;
vl_event.bIdx := v_LGenBasePerformTest_myBehav;
vl_event.target := omit;
//vl_event.source := omit;
//------------------------------------------------
//Add generic listeners
//------------------------------------------------
timer T_test;
log("number of events: ",tsp_LGenBasePerformTest_numInputs)
T_test.start(18000.0)
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numInputs ; vl_i := vl_i+1 )
{
vl_event.iIdx := vl_i;
v_dummyInt := f_EPTF_LGenBase_declareFsmEvent("LGenBasePerformTest",int2str(vl_i));
v_dummyInt := f_EPTF_LGenBase_addGenericEventListener(vl_event, {"listener",refers(f_EPTF_LGenBasePerformTest_msgListener),{vl_i}})
}
var float vl_duration := T_test.read;
log("----------initialization: ",vl_duration);
T_test.stop
//------------------------------------------------
//Sequential call
//------------------------------------------------
T_test.start(18000.0)
var EPTF_LGenBase_ReportedEventDescriptor vl_eventDispatch := {vl_event,{}}
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numInputs ; vl_i := vl_i+1 )
{
vl_eventDispatch.event.iIdx := vl_i;
//vl_eventDispatch.event.target := {vl_i, 0}
vl_eventDispatch.reportedArgs := {vl_i}
f_EPTF_LGenBase_dispatchEvent(vl_eventDispatch);
}
vl_duration := T_test.read;
T_test.stop;
log("----------duration of ",tsp_LGenBasePerformTest_numInputs," sequential calls: ",vl_duration);
var boolean vl_passed := true;
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numInputs ; vl_i := vl_i+1 )
{
if(not isvalue(v_LGenBasePerformTest_calls[vl_i])){
vl_passed := false;
}
}
f_setVerdictFromBool(vl_passed);
//------------------------------------------------
//Random calls
//------------------------------------------------
for ( var integer vl_j := 0; vl_j < tsp_LGenBasePerformTest_numTrial ; vl_j := vl_j+1 )
{
T_test.start(18000.0)
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numCalls; vl_i := vl_i+1 )
{
var integer vl_input := float2int(rnd()*int2float(tsp_LGenBasePerformTest_numInputs))
vl_eventDispatch.event.iIdx := vl_input;
//vl_eventDispatch.event.target := {vl_i, 0}
vl_eventDispatch.reportedArgs := {vl_input}
f_EPTF_LGenBase_dispatchEvent(vl_eventDispatch);
//f_EPTF_LGenBase_reportEvent4Generic(vl_eventDispatch);
}
vl_duration := T_test.read;
T_test.stop;
v_LGenBasePerformTest_randomCumulated := v_LGenBasePerformTest_randomCumulated + vl_duration;
log("----------duration of ",tsp_LGenBasePerformTest_numCalls,"random calls: ",vl_duration);
}
log("----------average of ",tsp_LGenBasePerformTest_numCalls,"random calls: ",v_LGenBasePerformTest_randomCumulated/int2float(tsp_LGenBasePerformTest_numTrial));
f_EPTF_Base_cleanup_CT();
}
/*
function f_LGenBasePerformTest_dispatch(in integer pl_fsmSize) runs on EPTF_LGenBasePerformTest_CT{
f_EPTF_LGenBasePerformTest_init_CT();
v_LGenBasePerformTest_nrCalls := 0;
var EPTF_LGenBase_CompactFsmTable vl_table := {
"table1",{"idle"},{},
{
}
}
var EPTF_LGenBase_ReportedEventDescriptorList vl_events2Report := {}
for ( var integer vl_i := 0; vl_i < pl_fsmSize ; vl_i := vl_i+1 )
{
v_dummyInt := f_EPTF_LGenBase_declareFsmEvent("LGenBasePerformTest", "send"&int2str(vl_i));
vl_table.table[vl_i].eventToListen := {v_LGenBasePerformTest_myBehav, vl_i, fsm};
vl_table.table[vl_i].cellRow := {
{{{refers(f_EPTF_LGenBasePerformTest_msgStep),{}}}, omit,0}
}
}
v_dummyInt := f_EPTF_LGenBase_declareCompactFsmTable(vl_table);
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numCalls ; vl_i := vl_i+1 )
{
vl_events2Report[vl_i] := {{v_LGenBasePerformTest_myBehav, float2int(rnd()*int2float(pl_fsmSize)),{0,0}, omit},{}}
}
v_dummyInt := f_EPTF_LGenBase_activateFsm(0, 0, 0, -1);
timer T_test;
var float vl_duration := 0.0;
T_test.start(18000.0)
for ( var integer vl_i := 0; vl_i < tsp_LGenBasePerformTest_numCalls ; vl_i := vl_i+1 )
{
f_EPTF_LGenBase_dispatchEvent(vl_events2Report[vl_i]);
//f_EPTF_LGenBase_reportEvent4Fsm(vl_events2Report[vl_i],false,vl_events2Report[vl_i].event.bIdx,vl_events2Report[vl_i].event.iIdx);
}
vl_duration := T_test.read;
T_test.stop;
log("----------FSM size: ",pl_fsmSize);
log("----------duration of ",tsp_LGenBasePerformTest_numCalls,"random calls: ",vl_duration);
log("----------CPS: ",int2float(tsp_LGenBasePerformTest_numCalls)/vl_duration);
if(v_LGenBasePerformTest_nrCalls == tsp_LGenBasePerformTest_numCalls){
setverdict ( pass );
}else{
setverdict ( fail );
}
f_EPTF_Base_cleanup_CT();
}
testcase tc_LGenBasePerformTest_dispatch() runs on EPTF_LGenBasePerformTest_CT{
f_LGenBasePerformTest_dispatch(2);
f_LGenBasePerformTest_dispatch(3);
f_LGenBasePerformTest_dispatch(4);
f_LGenBasePerformTest_dispatch(5);
f_LGenBasePerformTest_dispatch(6);
f_LGenBasePerformTest_dispatch(7);
f_LGenBasePerformTest_dispatch(8);
f_LGenBasePerformTest_dispatch(9);
f_LGenBasePerformTest_dispatch(10);
f_LGenBasePerformTest_dispatch(100);
f_LGenBasePerformTest_dispatch(1000);
}
*/
} // end of module