2 // --- include from engine first, to avoid redifinition warning _POSIX_C_SOURCE
7 #include "ElementaryNode.hxx"
10 #include "VisitorSaveState.hxx"
12 #include "SharedPtr.hxx"
13 #include "RuntimeForEngineTest.hxx"
15 #include "engineTest.hxx"
24 #include "YacsTrace.hxx"
26 using namespace YACS::ENGINE;
30 map<string, Node*> EngineTest::_nodeMap;
31 map<string, ComposedNode*> EngineTest::_compoMap;
35 TypeCode *EngineTest::_tc_bool = new TypeCode(Bool);
36 TypeCode *EngineTest::_tc_int = new TypeCode(Int);
37 TypeCode *EngineTest::_tc_double = new TypeCode(Double);
40 void EngineTest::setUp()
44 void EngineTest::tearDown()
48 void EngineTest::cleanUp()
50 map<string, ComposedNode*>::iterator iter2,iter3;
51 for(map<string, Node*>::iterator iter=_nodeMap.begin();iter!=_nodeMap.end();iter++)
52 if((*iter).second->getFather()==0)
53 delete (*iter).second;
56 void EngineTest::checkGetRuntime()
58 CPPUNIT_ASSERT_THROW(Runtime *myrun = getRuntime(), YACS::Exception);
59 RuntimeForEngineTest::setRuntime();
60 Runtime *myrun1 = getRuntime();
61 CPPUNIT_ASSERT(myrun1);
62 Runtime *myrun2 = getRuntime();
63 CPPUNIT_ASSERT_EQUAL(myrun1, myrun2);
76 void EngineTest::checkAny1()
78 char *toto=new char[10];
79 strcpy(toto,"lkjlkj");
80 Any *tmp=AtomAny::New(toto,toto2);//no copy here
81 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
82 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
84 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
85 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
87 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
88 CPPUNIT_ASSERT( tmp->getStringValue() == "lkjlkj");
90 const char tmp2[]="coucou";
91 tmp=AtomAny::New((char *)tmp2,0);
92 CPPUNIT_ASSERT( tmp->getStringValue() == "coucou");
93 CPPUNIT_ASSERT( tmp->getStringValue() == "coucou");
95 tmp=AtomAny::New(string("abcdef"));
96 CPPUNIT_ASSERT( tmp->getStringValue() == "abcdef");
97 CPPUNIT_ASSERT( tmp->getStringValue() == "abcdef");
99 tmp=AtomAny::New("ghijk");
100 CPPUNIT_ASSERT( tmp->getStringValue() == "ghijk");
101 CPPUNIT_ASSERT( tmp->getStringValue() == "ghijk");
103 tmp=AtomAny::New((char *)"ghijk");
104 CPPUNIT_ASSERT( tmp->getStringValue() == "ghijk");
105 CPPUNIT_ASSERT( tmp->getStringValue() == "ghijk");
115 A7(double toto):_d(toto),_cnt(1) { }
116 static A7 *New(double toto) { return new A7(toto); }
117 double getToto() const { return _d; }
118 void setToto(double val) { _d=val; }
119 void incrRef() { _cnt++; }
132 void checkSharedPtrFct2(const A7& a)
137 void checkSharedPtrFct1(const SharedPtr<A7>& a)
139 checkSharedPtrFct2(a);
143 void EngineTest::checkSharedPtr()
145 SharedPtr<A7> titi=A7::New(5.);
146 SharedPtr<A7> toto=A7::New(5.1);
147 SharedPtr<A7> tutu(toto);
148 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,titi->getToto(),1e-12);
150 CPPUNIT_ASSERT_DOUBLES_EQUAL(7.1,titi->getToto(),1e-12);
151 checkSharedPtrFct2(titi);
152 checkSharedPtrFct2(toto);
154 checkSharedPtrFct2(titi);
155 checkSharedPtrFct2(tutu);
158 void EngineTest::checkAny2()
160 double tabStack[8]={1.2, 3.4, 5.6, 7.8, 9.0, 2.3, 4.5, 6.7};
161 double *tabHeap=new double[8];
162 memcpy(tabHeap,tabStack,8*sizeof(double));
163 SequenceAnyPtr tmp(SequenceAny::New(tabStack,8,0));
164 CPPUNIT_ASSERT_EQUAL(8,(int)tmp->size());
165 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.6,(*tmp)[2]->getDoubleValue(),1e-12);
166 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.7,(*tmp)[7]->getDoubleValue(),1e-12);
167 AtomAnyPtr tmp2(AtomAny::New(8.9));
169 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
170 tmp2=AtomAny::New(10.2);
172 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
173 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.9,(*tmp)[8]->getDoubleValue(),1e-12);
174 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.2,(*tmp)[9]->getDoubleValue(),1e-12);
176 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
177 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.9,(*tmp)[8]->getDoubleValue(),1e-12);
178 tmp2=AtomAny::New(10.3);
180 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
181 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.9,(*tmp)[8]->getDoubleValue(),1e-12);
182 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.3,(*tmp)[9]->getDoubleValue(),1e-12);
183 tmp=SequenceAny::New(tabHeap,8,toto2);
184 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.6,(*tmp)[2]->getDoubleValue(),1e-12);
185 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.7,(*tmp)[7]->getDoubleValue(),1e-12);
186 tmp2=AtomAny::New(8.5);
188 tmp2=AtomAny::New(10.27);
190 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.5,(*tmp)[8]->getDoubleValue(),1e-12);
191 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.27,(*tmp)[9]->getDoubleValue(),1e-12);
192 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
194 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
195 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.5,(*tmp)[8]->getDoubleValue(),1e-12);
196 tmp2=AtomAny::New(10.445);
198 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
199 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.5,(*tmp)[8]->getDoubleValue(),1e-12);
200 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.445,(*tmp)[9]->getDoubleValue(),1e-12);
202 int tabStackI[8]={1, 3, 5, 7, 9, 2, 4, 6};
203 int *tabHeapI=new int[8];
204 memcpy(tabHeapI,tabStackI,8*sizeof(int));
205 tmp=SequenceAny::New(tabStackI,8,0);
206 CPPUNIT_ASSERT_EQUAL(5,(*tmp)[2]->getIntValue());
207 CPPUNIT_ASSERT_EQUAL(6,(*tmp)[7]->getIntValue());
208 tmp2=AtomAny::New(8);
210 tmp2=AtomAny::New(25);
212 CPPUNIT_ASSERT_EQUAL(5,(*tmp)[2]->getIntValue());
213 CPPUNIT_ASSERT_EQUAL(6,(*tmp)[7]->getIntValue());
214 CPPUNIT_ASSERT_EQUAL(8,(*tmp)[8]->getIntValue());
215 CPPUNIT_ASSERT_EQUAL(25,(*tmp)[9]->getIntValue());
216 //Same with no copy constructor
217 tmp=SequenceAny::New(tabHeapI,8,toto3);
218 CPPUNIT_ASSERT_EQUAL(5,(*tmp)[2]->getIntValue());
219 CPPUNIT_ASSERT_EQUAL(6,(*tmp)[7]->getIntValue());
220 tmp2=AtomAny::New(8);
222 tmp2=AtomAny::New(27);
224 CPPUNIT_ASSERT_EQUAL(5,(*tmp)[2]->getIntValue());
225 CPPUNIT_ASSERT_EQUAL(6,(*tmp)[7]->getIntValue());
226 CPPUNIT_ASSERT_EQUAL(8,(*tmp)[8]->getIntValue());
227 CPPUNIT_ASSERT_EQUAL(27,(*tmp)[9]->getIntValue());
228 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
230 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
231 CPPUNIT_ASSERT_EQUAL(8,(*tmp)[8]->getIntValue());
232 tmp2=AtomAny::New(202);
234 CPPUNIT_ASSERT_EQUAL(10,(int)tmp->size());
235 CPPUNIT_ASSERT_EQUAL(8,(*tmp)[8]->getIntValue());
236 CPPUNIT_ASSERT_EQUAL(202,(*tmp)[9]->getIntValue());
239 double d=(*tmp)[2]->getDoubleValue();
244 CPPUNIT_ASSERT(std::string(e.what())=="Value is not a Double");
246 SequenceAnyPtr tmp3=SequenceAny::New(tmp->getType());
249 tmp3->pushBack(tmp2);
254 CPPUNIT_ASSERT(std::string(e.what())=="Invalid runtime of YACS::Any struct : having Int and you want Sequence");
256 CPPUNIT_ASSERT_EQUAL(0,(int)tmp3->size());
257 CPPUNIT_ASSERT_EQUAL(202,(*tmp)[9]->getIntValue());
259 CPPUNIT_ASSERT_EQUAL(1,(int)tmp3->size());
260 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
261 tmp=SequenceAny::New(tabStackI,8,0);
263 CPPUNIT_ASSERT_EQUAL(2,(int)tmp3->size());
264 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
265 CPPUNIT_ASSERT_EQUAL(7,(*tmp3)[1][3]->getIntValue());
268 CPPUNIT_ASSERT_EQUAL(4,(int)tmp3->size());
269 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
270 CPPUNIT_ASSERT_EQUAL(7,(*tmp3)[1][3]->getIntValue());
271 CPPUNIT_ASSERT_EQUAL(7,(*tmp3)[3][3]->getIntValue());
272 tmp2=AtomAny::New(89);
274 CPPUNIT_ASSERT_EQUAL(4,(int)tmp3->size());
275 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
276 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
277 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[1][8]->getIntValue());
278 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[2][8]->getIntValue());
279 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[3][8]->getIntValue());
281 CPPUNIT_ASSERT_EQUAL(3,(int)tmp3->size());
282 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
283 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
284 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[1][8]->getIntValue());
285 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[2][8]->getIntValue());
286 SequenceAnyPtr tmp4=(SequenceAny *)tmp3->clone();
287 CPPUNIT_ASSERT_EQUAL(3,(int)tmp4->size());
288 CPPUNIT_ASSERT_EQUAL(202,(*tmp4)[0][9]->getIntValue());
289 CPPUNIT_ASSERT_EQUAL(89,(*tmp4)[1][8]->getIntValue());
290 CPPUNIT_ASSERT_EQUAL(89,(*tmp4)[2][8]->getIntValue());
292 CPPUNIT_ASSERT_EQUAL(2,(int)tmp4->size());
293 CPPUNIT_ASSERT_EQUAL(3,(int)tmp3->size());
294 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
295 CPPUNIT_ASSERT_EQUAL(202,(*tmp4)[0][9]->getIntValue());
296 CPPUNIT_ASSERT_EQUAL(89,(*tmp3)[1][8]->getIntValue());
297 CPPUNIT_ASSERT_EQUAL(89,(*tmp4)[1][8]->getIntValue());
299 tmp2=AtomAny::New(107);
301 CPPUNIT_ASSERT_EQUAL(2,(int)tmp4->size());
302 CPPUNIT_ASSERT_EQUAL(3,(int)tmp3->size());
303 CPPUNIT_ASSERT_EQUAL(202,(*tmp3)[0][9]->getIntValue());
304 CPPUNIT_ASSERT_EQUAL(202,(*tmp4)[0][9]->getIntValue());
305 CPPUNIT_ASSERT_EQUAL(107,(*tmp3)[1][8]->getIntValue());//These 2 lines to show that deepCpy has been done
306 CPPUNIT_ASSERT_EQUAL(89,(*tmp4)[1][8]->getIntValue());
309 void EngineTest::checkAny3()
312 vec.push_back("tata00000"); vec.push_back("toto"); vec.push_back("tutu");
313 SequenceAnyPtr tmp(SequenceAny::New(vec));
314 CPPUNIT_ASSERT_EQUAL(3,(int)tmp->size());
315 CPPUNIT_ASSERT((*tmp)[0]->getStringValue()=="tata00000");
316 CPPUNIT_ASSERT((*tmp)[1]->getStringValue()=="toto");
317 CPPUNIT_ASSERT((*tmp)[2]->getStringValue()=="tutu");
318 tmp->pushBack(AtomAnyPtr(AtomAny::New("abcdefgh")));
319 CPPUNIT_ASSERT_EQUAL(4,(int)tmp->size());
320 CPPUNIT_ASSERT((*tmp)[0]->getStringValue()=="tata00000");
321 CPPUNIT_ASSERT((*tmp)[1]->getStringValue()=="toto");
322 CPPUNIT_ASSERT((*tmp)[2]->getStringValue()=="tutu");
323 CPPUNIT_ASSERT((*tmp)[3]->getStringValue()=="abcdefgh");
325 CPPUNIT_ASSERT_EQUAL(3,(int)tmp->size());
326 CPPUNIT_ASSERT((*tmp)[0]->getStringValue()=="tata00000");
327 CPPUNIT_ASSERT((*tmp)[1]->getStringValue()=="toto");
328 CPPUNIT_ASSERT((*tmp)[2]->getStringValue()=="tutu");
330 CPPUNIT_ASSERT_EQUAL(2,(int)tmp->size());
331 CPPUNIT_ASSERT((*tmp)[0]->getStringValue()=="tata00000");
332 CPPUNIT_ASSERT((*tmp)[1]->getStringValue()=="toto");
334 CPPUNIT_ASSERT_EQUAL(1,(int)tmp->size());
335 CPPUNIT_ASSERT((*tmp)[0]->getStringValue()=="tata00000");
337 CPPUNIT_ASSERT_EQUAL(0,(int)tmp->size());
340 tmp=SequenceAny::New(vec2);
341 CPPUNIT_ASSERT_EQUAL(0,(int)tmp->size());
342 vec2.push_back(true); vec2.push_back(false); vec2.push_back(true); vec2.push_back(true); vec2.push_back(true);
343 tmp=SequenceAny::New(vec2);
344 CPPUNIT_ASSERT_EQUAL(5,(int)tmp->size());
345 CPPUNIT_ASSERT((*tmp)[0]->getBoolValue() && !(*tmp)[1]->getBoolValue() && (*tmp)[2]->getBoolValue() && (*tmp)[3]->getBoolValue() && (*tmp)[4]->getBoolValue());
346 //in perspective of SequenceAny of bool were optimized as std::vector<bool> does.
347 tmp->pushBack(AtomAnyPtr(AtomAny::New(false))); tmp->pushBack(AtomAnyPtr(AtomAny::New(true))); tmp->pushBack(AtomAnyPtr(AtomAny::New(false)));
348 tmp->pushBack(AtomAnyPtr(AtomAny::New(true)));
349 CPPUNIT_ASSERT_EQUAL(9,(int)tmp->size());
350 CPPUNIT_ASSERT((*tmp)[0]->getBoolValue() && !(*tmp)[1]->getBoolValue() && (*tmp)[2]->getBoolValue() && (*tmp)[3]->getBoolValue() && (*tmp)[4]->getBoolValue());
351 CPPUNIT_ASSERT(!(*tmp)[5]->getBoolValue() && (*tmp)[6]->getBoolValue() && !(*tmp)[7]->getBoolValue() && (*tmp)[8]->getBoolValue());
354 vec3.push_back(2); vec3.push_back(5); vec3.push_back(7); vec3.push_back(1); vec3.push_back(66); vec3.push_back(26);
355 tmp=SequenceAny::New(vec3);
356 CPPUNIT_ASSERT_EQUAL(6,(int)tmp->size());
357 CPPUNIT_ASSERT_EQUAL(26,(*tmp)[5]->getIntValue());
359 CPPUNIT_ASSERT_EQUAL(5,(int)tmp->size());
362 vec4.push_back(2.78); vec4.push_back(3.14); vec4.push_back(0.07);
363 tmp=SequenceAny::New(vec4);
364 CPPUNIT_ASSERT_EQUAL(3,(int)tmp->size());
365 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.07,(*tmp)[2]->getDoubleValue(),1e-12);
367 CPPUNIT_ASSERT_EQUAL(2,(int)tmp->size());
368 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.14,(*tmp)[1]->getDoubleValue(),1e-12);
371 void EngineTest::checkAny4()
373 SequenceAnyPtr tmp(SequenceAny::New(Runtime::_tc_int,8));
374 tmp=SequenceAny::New(Runtime::_tc_int,4);
375 tmp=SequenceAny::New(Runtime::_tc_int);
376 tmp=SequenceAny::New(Runtime::_tc_int,7);
377 AnyPtr tmp2=AtomAny::New(107);
378 tmp->setEltAtRank(3,tmp2);
379 CPPUNIT_ASSERT_EQUAL(107,(*tmp)[3]->getIntValue());
380 tmp=SequenceAny::New(Runtime::_tc_string,2);
381 const char tmpSt[]="titi";
382 tmp2=AtomAny::New((char*)tmpSt,0);
383 tmp->setEltAtRank(1,tmp2);
384 CPPUNIT_ASSERT((*tmp)[1]->getStringValue()=="titi");
386 vec4.push_back(2.78); vec4.push_back(3.14); vec4.push_back(0.07);
387 tmp2=SequenceAny::New(vec4);
388 tmp=SequenceAny::New(tmp2->getType(),3);
389 tmp->setEltAtRank(0,tmp2);
390 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.14,(*tmp)[0][1]->getDoubleValue(),1e-12);
391 CPPUNIT_ASSERT_EQUAL(3,(int)tmp->size());
393 CPPUNIT_ASSERT_EQUAL(0,(int)tmp->size());
396 CPPUNIT_ASSERT_EQUAL(2,(int)tmp->size());
397 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.14,(*tmp)[1][1]->getDoubleValue(),1e-12);
401 * Testing Any::operator ==
403 void EngineTest::checkAny5()
406 AnyPtr tmp1=AtomAny::New(107);
407 AnyPtr tmp2=AtomAny::New(107);
408 CPPUNIT_ASSERT( *tmp1==*tmp2 );
409 tmp1=AtomAny::New(106);
410 CPPUNIT_ASSERT( ! (*tmp1==*tmp2) );
411 CPPUNIT_ASSERT( ! (*tmp2==*tmp1) );
412 tmp1=AtomAny::New("toto");
413 CPPUNIT_ASSERT( ! (*tmp1==*tmp2) );
414 tmp2=AtomAny::New("tot");
415 CPPUNIT_ASSERT( ! (*tmp1==*tmp2) );
416 tmp2=AtomAny::New("toto");
417 CPPUNIT_ASSERT( (*tmp1==*tmp2) );
418 tmp1=AtomAny::New("mmmmmlll");
420 CPPUNIT_ASSERT( (*tmp1==*tmp2) );
423 vec.push_back("tata00000"); vec.push_back("toto"); vec.push_back("tutu");
424 SequenceAnyPtr tmp3=(SequenceAny::New(vec));
425 CPPUNIT_ASSERT_EQUAL(3,(int)tmp3->size());
426 CPPUNIT_ASSERT((*tmp3)[0]->getStringValue()=="tata00000");
427 CPPUNIT_ASSERT((*tmp3)[1]->getStringValue()=="toto");
428 CPPUNIT_ASSERT((*tmp3)[2]->getStringValue()=="tutu");
429 AnyPtr tmp4=tmp3->clone();
430 CPPUNIT_ASSERT( (*tmp3==*tmp4) );
431 CPPUNIT_ASSERT( (*tmp3==*tmp3) );
433 CPPUNIT_ASSERT( !(*tmp3==*tmp4) );
434 tmp1=AtomAny::New("tutu");
435 tmp3->pushBack(tmp1);
436 CPPUNIT_ASSERT( (*tmp3==*tmp4) );
437 tmp3->pushBack(tmp1);
438 CPPUNIT_ASSERT( !(*tmp3==*tmp4) );
440 CPPUNIT_ASSERT( *tmp3==*tmp4 );
442 CPPUNIT_ASSERT( !(*tmp3==*tmp4) );
443 tmp1=AtomAny::New("tutug");
444 tmp3->pushBack(tmp1);
445 CPPUNIT_ASSERT( !(*tmp3==*tmp4) );
449 * Test of ArrayAny. Only one level.
451 void EngineTest::checkAny6()
454 const int tab[lgth]={0,1,1,9,2,7,2,3};
455 const int tab2[lgth]={13,1,1,9,2,7,2,3};
456 ArrayAnyPtr tmp1(ArrayAny::New(tab,lgth));
457 ArrayAnyPtr tmp2(ArrayAny::New(tab,lgth));
458 CPPUNIT_ASSERT((*tmp1)[3]->getIntValue()==9);
459 CPPUNIT_ASSERT( (*tmp1==*tmp2) );
460 CPPUNIT_ASSERT( (*tmp1==*tmp1) );
461 CPPUNIT_ASSERT( 8==tmp1->size() );
462 CPPUNIT_ASSERT( 8==tmp2->size() );
463 tmp2=ArrayAny::New(tab,lgth-1);
464 CPPUNIT_ASSERT( 7==tmp2->size() );
465 CPPUNIT_ASSERT( !(*tmp1==*tmp2) );
466 tmp2=ArrayAny::New(tab2,lgth);
467 CPPUNIT_ASSERT( !(*tmp1==*tmp2) );
468 tmp2=ArrayAny::New(tab,lgth);
469 CPPUNIT_ASSERT( (*tmp1==*tmp2) );
470 ArrayAnyPtr tmp3=(ArrayAny *)tmp1->clone();
471 CPPUNIT_ASSERT( (*tmp1==*tmp3) );
472 CPPUNIT_ASSERT((*tmp3)[3]->getIntValue()==9); CPPUNIT_ASSERT((*tmp3)[4]->getIntValue()==2);
473 // Ok let's test with double.
474 const double tab3[lgth]={0.1,1.1,1.1,9.1,2.1,7.1,2.1,3.1};
475 const double tab4[lgth]={13.1,1.1,1.1,9.1,2.1,7.1,2.1,3.1};
476 ArrayAnyPtr tmp4(ArrayAny::New(tab3,lgth));
477 ArrayAnyPtr tmp5(ArrayAny::New(tab3,lgth));
478 CPPUNIT_ASSERT_DOUBLES_EQUAL((*tmp4)[3]->getDoubleValue(),9.1,1e-12);
479 CPPUNIT_ASSERT( (*tmp4==*tmp5) );
480 CPPUNIT_ASSERT( (*tmp4==*tmp4) );
481 CPPUNIT_ASSERT( 8==tmp4->size() );
482 CPPUNIT_ASSERT( 8==tmp5->size() );
483 tmp5=ArrayAny::New(tab3,lgth-1);
484 CPPUNIT_ASSERT( 7==tmp5->size() );
485 CPPUNIT_ASSERT( !(*tmp4==*tmp5) );
486 tmp5=ArrayAny::New(tab4,lgth);
487 CPPUNIT_ASSERT( !(*tmp4==*tmp5) );
488 tmp5=ArrayAny::New(tab3,lgth);
489 CPPUNIT_ASSERT( (*tmp4==*tmp5) );
490 ArrayAnyPtr tmp6=(ArrayAny *)tmp4->clone();
491 CPPUNIT_ASSERT( (*tmp4==*tmp6) );
492 CPPUNIT_ASSERT_DOUBLES_EQUAL((*tmp6)[3]->getDoubleValue(),9.1,1e-12);
493 CPPUNIT_ASSERT_DOUBLES_EQUAL((*tmp6)[4]->getDoubleValue(),2.1,1e-12);
494 //Ok let's test with bool.
495 const bool tab5[lgth]={false,true,false,true,false,false,false,false};
496 const bool tab6[lgth]={true ,true,false,true,false,false,false,false};
497 ArrayAnyPtr tmp7(ArrayAny::New(tab5,lgth));
498 ArrayAnyPtr tmp8(ArrayAny::New(tab5,lgth));
499 CPPUNIT_ASSERT((*tmp7)[3]->getBoolValue());
500 CPPUNIT_ASSERT( (*tmp7==*tmp8) );
501 CPPUNIT_ASSERT( (*tmp7==*tmp7) );
502 CPPUNIT_ASSERT( 8==tmp7->size() );
503 CPPUNIT_ASSERT( 8==tmp8->size() );
504 tmp8=ArrayAny::New(tab5,lgth-1);
505 CPPUNIT_ASSERT( 7==tmp8->size() );
506 CPPUNIT_ASSERT( !(*tmp7==*tmp8) );
507 tmp8=ArrayAny::New(tab6,lgth);
508 CPPUNIT_ASSERT( !(*tmp7==*tmp8) );
509 tmp8=ArrayAny::New(tab5,lgth);
510 CPPUNIT_ASSERT( (*tmp7==*tmp8) );
511 ArrayAnyPtr tmp9=(ArrayAny *)tmp7->clone();
512 CPPUNIT_ASSERT( (*tmp9==*tmp7) );
513 CPPUNIT_ASSERT((*tmp8)[3]->getBoolValue());
514 CPPUNIT_ASSERT(!(*tmp8)[4]->getBoolValue());
515 //Ok let's test with strings.
516 vector<string> tab7(lgth); tab7[0]="abc"; tab7[1]="def"; tab7[2]="ghi"; tab7[3]="jkl"; tab7[4]="mno"; tab7[5]="pqr"; tab7[6]="stu"; tab7[7]="vwx";
517 vector<string> tab8(lgth); tab8[0]="zbc"; tab8[1]="def"; tab8[2]="ghi"; tab8[3]="jkl"; tab8[4]="mno"; tab8[5]="pqr"; tab8[6]="stu"; tab8[7]="vwx";
518 ArrayAnyPtr tmp10(ArrayAny::New(tab7));
519 ArrayAnyPtr tmp11(ArrayAny::New(tab7));
520 CPPUNIT_ASSERT((*tmp10)[3]->getStringValue()=="jkl");
521 CPPUNIT_ASSERT( (*tmp10==*tmp11) );
522 CPPUNIT_ASSERT( (*tmp10==*tmp10) );
523 CPPUNIT_ASSERT( 8==tmp10->size() );
524 CPPUNIT_ASSERT( 8==tmp11->size() );
525 vector<string> tab9(tab7); tab9.pop_back();
526 tmp11=ArrayAny::New(tab9);
527 CPPUNIT_ASSERT( 7==tmp11->size() );
528 CPPUNIT_ASSERT( !(*tmp10==*tmp11) );
529 tmp11=ArrayAny::New(tab8);
530 CPPUNIT_ASSERT( !(*tmp10==*tmp11) );
531 tmp11=ArrayAny::New(tab7);
532 CPPUNIT_ASSERT( (*tmp10==*tmp11) );
533 ArrayAnyPtr tmp12=(ArrayAny *)tmp10->clone();
534 CPPUNIT_ASSERT( (*tmp12==*tmp10) );
535 CPPUNIT_ASSERT((*tmp11)[3]->getStringValue()=="jkl");
536 CPPUNIT_ASSERT((*tmp11)[4]->getStringValue()=="mno");
540 * Test of ArrayAny on multi-levels. To test recursion.
542 void EngineTest::checkAny7()
545 const int tab1[lgth]={0,1,1,9,2,7,2,3};
546 const int tab2[lgth]={7,8,8,16,9,14,9,10};
547 //Testing Arrays of arrays
548 ArrayAnyPtr tmp11(ArrayAny::New(tab1,lgth));
549 ArrayAnyPtr tmp12(ArrayAny::New(tab2,lgth));
550 ArrayAnyPtr tmp12Throw(ArrayAny::New(tab2,lgth+1));
551 ArrayAnyPtr tmp2(ArrayAny::New(tmp11->getType(),2));
552 tmp2->setEltAtRank(0,tmp11);
553 CPPUNIT_ASSERT_THROW(tmp2->setEltAtRank(1,tmp12Throw),Exception);
554 tmp2->setEltAtRank(1,tmp12);
555 CPPUNIT_ASSERT_EQUAL(0,(*tmp2)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2)[1][0]->getIntValue());
556 CPPUNIT_ASSERT_EQUAL(9,(*tmp2)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2)[1][3]->getIntValue());
557 // Show deep copy process of arrays
558 AnyPtr tmp=AtomAny::New(49);
559 tmp11->setEltAtRank(0,tmp);
560 CPPUNIT_ASSERT_EQUAL(0,(*tmp2)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2)[1][0]->getIntValue());
561 CPPUNIT_ASSERT_EQUAL(9,(*tmp2)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2)[1][3]->getIntValue());
562 ArrayAnyPtr tmp2Cloned=(ArrayAny *)(tmp2->clone());
563 CPPUNIT_ASSERT_EQUAL(0,(*tmp2Cloned)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2Cloned)[1][0]->getIntValue());
564 CPPUNIT_ASSERT_EQUAL(9,(*tmp2Cloned)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2Cloned)[1][3]->getIntValue());
565 CPPUNIT_ASSERT( *tmp2==*tmp2Cloned );
566 CPPUNIT_ASSERT( *tmp2==*tmp2 );
567 //Testing Array of Sequences
568 SequenceAnyPtr tmp13(SequenceAny::New((int *)tab1,lgth,0));
569 SequenceAnyPtr tmp14(SequenceAny::New((int *)tab2,lgth,0));
570 tmp2=ArrayAny::New(tmp13->getType(),2);
571 tmp2->setEltAtRank(0,tmp13);
572 tmp2->setEltAtRank(1,tmp14);
573 CPPUNIT_ASSERT_EQUAL(0,(*tmp2)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2)[1][0]->getIntValue());
574 CPPUNIT_ASSERT_EQUAL(9,(*tmp2)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2)[1][3]->getIntValue());
575 tmp13->setEltAtRank(0,tmp);
576 // No deep copy here contrary to 14 lines ahead.
577 CPPUNIT_ASSERT_EQUAL(49,(*tmp2)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2)[1][0]->getIntValue());
578 CPPUNIT_ASSERT_EQUAL(9,(*tmp2)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2)[1][3]->getIntValue());
579 tmp2Cloned=(ArrayAny *)(tmp2->clone());
580 CPPUNIT_ASSERT_EQUAL(49,(*tmp2Cloned)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp2Cloned)[1][0]->getIntValue());
581 CPPUNIT_ASSERT_EQUAL(9,(*tmp2Cloned)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp2Cloned)[1][3]->getIntValue());
582 CPPUNIT_ASSERT( *tmp2==*tmp2Cloned );
583 CPPUNIT_ASSERT( *tmp2==*tmp2 );
584 //Testing Sequence of array
585 tmp13=SequenceAny::New(tmp11->getType(),2);
586 tmp13->setEltAtRank(0,tmp11);
587 tmp13->setEltAtRank(1,tmp12);
588 CPPUNIT_ASSERT_EQUAL(49,(*tmp13)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp13)[1][0]->getIntValue());
589 CPPUNIT_ASSERT_EQUAL(9,(*tmp13)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp13)[1][3]->getIntValue());
590 tmp14=(SequenceAny *)tmp13->clone();
591 CPPUNIT_ASSERT_EQUAL(49,(*tmp14)[0][0]->getIntValue()); CPPUNIT_ASSERT_EQUAL(7,(*tmp14)[1][0]->getIntValue());
592 CPPUNIT_ASSERT_EQUAL(9,(*tmp14)[0][3]->getIntValue()); CPPUNIT_ASSERT_EQUAL(16,(*tmp14)[1][3]->getIntValue());
593 CPPUNIT_ASSERT( *tmp13==*tmp14 );
594 CPPUNIT_ASSERT( *tmp13==*tmp13 );
598 * First test of structs.
600 void EngineTest::checkAny8()
602 TypeCodeStruct *tc=new TypeCodeStruct("","");
603 tc->addMember("MyInt",Runtime::_tc_int);
604 tc->addMember("MyDouble",Runtime::_tc_double);
605 tc->addMember("MyBool",Runtime::_tc_bool);
606 tc->addMember("MyStr",Runtime::_tc_string);
607 StructAnyPtr tmp1=StructAny::New(tc);
608 tmp1=StructAny::New(tc);
609 AnyPtr tmpAtom=AtomAny::New(3791);
610 tmp1->setEltAtRank("MyInt",tmpAtom);
611 CPPUNIT_ASSERT_THROW(tmp1->setEltAtRank(1,tmpAtom),Exception);
612 tmpAtom=AtomAny::New(3.14);
613 CPPUNIT_ASSERT_THROW(tmp1->setEltAtRank("MyDoubl",tmpAtom),Exception);
614 tmp1->setEltAtRank("MyDouble",tmpAtom);
615 tmpAtom=AtomAny::New(false);
616 tmp1->setEltAtRank("MyBool",tmpAtom);
617 tmpAtom=AtomAny::New("abcdef");
618 tmp1->setEltAtRank("MyStr",tmpAtom);
619 CPPUNIT_ASSERT_EQUAL(3791,(*tmp1)["MyInt"]->getIntValue());
620 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.14,(*tmp1)["MyDouble"]->getDoubleValue(),1e-12);
621 CPPUNIT_ASSERT_THROW((*tmp1)["MyIntT"],Exception);
622 CPPUNIT_ASSERT(!(*tmp1)["MyBool"]->getBoolValue());
623 CPPUNIT_ASSERT_THROW((*tmp1)["MyBool"]->getStringValue(),Exception);
624 CPPUNIT_ASSERT((*tmp1)["MyStr"]->getStringValue()=="abcdef");
625 tmpAtom=AtomAny::New("ghijklm");
626 tmp1->setEltAtRank("MyStr",tmpAtom);
627 CPPUNIT_ASSERT((*tmp1)["MyStr"]->getStringValue()=="ghijklm");
628 //Introduce some recursive structure.
629 SequenceAnyPtr tmp2=SequenceAny::New(tc,2);
630 tmp2->setEltAtRank(0,tmp1);
631 tmpAtom=AtomAny::New("opqrst");
632 tmp1->setEltAtRank("MyStr",tmpAtom);
633 tmp2->setEltAtRank(1,tmp1);
634 CPPUNIT_ASSERT_EQUAL(3791,(*tmp2)[1]["MyInt"]->getIntValue());
635 CPPUNIT_ASSERT((*tmp2)[0]["MyStr"]->getStringValue()=="ghijklm");
636 CPPUNIT_ASSERT((*tmp2)[1]["MyStr"]->getStringValue()=="opqrst");
637 CPPUNIT_ASSERT(*tmp2==*tmp2);
638 AnyPtr tmp3=tmp2->clone();
639 CPPUNIT_ASSERT(*tmp2==*tmp3);
640 CPPUNIT_ASSERT((*tmp3)[0]["MyStr"]->getStringValue()=="ghijklm");
641 CPPUNIT_ASSERT((*tmp3)[1]["MyStr"]->getStringValue()=="opqrst");
645 void EngineTest::checkInGateOutGate()
647 string nodeName = "Node1";
648 ElementaryNode* node1 = new TestElemNode(nodeName);
649 _nodeMap[nodeName] = node1;
652 ElementaryNode* node2 = new TestElemNode(nodeName);
653 _nodeMap[nodeName] = node2;
655 DEBTRACE(" --- check InGate OK after node creation" );
657 InGate *node1Ingate = node1->getInGate();
658 CPPUNIT_ASSERT(node1Ingate);
659 string name=node1Ingate->getNameOfTypeOfCurrentInstance();
660 string expected="InGate";
661 CPPUNIT_ASSERT_EQUAL(name,expected);
664 DEBTRACE(" --- check OutGate OK after node creation" );
666 OutGate *node1Outgate = node1->getOutGate();
667 CPPUNIT_ASSERT(node1Outgate);
668 string name=node1Outgate->getNameOfTypeOfCurrentInstance();
669 string expected="OutGate";
670 CPPUNIT_ASSERT_EQUAL(name,expected);
674 void EngineTest::checkNodePortNumber()
676 ElementaryNode* node1 = (ElementaryNode*) _nodeMap["Node1"];
678 DEBTRACE(" --- check number of ports = 0 after node creation" );
679 CPPUNIT_ASSERT(node1->getNumberOfInputPorts() == 0);
680 CPPUNIT_ASSERT(node1->getNumberOfOutputPorts() == 0);
682 InputPort *in1 = node1->edAddInputPort("ib1",_tc_bool);
683 InputPort *in2 = node1->edAddInputPort("ii1",_tc_int);
684 InputPort *in3 = node1->edAddInputPort("ii2",_tc_int);
685 InputPort *in4 = node1->edAddInputPort("id1",_tc_double);
687 OutputPort *ou1 = node1->edAddOutputPort("ob1",_tc_bool);
688 OutputPort *ou2 = node1->edAddOutputPort("oi1",_tc_int);
689 OutputPort *ou3 = node1->edAddOutputPort("od1",_tc_double);
691 DEBTRACE(" --- check number of ports after ports creation" );
692 // DEBTRACE(" node1->getNumberOfInputPorts(): "
693 // << node1->getNumberOfInputPorts());
694 // DEBTRACE(" node1->getNumberOfOutputPorts(): "
695 // << node1->getNumberOfOutputPorts());
696 CPPUNIT_ASSERT(node1->getNumberOfInputPorts() == 4);
697 CPPUNIT_ASSERT(node1->getNumberOfOutputPorts() == 3);
700 void EngineTest::checkPortTypeName()
702 ElementaryNode* node1 = (ElementaryNode*) _nodeMap["Node1"];
704 DEBTRACE(" --- check InputPort name OK" );
706 string name=node1->getInputPort("ib1")->NAME;
707 string expected="InputPort";
708 CPPUNIT_ASSERT_EQUAL(name,expected);
711 DEBTRACE(" --- check OutputPort name OK" );
713 string name=node1->getOutputPort("ob1")->NAME;
714 string expected="OutputPort";
715 CPPUNIT_ASSERT_EQUAL(name,expected);
719 void EngineTest::checkDuplicatePortName()
721 ElementaryNode* node1 = (ElementaryNode*) _nodeMap["Node1"];
722 DEBTRACE(" --- check duplicated name throws exception" );
723 CPPUNIT_ASSERT_THROW(InputPort *in5=node1->edAddInputPort("ii2",_tc_int),
727 void EngineTest::checkRemovePort()
729 ElementaryNode* node1 = (ElementaryNode*) _nodeMap["Node1"];
730 ElementaryNode* node2 = (ElementaryNode*) _nodeMap["Node2"];
732 DEBTRACE(" --- check remove port" );
734 node1->edRemovePort(node1->getInputPort("ib1"));
735 CPPUNIT_ASSERT(node1->getNumberOfInputPorts() == 3);
736 CPPUNIT_ASSERT(node1->getNumberOfOutputPorts() == 3);
739 DEBTRACE(" --- check remove wrong port throws exception" )
741 CPPUNIT_ASSERT_THROW(node1->edRemovePort(node1->getInputPort("ib1")),
746 void EngineTest::checkAddNodesToBloc()
748 DEBTRACE(" --- delete node; // ====== NOT OK : done by bloc" );
750 for (int i=0; i<10; i++)
755 ElementaryNode* node = new TestElemNode(s);
757 InputPort *i1 = node->edAddInputPort("ib1",_tc_bool);
758 InputPort *i2 = node->edAddInputPort("ii1",_tc_int);
759 InputPort *i3 = node->edAddInputPort("ii2",_tc_int);
760 InputPort *i4 = node->edAddInputPort("id1",_tc_double);
761 OutputPort *o1 = node->edAddOutputPort("ob1",_tc_bool);
762 OutputPort *o2 = node->edAddOutputPort("oi1",_tc_int);
763 OutputPort *o3 = node->edAddOutputPort("od1",_tc_double);
766 DEBTRACE(" --- create bloc, add two nodes, check constituants" );
768 Bloc* bloc1 = new Bloc("bloc1");
769 _nodeMap["bloc1"] = bloc1;
770 _compoMap["bloc1"] = bloc1;
771 bloc1->edAddChild(_nodeMap["Node_1"]);
772 bloc1->edAddChild(_nodeMap["Node_2"]);
774 list<ElementaryNode *> setelem = bloc1->getRecursiveConstituents();
775 CPPUNIT_ASSERT(setelem.size() == 2);
779 void EngineTest::checkAddingTwiceSameNodeInSameBloc()
781 DEBTRACE(" --- add the same node two times does nothing: return false" );
783 CPPUNIT_ASSERT(! ((Bloc*)_compoMap["bloc1"])->edAddChild(_nodeMap["Node_1"]));
786 void EngineTest::checkAddingTwiceSameNodeInTwoBlocs()
788 DEBTRACE(" --- add a node already used elsewhere raises exception" );
790 Bloc* bloc2 = new Bloc("bloc2");
791 _nodeMap["bloc2"] = bloc2;
792 _compoMap["bloc2"] = bloc2;
793 bloc2->edAddChild(_nodeMap["Node_3"]);
795 CPPUNIT_ASSERT_THROW(bloc2->edAddChild(_nodeMap["Node_1"]),
800 void EngineTest::checkRecursiveBlocs_NumberOfNodes()
802 Bloc *bloc1 = (Bloc*)_compoMap["bloc1"];
803 Bloc *bloc2 = (Bloc*)_compoMap["bloc2"];
805 DEBTRACE(" --- recursive blocs, check constituants" );
807 Bloc* bloc3 = new Bloc("bloc3");
808 _nodeMap["bloc3"] = bloc3;
809 _compoMap["bloc3"] = bloc3;
810 bloc3->edAddChild((bloc1)); // 2 elementary nodes
811 bloc3->edAddChild((bloc2)); // 1 elementary node
812 bloc3->edAddChild(_nodeMap["Node_4"]); // 1 elementary node
814 list<ElementaryNode *> setelem = bloc3->getRecursiveConstituents();
815 CPPUNIT_ASSERT(setelem.size() == 4);
816 for (list<ElementaryNode*>::iterator it=setelem.begin(); it!=setelem.end(); it++)
818 DEBTRACE(" elem name = " << (*it)->getName());
823 void EngineTest::checkRecursiveBlocs_NumberOfPorts()
825 Bloc *bloc3 = (Bloc*)_compoMap["bloc3"];
827 DEBTRACE(" --- recursive blocs, check input & output ports // COMPLETER" );
828 CPPUNIT_ASSERT(bloc3->getNumberOfInputPorts() == 4*4);
829 DEBTRACE(" number of input ports: " << bloc3->getNumberOfInputPorts());
830 DEBTRACE(" number of output ports: " << bloc3->getNumberOfOutputPorts());
832 list<InputPort *> inset = bloc3->getSetOfInputPort();
833 list<OutputPort *> outset = bloc3->getSetOfOutputPort();
834 for (list<InputPort *>::iterator it=inset.begin(); it!=inset.end(); it++)
836 DEBTRACE(" input port name = " << bloc3->getInPortName(*it));
838 for (list<OutputPort *>::iterator it=outset.begin(); it!=outset.end(); it++)
840 DEBTRACE(" output port name = " << bloc3->getOutPortName(*it));
845 void EngineTest::checkPortNameInBloc()
848 DEBTRACE(" --- recursive blocs, check port names" );
850 InputPort *inport = _nodeMap["Node_1"]->getInputPort("id1");
851 CPPUNIT_ASSERT(_nodeMap["bloc3"]->getInPortName(inport) == "bloc1.Node_1.id1");
852 CPPUNIT_ASSERT(((Bloc*)_nodeMap["bloc3"])->getChildName(_nodeMap["Node_1"]) == "bloc1.Node_1");
855 void EngineTest::checkGetNameOfPortNotInBloc()
857 InputPort *inport = _nodeMap["Node_5"]->getInputPort("id1");
858 CPPUNIT_ASSERT_THROW(string name = _nodeMap["bloc3"]->getInPortName(inport),
862 void EngineTest::checkRemoveNode()
864 DEBTRACE(" --- bloc and port inventory must be OK after bloc remove" );
866 Bloc* bloc = new Bloc("blocR");
867 _nodeMap["blocR"] = bloc;
868 _compoMap["blocR"] = bloc;
869 bloc->edAddChild(_nodeMap["Node_5"]);
870 bloc->edAddChild(_nodeMap["Node_6"]);
871 bloc->edAddChild(_nodeMap["Node_7"]);
874 list<ElementaryNode *> setelem = _nodeMap["blocR"]->getRecursiveConstituents();
875 CPPUNIT_ASSERT(setelem.size() == 3);
877 for (list<ElementaryNode*>::iterator it=setelem.begin(); it!=setelem.end(); it++)
879 DEBTRACE(" elem name = " << (*it)->getName());
883 ((Bloc *)_nodeMap["blocR"])->edRemoveChild(_nodeMap["Node_6"]);
886 list<ElementaryNode *> setelem = _nodeMap["blocR"]->getRecursiveConstituents();
887 CPPUNIT_ASSERT(setelem.size() == 2);
888 for (list<ElementaryNode*>::iterator it=setelem.begin(); it!=setelem.end(); it++)
890 DEBTRACE(" elem name = " << (*it)->getName());
891 DEBTRACE(" elem name in Bloc = " << ((Bloc *)_nodeMap["blocR"])->getChildName(*it));
896 list<InputPort *> inset = _nodeMap["blocR"]->getSetOfInputPort();
897 list<OutputPort *> outset = _nodeMap["blocR"]->getSetOfOutputPort();
898 CPPUNIT_ASSERT(inset.size() == 8);
899 CPPUNIT_ASSERT(outset.size() == 6);
900 for (list<InputPort *>::iterator it=inset.begin(); it!=inset.end(); it++)
902 DEBTRACE(" input port name for blocR = " << _nodeMap["blocR"]->getInPortName(*it));
904 for (list<OutputPort *>::iterator it=outset.begin(); it!=outset.end(); it++)
906 DEBTRACE(" output port name for blocR = " << _nodeMap["blocR"]->getOutPortName(*it));
910 ((Bloc *)_nodeMap["blocR"])->edRemoveChild(_nodeMap["Node_5"]);
911 ((Bloc *)_nodeMap["blocR"])->edRemoveChild(_nodeMap["Node_7"]);
913 list<ElementaryNode *> setelem = _nodeMap["blocR"]->getRecursiveConstituents();
914 CPPUNIT_ASSERT(setelem.size() == 0);
918 void EngineTest::RecursiveBlocs_multipleRecursion()
921 Bloc* bloc = new Bloc("bloc4");
922 _nodeMap["bloc4"] = bloc;
923 _compoMap["bloc4"] = bloc;
924 bloc->edAddChild(_nodeMap["Node_5"]);
925 bloc->edAddChild(_nodeMap["Node_6"]);
929 Bloc* bloc = new Bloc("bloc5");
930 _nodeMap["bloc5"] = bloc;
931 _compoMap["bloc5"] = bloc;
932 bloc->edAddChild(_nodeMap["Node_7"]);
933 bloc->edAddChild(_nodeMap["Node_8"]);
937 Bloc* bloc = new Bloc("bloc6");
938 _nodeMap["bloc6"] = bloc;
939 _compoMap["bloc6"] = bloc;
940 bloc->edAddChild(_nodeMap["bloc4"]);
941 bloc->edAddChild(_nodeMap["bloc5"]);
945 Bloc* bloc = new Bloc("bloc7");
946 _nodeMap["bloc7"] = bloc;
947 _compoMap["bloc7"] = bloc;
948 bloc->edAddChild(_nodeMap["bloc3"]);
949 bloc->edAddChild(_nodeMap["bloc6"]);
953 Bloc* bloc = new Bloc("graphe");
954 _nodeMap["graphe"] = bloc;
955 _compoMap["graphe"] = bloc;
956 bloc->edAddChild(_nodeMap["bloc7"]);
957 bloc->edAddChild(_nodeMap["Node_9"]);
961 list<ElementaryNode *> setelem = _nodeMap["graphe"]->getRecursiveConstituents();
962 CPPUNIT_ASSERT(setelem.size() == 9);
963 for (list<ElementaryNode*>::iterator it=setelem.begin(); it!=setelem.end(); it++)
965 DEBTRACE(" elem name = " << (*it)->getName());
970 list<InputPort *> inset = _nodeMap["bloc7"]->getSetOfInputPort();
971 list<OutputPort *> outset = _nodeMap["bloc7"]->getSetOfOutputPort();
972 for (list<InputPort *>::iterator it=inset.begin(); it!=inset.end(); it++)
974 DEBTRACE(" input port name for bloc7 = " << _nodeMap["bloc7"]->getInPortName(*it));
975 DEBTRACE(" input port name for graphe = " << _nodeMap["graphe"]->getInPortName(*it));
977 for (list<OutputPort *>::iterator it=outset.begin(); it!=outset.end(); it++)
979 DEBTRACE(" output port name for bloc7 = " << _nodeMap["bloc7"]->getOutPortName(*it));
980 DEBTRACE(" output port name for graphe = " << _nodeMap["graphe"]->getOutPortName(*it));
982 YACS::ENGINE::VisitorSaveState vst(_compoMap["graphe"]);
983 vst.openFileDump("dumpState.xml");
984 _compoMap["graphe"]->accept(&vst);
989 void EngineTest::RecursiveBlocs_removeNodes()
992 // set<Node *> setNodes = ((Bloc*)_nodeMap["graphe"])->getChildren();
993 // for (set<Node*>::iterator it=setNodes.begin(); it!=setNodes.end(); it++)
995 // DEBTRACE(" child name = " << (*it)->getName());
1000 list<Node *> setNode = ((Bloc*)_nodeMap["graphe"])->getAllRecursiveConstituents();
1001 CPPUNIT_ASSERT(setNode.size() == 16);
1002 list<InputPort *> inset = _nodeMap["bloc7"]->getSetOfInputPort();
1003 list<OutputPort *> outset = _nodeMap["bloc7"]->getSetOfOutputPort();
1004 DEBTRACE(" input port number in graph: " <<inset.size());
1005 DEBTRACE(" output port number in graph: " <<outset.size());
1006 CPPUNIT_ASSERT(inset.size() == 32);
1007 CPPUNIT_ASSERT(outset.size() == 24);
1010 ((Bloc *)_nodeMap["bloc7"])->edRemoveChild(_nodeMap["bloc6"]);
1013 list<Node *> setNode = ((Bloc*)_nodeMap["graphe"])->getAllRecursiveConstituents();
1014 CPPUNIT_ASSERT(setNode.size() == 9);
1015 for (list<Node*>::iterator it=setNode.begin(); it!=setNode.end(); it++)
1017 DEBTRACE(" elem name = " << ((Bloc *)_nodeMap["graphe"])->getChildName(*it));
1019 list<InputPort *> inset = _nodeMap["bloc7"]->getSetOfInputPort();
1020 list<OutputPort *> outset = _nodeMap["bloc7"]->getSetOfOutputPort();
1021 DEBTRACE(" input port number in graph: " <<inset.size());
1022 DEBTRACE(" output port number in graph: " <<outset.size());
1023 CPPUNIT_ASSERT(inset.size() == 16);
1024 CPPUNIT_ASSERT(outset.size() == 12);
1029 void EngineTest::checkLogger()
1031 Proc* proc=new Proc("proc");
1032 Logger* logger=proc->getLogger("parser");
1033 logger->error("error1","file.cxx",324);
1034 logger->error("error2","file.cxx",852);
1035 CPPUNIT_ASSERT(logger->hasErrors()==true);
1036 CPPUNIT_ASSERT(logger->isEmpty()==false);
1037 const char* expected1="LogRecord: parser:ERROR:error1 (file.cxx:324)\n"
1038 "LogRecord: parser:ERROR:error2 (file.cxx:852)\n";
1039 CPPUNIT_ASSERT(logger->getStr()==expected1);
1042 CPPUNIT_ASSERT(logger->hasErrors()==false);
1043 CPPUNIT_ASSERT(logger->isEmpty()==true);
1045 logger->error("error1","file.cxx",324);
1046 logger->error("error2","file.cxx",852);
1047 logger->error("error3","file.cxx",978);
1048 CPPUNIT_ASSERT(logger->hasErrors()==true);
1049 CPPUNIT_ASSERT(logger->isEmpty()==false);
1050 const char* expected2="LogRecord: parser:ERROR:error1 (file.cxx:324)\n"
1051 "LogRecord: parser:ERROR:error2 (file.cxx:852)\n"
1052 "LogRecord: parser:ERROR:error3 (file.cxx:978)\n";
1053 CPPUNIT_ASSERT(logger->getStr()==expected2);