| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // 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 |
| |