6 bool defaultConstructor =
true;
9 defaultConstructor =
false;
11 defaultConstructor =
false;
13 defaultConstructor =
false;
15 defaultConstructor =
false;
18 int numStateFields = 2;
22 testState.
AddField(
"simulationScalar",
's',1,8,
"simunit");
23 testState.
AddField(
"gridScalar",
'g',1,8,
"gridunit");
24 testState.
AddField(
"nodeScalar",
'n',1,8,
"nodeunit");
25 testState.
AddField(
"nodeVector",
'n',3,8,
"nodeunit");
27 std::vector<std::string> myStateFieldNames(numStateFields);
28 myStateFieldNames[0] =
"nodeScalar";
29 myStateFieldNames[1] =
"nodeVector";
31 if(testState.
NumMeta() != numFields)
36 bool statePrepare =
true;
38 if(testState.
NumData() != numFields )
40 for(
int iField = 0;iField < numFields;iField++)
44 bool setFieldBuffer =
true;
45 std::vector<double> simScalarVec(1,-107.0);
47 double *bufPtr = &simScalarVec[0];
49 &simScalarField(testState.
Field(
"simulationScalar"));
50 double *simScalarData = simScalarField.
Data<
double>();
51 std::vector<double> nodeScalarVec(1,0.0);
54 &nodeScalarField(testState.
Field(
"nodeScalar"));
55 std::vector<double> nodeVectorVec(3,1.0);
58 &nodeVectorField(testState.
Field(
"nodeVector"));
60 double *nodeScalarPtr = &nodeScalarVec[0];
61 double *nodeVectorPtr = &nodeVectorVec[0];
62 double *stateScalarBuf = nodeScalarField.
Data<
double>();
63 double *stateVectorBuf = nodeVectorField.Data<
double>();
64 if( simScalarData != bufPtr ||
65 nodeScalarPtr != stateScalarBuf ||
66 nodeVectorPtr != stateVectorBuf)
67 setFieldBuffer =
false;
71 bool setStateFieldsByID =
true;
72 std::vector<int> stateFieldIDs(numStateFields,2);
75 if(numAccepted != numStateFields){
76 std::cout <<
"Number of fields accepted != number of fields" 78 setStateFieldsByID =
false;
82 if(stateFieldNames != myStateFieldNames){
83 std::cout <<
"State field names don't match." << std::endl;
84 setStateFieldsByID =
false;
85 std::cout <<
"State names: " << std::endl;
86 std::vector<std::string>::iterator nameIt = stateFieldNames.begin();
87 std::vector<std::string>::iterator nameIt2 = myStateFieldNames.begin();
88 while(nameIt != stateFieldNames.end())
89 std::cout <<
"'" << *nameIt++ <<
"' != '" 90 << *nameIt2++ <<
"'" << std::endl;
94 std::cout <<
"Number of fields not right." << std::endl;
95 setStateFieldsByID =
false;
98 std::cout <<
"Number of state variables not right." << std::endl;
99 setStateFieldsByID =
false;
101 if(stateFieldNames.size() != numStateFields){
102 std::cout <<
"Number of state field names unright." << std::endl;
103 setStateFieldsByID =
false;
106 bool getStateFieldData =
true;
107 bool getStateDataByName =
true;
111 if(stateScalarFieldData != nodeScalarPtr)
112 getStateFieldData =
false;
113 if(stateVectorFieldData != nodeVectorPtr)
114 getStateFieldData =
false;
115 if(stateVectorFieldData2 != nodeVectorPtr)
116 getStateDataByName =
false;
118 bool setStateFieldsByName =
true;
120 if(numAccepted != numStateFields)
121 setStateFieldsByName =
false;
125 if(stateScalarFieldData != nodeScalarPtr)
126 setStateFieldsByName =
false;
127 if(stateVectorFieldData != nodeVectorPtr)
128 setStateFieldsByName =
false;
130 setStateFieldsByName =
false;
132 setStateFieldsByName =
false;
133 if(stateFieldNames.size() != numStateFields)
134 setStateFieldsByName =
false;
135 if(stateFieldNames != myStateFieldNames)
136 setStateFieldsByName =
false;
139 bool setStateFieldsByList =
true;
140 std::string nameList(
"nodeScalar nodeVector");
142 if(numAccepted != numStateFields)
143 setStateFieldsByList =
false;
148 if(stateVectorFieldData2 != nodeVectorPtr)
149 getStateDataByName =
false;
150 if(stateScalarFieldData != nodeScalarPtr)
151 setStateFieldsByList =
false;
152 if(stateVectorFieldData != nodeVectorPtr)
153 getStateFieldData =
false;
155 setStateFieldsByList =
false;
157 setStateFieldsByList =
false;
158 if(stateFieldNames.size() != numStateFields)
159 setStateFieldsByList =
false;
160 if(stateFieldNames != myStateFieldNames)
161 setStateFieldsByList =
false;
163 serialUnitResults.
UpdateResult(
"State:DefaultConstructor",defaultConstructor);
164 serialUnitResults.
UpdateResult(
"State:AddField",addField);
165 serialUnitResults.
UpdateResult(
"State:Prepare",statePrepare);
166 serialUnitResults.
UpdateResult(
"State:SetFieldBuffer",setFieldBuffer);
167 serialUnitResults.
UpdateResult(
"State:SetStateFieldIDs",setStateFieldsByID);
168 serialUnitResults.
UpdateResult(
"State:SetStateFieldNames",setStateFieldsByName);
169 serialUnitResults.
UpdateResult(
"State:SetStateFieldList",setStateFieldsByList);
170 serialUnitResults.
UpdateResult(
"State:GetStateDataByID",getStateFieldData);
171 serialUnitResults.
UpdateResult(
"State:GetStateDataByName",getStateDataByName);
182 StateType testState1;
183 StateType testState2;
184 testState1.
AddField(
"b1",
'n',1,8,
"simunit");
185 testState1.AddField(
"b2",
'n',1,8,
"simunit");
186 testState1.AddField(
"b3",
'n',1,8,
"simunit");
187 testState1.AddField(
"b4",
'n',3,8,
"simunit");
188 testState2.AddField(
"b1",
'n',1,8,
"simunit");
189 testState2.AddField(
"b2",
'n',1,8,
"simunit");
190 testState2.AddField(
"b3",
'n',1,8,
"simunit");
191 testState2.AddField(
"b4",
'n',3,8,
"simunit");
192 testState1.Prepare();
193 testState2.Prepare();
196 std::vector<double> buffer10(2,0);
197 std::vector<double> buffer11(2,1);
198 std::vector<double> buffer12(2,2);
199 std::vector<double> vector1(6,32);
200 for(
int ivec = 3;ivec < 6;ivec++)
202 std::vector<double> buffer20(2,4);
203 std::vector<double> buffer21(2,8);
204 std::vector<double> buffer22(2,16);
205 std::vector<double> vector2(6,128);
206 for(
int ivec = 3;ivec < 6;ivec++)
209 testState1.SetFieldBuffer(
"b1",buffer10);
210 testState1.SetFieldBuffer(
"b2",buffer11);
211 testState1.SetFieldBuffer(
"b3",buffer12);
212 testState1.SetFieldBuffer(
"b4",vector1);
213 testState2.SetFieldBuffer(
"b1",buffer20);
214 testState2.SetFieldBuffer(
"b2",buffer21);
215 testState2.SetFieldBuffer(
"b3",buffer22);
216 testState2.SetFieldBuffer(
"b4",vector2);
220 std::vector<int> stateFieldIndices(4,0);
221 stateFieldIndices[1] = 1;
222 stateFieldIndices[2] = 2;
223 stateFieldIndices[3] = 3;
224 testState1.SetStateFields(stateFieldIndices);
225 testState2.SetStateFields(stateFieldIndices);
228 bool axpy_works =
true;
229 AXPY(1.0,testState1,testState2);
230 if(buffer20[0] != 4 || buffer20[1] != 4 ||
231 buffer21[0] != 9 || buffer21[1] != 9 ||
232 buffer22[0] != 18 || buffer22[1] != 18 ||
233 vector2[0] != 160 || vector2[1] != 160 ||
234 vector2[2] != 160 || vector2[3] != 320 ||
235 vector2[4] != 320 || vector2[5] != 320)
238 bool zero_works =
true;
240 if(buffer20[0] != 0 || buffer20[1] != 0 ||
241 buffer21[0] != 0 || buffer21[1] != 0 ||
242 buffer22[0] != 0 || buffer22[1] != 0 ||
243 vector2[0] != 0 || vector2[1] != 0 ||
244 vector2[2] != 0 || vector2[3] != 0 ||
245 vector2[4] != 0 || vector2[5] != 0)
248 bool assignment_works =
false;
249 Assign(testState1,testState2);
255 double *b1Buf = testState2.Field(
"b1").Data<
double>();
256 double *b2Buf = testState2.Field(
"b2").Data<
double>();
257 double *b3Buf = testState2.Field(
"b3").Data<
double>();
258 double *b4Buf = testState2.Field(
"b4").Data<
double>();
259 buffer20.assign(b1Buf,b1Buf+2);
260 buffer21.assign(b2Buf,b2Buf+2);
261 buffer22.assign(b3Buf,b3Buf+2);
262 vector2.assign(b4Buf,b4Buf+6);
263 if(buffer20 == buffer10 &&
264 buffer21 == buffer11 &&
265 buffer22 == buffer12 &&
267 assignment_works =
true;
270 bool scalarMultiply_works =
false;
271 StateType testState3(2.0*testState1);
272 b1Buf = testState3.Field(
"b1").Data<
double>();
273 b2Buf = testState3.Field(
"b2").Data<
double>();
274 b3Buf = testState3.Field(
"b3").Data<
double>();
275 b4Buf = testState3.Field(
"b4").Data<
double>();
276 buffer20.assign(b1Buf,b1Buf+2);
277 buffer21.assign(b2Buf,b2Buf+2);
278 buffer22.assign(b3Buf,b3Buf+2);
279 vector2.assign(b4Buf,b4Buf+6);
280 if(buffer20[0] == 2.0*buffer10[0] &&
281 buffer20[1] == 2.0*buffer10[1] &&
282 buffer21[0] == 2.0*buffer11[0] &&
283 buffer21[1] == 2.0*buffer11[1] &&
284 buffer22[0] == 2.0*buffer12[0] &&
285 buffer22[1] == 2.0*buffer12[1] &&
286 vector2[0] == 2.0*vector1[0] &&
287 vector2[1] == 2.0*vector1[1] &&
288 vector2[2] == 2.0*vector1[2] &&
289 vector2[3] == 2.0*vector1[3] &&
290 vector2[4] == 2.0*vector1[4] &&
291 vector2[5] == 2.0*vector1[5])
292 scalarMultiply_works =
true;
294 bool sum_works =
false;
295 StateType testState4(
Sum(testState3,testState1));
296 b1Buf = testState4.Field(
"b1").Data<
double>();
297 b2Buf = testState4.Field(
"b2").Data<
double>();
298 b3Buf = testState4.Field(
"b3").Data<
double>();
299 b4Buf = testState4.Field(
"b4").Data<
double>();
300 buffer20.assign(b1Buf,b1Buf+2);
301 buffer21.assign(b2Buf,b2Buf+2);
302 buffer22.assign(b3Buf,b3Buf+2);
303 vector2.assign(b4Buf,b4Buf+6);
304 if(buffer20[0] == 3.0*buffer10[0] &&
305 buffer20[1] == 3.0*buffer10[1] &&
306 buffer21[0] == 3.0*buffer11[0] &&
307 buffer21[1] == 3.0*buffer11[1] &&
308 buffer22[0] == 3.0*buffer12[0] &&
309 buffer22[1] == 3.0*buffer12[1] &&
310 vector2[0] == 3.0*vector1[0] &&
311 vector2[1] == 3.0*vector1[1] &&
312 vector2[2] == 3.0*vector1[2] &&
313 vector2[3] == 3.0*vector1[3] &&
314 vector2[4] == 3.0*vector1[4] &&
315 vector2[5] == 3.0*vector1[5])
319 bool difference_works =
false;
320 StateType testState5(
Difference(testState3,testState4));
321 b1Buf = testState5.Field(
"b1").Data<
double>();
322 b2Buf = testState5.Field(
"b2").Data<
double>();
323 b3Buf = testState5.Field(
"b3").Data<
double>();
324 b4Buf = testState5.Field(
"b4").Data<
double>();
325 buffer20.assign(b1Buf,b1Buf+2);
326 buffer21.assign(b2Buf,b2Buf+2);
327 buffer22.assign(b3Buf,b3Buf+2);
328 vector2.assign(b4Buf,b4Buf+6);
329 if(buffer20[0] == buffer10[0] &&
330 buffer20[1] == buffer10[1] &&
331 buffer21[0] == buffer11[0] &&
332 buffer21[1] == buffer11[1] &&
333 buffer22[0] == buffer12[0] &&
334 buffer22[1] == buffer12[1] &&
335 vector2[0] == vector1[0] &&
336 vector2[1] == vector1[1] &&
337 vector2[2] == vector1[2] &&
338 vector2[3] == vector1[3] &&
339 vector2[4] == vector1[4] &&
340 vector2[5] == vector1[5])
341 difference_works =
true;
343 serialUnitResults.
UpdateResult(
"State:AXPY",axpy_works);
344 serialUnitResults.
UpdateResult(
"State:Zero",zero_works);
345 serialUnitResults.
UpdateResult(
"State:Assignment",assignment_works);
346 serialUnitResults.
UpdateResult(
"State:ScalarMultiply",scalarMultiply_works);
348 serialUnitResults.
UpdateResult(
"State:Difference",difference_works);
361 bool testFieldHandles =
true;
363 StateType testState1;
364 StateType testState2;
366 testState1.
AddField(
"b1",
'n',1,8,
"simunit");
367 testState1.AddField(
"b2",
'n',2,8,
"simunit");
368 testState1.AddField(
"b3",
'n',3,8,
"simunit");
369 testState1.AddField(
"b4",
'n',4,8,
"simunit");
371 if(testState1.InitializeFieldHandles()){
372 std::cout <<
"InitializeFieldHandles failed." << std::endl;
373 testFieldHandles =
false;
376 testState1.Create(100,0);
378 int b1Handle = testState1.GetFieldHandle(
"b1");
381 testFieldHandles =
false;
383 testFieldHandles =
false;
385 serialUnitResults.
UpdateResult(
"State:GetFieldHandle",testFieldHandles);
387 int dataIndex = testState1.GetDataIndex(
"b1");
389 double *b1PtrByIndex = b1DataByIndex.
Data<
double>();
391 bool getFieldDataByHandle =
true;
393 double *b1PtrByHandle = b1Data.
Data<
double>();
394 if(b1PtrByHandle != b1PtrByIndex)
395 getFieldDataByHandle =
false;
397 serialUnitResults.
UpdateResult(
"State:GetFieldDataByHandle",getFieldDataByHandle);
399 bool getFieldMetaDataByHandle =
true;
401 (testState1.GetFieldMetaData(dataIndex));
404 (testState1.GetFieldMetaDataByHandle(b1Handle));
406 if(fieldMetaData != fieldMetaDataByHandle)
407 getFieldMetaDataByHandle =
false;
409 serialUnitResults.
UpdateResult(
"State:GetFieldMetaDataByHandle",getFieldMetaDataByHandle);
411 const std::string copyFields(
"b3 b4");
412 testState2.Copy(testState1,copyFields);
414 bool copyStateHandles =
true;
416 int b3Handle = testState1.GetFieldHandle(
"b3");
417 int b3Handle2 = testState2.GetFieldHandle(
"b3");
418 dataIndex = testState2.GetDataIndex(
"b3");
419 if(b3Handle != b3Handle2){
420 copyStateHandles =
false;
421 std::cout <<
"B3 Handle = " << b3Handle << std::endl
422 <<
"B3 Copy Handle = " << b3Handle2 << std::endl;
425 copyStateHandles =
false;
426 std::cout <<
"Copied b3 index = " << dataIndex << std::endl;
430 serialUnitResults.
UpdateResult(
"State:CopyStateHandles",copyStateHandles);
int SetStateFields(const std::vector< int > &inFieldIndices)
void TestStateMetaData(ix::test::results &serialUnitResults)
void AXPY(double a, StateType &X, StateType &Y)
void Assign(StateType &X, StateType &Y)
const std::vector< int > & StateFieldIndices() const
bool FieldEmpty(int known_field=0)
StateType Difference(StateType &X, StateType &Y)
void TestStateBasic(ix::test::results &serialUnitResults)
Encapsulating class for collections of test results.
StateType Sum(StateType &X, StateType &Y)
void TestStateHandles(ix::test::results &serialUnitResults)
std::vector< std::string > GetStateFieldNames()
Testing constructs for unit testing.
void UpdateResult(const std::string &name, const ValueType &result)
Updates an existing test result.
double * GetStateFieldData(int stateFieldIndex)
void AddField(const std::string &name, char loc, unsigned int ncomp, unsigned int dsize, const std::string &unit)
void TestStateOperations(ix::test::results &serialUnitResults)
void SetFieldBuffer(const std::string &name, void *buf)
DataBufferType & Field(const std::string &name)