5 #include "InputPort.hxx"
6 #include "OutputPort.hxx"
8 #include <cppunit/extensions/HelperMacros.h>
9 #include <cppunit/ui/text/TestRunner.h>
13 using namespace YACS::ENGINE;
15 class PortsTest : public CppUnit::TestFixture
17 CPPUNIT_TEST_SUITE( PortsTest );
18 CPPUNIT_TEST( testControlFlow );
19 CPPUNIT_TEST( testDataFlow1 );
20 CPPUNIT_TEST_EXCEPTION( testDataFlowTypeCheck, YACS::ENGINE::ConversionException);
21 CPPUNIT_TEST_SUITE_END();
24 void testControlFlow();
26 void testDataFlowTypeCheck();
29 void PortsTest::tearDown()
33 void PortsTest::testControlFlow()
35 Node *n1=0,*n2=0,*n3=0,*n4=0;
36 OutGate *o1=new OutGate(n1);
37 OutGate *o2=new OutGate(n2);
38 OutGate *o3=new OutGate(n3);
39 OutGate *o4=new OutGate(n4);
40 InGate *i1=new InGate(n1);
41 InGate *i2=new InGate(n2);
42 InGate *i3=new InGate(n3);
43 InGate *i4=new InGate(n4);
45 o1->edAddInGate(i2); o1->edAddInGate(i3);
46 o2->edAddInGate(i2); o2->edAddInGate(i4);
47 o3->edAddInGate(i2); o3->edAddInGate(i4); o3->edAddInGate(i3);
48 o4->edAddInGate(i2); o4->edAddInGate(i4);
50 CPPUNIT_ASSERT( i1->exIsReady() ); CPPUNIT_ASSERT( !i2->exIsReady() ); CPPUNIT_ASSERT( !i3->exIsReady() ); CPPUNIT_ASSERT( !i4->exIsReady() );
52 CPPUNIT_ASSERT( i1->exIsReady() ); CPPUNIT_ASSERT( !i2->exIsReady() ); CPPUNIT_ASSERT( !i3->exIsReady() ); CPPUNIT_ASSERT( !i4->exIsReady() );
54 CPPUNIT_ASSERT( i1->exIsReady() ); CPPUNIT_ASSERT( !i2->exIsReady() ); CPPUNIT_ASSERT( !i3->exIsReady() ); CPPUNIT_ASSERT( !i4->exIsReady() );
56 CPPUNIT_ASSERT( i1->exIsReady() ); CPPUNIT_ASSERT( !i2->exIsReady() ); CPPUNIT_ASSERT( i3->exIsReady() ); CPPUNIT_ASSERT( !i4->exIsReady() );
58 CPPUNIT_ASSERT( i1->exIsReady() ); CPPUNIT_ASSERT( i2->exIsReady() ); CPPUNIT_ASSERT( i3->exIsReady() ); CPPUNIT_ASSERT( i4->exIsReady() );
60 delete o1; delete o2; delete o3; delete o4;
61 delete i1; delete i2; delete i3; delete i4;
64 void PortsTest::testDataFlow1()
66 Node *n1=0,*n2=0,*n3=0,*n4=0;
67 OutputPort *o1=new OutputPort("o1",n1,YACS::Double);
68 OutputPort *o3=new OutputPort("o3",n3,YACS::Int);
69 InputPort *i1=new InputPort("i1",n1,YACS::Double);
70 InputPort *i2=new InputPort("i2",n2,YACS::Int);
71 InputPort *i4=new InputPort("i4",n4,YACS::Bool);
73 o1->edAddInputPort(i1); o1->edAddInputPort(i2);
74 o3->edAddInputPort(i1); o3->edAddInputPort(i2); o3->edAddInputPort(i4);
75 CPPUNIT_ASSERT( o1->foGet().edGetRepresentation() == "41_NULL" ); CPPUNIT_ASSERT( o3->foGet().edGetRepresentation() == "42_NULL" );
76 CPPUNIT_ASSERT( i1->exGet().edGetRepresentation() == "41_NULL" ); CPPUNIT_ASSERT( i2->exGet().edGetRepresentation() == "42_NULL" ); CPPUNIT_ASSERT( i4->exGet().edGetRepresentation() == "45_NULL" );
79 CPPUNIT_ASSERT( i1->exGet().edGetRepresentation() == "41_3.14" ); CPPUNIT_ASSERT( i2->exGet().edGetRepresentation() == "42_3" ); CPPUNIT_ASSERT( i4->exGet().edGetRepresentation() == "45_NULL" );
81 CPPUNIT_ASSERT( i1->exGet().edGetRepresentation() == "41_325" ); CPPUNIT_ASSERT( i2->exGet().edGetRepresentation() == "42_325" ); CPPUNIT_ASSERT( i4->exGet().edGetRepresentation() == "45_1" );
83 CPPUNIT_ASSERT( i1->exGet().edGetRepresentation() == "41_-2.78" ); CPPUNIT_ASSERT( i2->exGet().edGetRepresentation() == "42_-2" ); CPPUNIT_ASSERT( i4->exGet().edGetRepresentation() == "45_1" );
86 delete i1; delete i2; delete i4;
89 void PortsTest::testDataFlowTypeCheck()
92 OutputPort o1("o1",n1,YACS::Double);
93 InputPort i1("i1",n1,YACS::Bool);
94 o1.edAddInputPort(&i1);//Should throw exception
99 CppUnit::TextUi::TestRunner runner;
100 runner.addTest( PortsTest::suite() );