Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

TestCaseDummyDataItemControlBlock_1.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCaseDummyDataItemControlBlock_1.cpp 00005 // 00006 // Version 1.0 00007 // Date 30.10.03 (Version 1.0) 00008 // Author R. Totaro 00009 // 00010 // Change Record: 00011 00012 #include <math.h> 00013 #include <float.h> 00014 00015 #include "../GeneralInclude/CompilerSwitches.h" 00016 #include "../GeneralInclude/Constants.h" 00017 #include "../GeneralInclude/ClassId.h" 00018 #include "../Data/DC_DataItem.h" 00019 #include "../Data/ControlBlock.h" 00020 #include "../Data/DC_DummyDataItemControlBlock.h" 00021 #include "TestCaseDummyDataItemControlBlock_1.h" 00022 00023 TestCaseDummyDataItemControlBlock_1::TestCaseDummyDataItemControlBlock_1(void) : 00024 TestCaseWithEvtCheck(ID_DUMMYDATAITEMCONTROLBLOCK*10+1,"TestCaseDummyDataItemControlBlock_1") { 00025 return; 00026 } 00027 00028 void TestCaseDummyDataItemControlBlock_1::runTestCase(void) { 00029 const unsigned int nEvt =getNumberOfEvents(); 00030 const unsigned int numStates =1; 00031 const unsigned int numInputs =3; 00032 const unsigned int numOutputs =2; 00033 const unsigned int numParameters=2; 00034 const TD_Float testInputs[] ={(TD_Float)0.3,(TD_Float)0.04,(TD_Float)0.005}; 00035 DC_DummyDataItemControlBlock *pDCB =new DC_DummyDataItemControlBlock; 00036 TD_Float inputs[numInputs]; 00037 TD_Float outputs[numOutputs]; 00038 DC_DataItem *pInputs[numInputs]; 00039 DC_DataItem *pOutputs[numOutputs]; 00040 00041 // Create and initialize the data items 00042 for (int i=0;i<numInputs;i++) 00043 pInputs[i]=new DC_DataItem(&inputs[i]); 00044 00045 for (int i=0;i<numOutputs;i++) 00046 pOutputs[i]=new DC_DataItem(&outputs[i]); 00047 00048 // Verify the correctness of the class identifier 00049 if (pDCB->getClassId()!=ID_DUMMYDATAITEMCONTROLBLOCK) { 00050 setTestResult(TEST_FAILURE,"Wrong class identifier"); 00051 return; 00052 } 00053 00054 // Verify that the numbers of inputs, outputs, states and parameters are correct 00055 if (pDCB->getNumberOfInputs()!=numInputs) { 00056 setTestResult(TEST_FAILURE,"Wrong number of inputs"); 00057 return; 00058 } 00059 00060 if (pDCB->getNumberOfOutputs()!=numOutputs) { 00061 setTestResult(TEST_FAILURE,"Wrong number of outputs"); 00062 return; 00063 } 00064 00065 if (pDCB->getNumberOfStates()!=numStates) { 00066 setTestResult(TEST_FAILURE,"Wrong number of states"); 00067 return; 00068 } 00069 00070 if (pDCB->getNumberOfParameters()!=numParameters) { 00071 setTestResult(TEST_FAILURE,"Wrong number of parameters"); 00072 return; 00073 } 00074 00075 // Link inputs and outputs and verify its configuration status 00076 for (unsigned int i=0;i<numInputs;i++) { 00077 if (pDCB->isObjectConfigured()) { 00078 setTestResult(TEST_FAILURE,"Wrong configuration status"); 00079 return; 00080 } 00081 00082 pDCB->setInputLink(i,pInputs[i]); 00083 } 00084 00085 for (unsigned int i=0;i<numOutputs;i++) { 00086 if (pDCB->isObjectConfigured()) { 00087 setTestResult(TEST_FAILURE,"Wrong configuration status"); 00088 return; 00089 } 00090 00091 pDCB->setOutputLink(i,pOutputs[i]); 00092 } 00093 00094 if (!pDCB->isObjectConfigured()) { 00095 setTestResult(TEST_FAILURE,"Wrong configuration status"); 00096 return; 00097 } 00098 00099 // Reset the control block 00100 pDCB->reset(); 00101 00102 // Verify that the default state was correctly set 00103 // Don't forget to take into account rounding errors: 00104 // this is not a problem on a Windows PC, but it might 00105 // be on other platforms. 00106 if (fabsf((float)(pDCB->getState(0)-(TD_Float)1.0))>=FLT_EPSILON) { 00107 setTestResult(TEST_FAILURE,"Wrong initial state"); 00108 return; 00109 } 00110 00111 // Set the parameters and verify their values 00112 for (int i=0;i<numParameters;i++) { 00113 pDCB->setParameter(i,(TD_Float)2.0); 00114 00115 if (fabsf((float)(pDCB->getParameter(i)-(TD_Float)2.0))>=FLT_EPSILON) { 00116 setTestResult(TEST_FAILURE,"Wrong parameter value"); 00117 return; 00118 } 00119 } 00120 00121 // Now we propagate the inputs and verify that the state 00122 // and outputs are properly updated 00123 for (int i=0;i<numInputs;i++) 00124 inputs[i]=testInputs[i]; 00125 00126 pDCB->propagate(); 00127 00128 if (fabsf((float)(pDCB->getState(0)-(TD_Float)2.345))>=FLT_EPSILON) { 00129 setTestResult(TEST_FAILURE,"Error in state update"); 00130 return; 00131 } 00132 00133 if (fabsf((float)(outputs[0]-(TD_Float)2.345))>=FLT_EPSILON || 00134 fabsf((float)((outputs[1]-(TD_Float)4.690)))>=FLT_EPSILON) { 00135 setTestResult(TEST_FAILURE,"Error in output update"); 00136 return; 00137 } 00138 00139 // Set the state and verify its value 00140 pDCB->setState(0,(TD_Float)4.0); 00141 00142 if (fabsf((float)(pDCB->getState(0)-(TD_Float)4.0))>=FLT_EPSILON) { 00143 setTestResult(TEST_FAILURE,"Wrong state value"); 00144 return; 00145 } 00146 00147 if (isNonNominalCheckAllowed()) { 00148 // Try to link input and output with an out-of-range 00149 // index and verify that the correct event is generated 00150 pDCB->setInputLink(numInputs,pInputs[0]); 00151 if (!verifyLatestEvent(nEvt+1,EVT_ILLEGAL_CB)) 00152 return; 00153 00154 pDCB->setOutputLink(numOutputs,pOutputs[0]); 00155 if (!verifyLatestEvent(nEvt+2,EVT_ILLEGAL_CB)) 00156 return; 00157 00158 // Try to set state and parameter values with an out-of-range 00159 // index and verify that the correct event is generated 00160 pDCB->setState(numStates,(TD_Float)0.0); 00161 if (!verifyLatestEvent(nEvt+3,EVT_ILLEGAL_CB)) 00162 return; 00163 00164 pDCB->setParameter(numParameters,(TD_Float)0.0); 00165 if (!verifyLatestEvent(nEvt+4,EVT_ILLEGAL_CB)) 00166 return; 00167 } 00168 00169 setTestResult(TEST_SUCCESS,"Test Successful"); 00170 return; 00171 }
Copyright 2003 P&P Software GmbH - All Rights Reserved