Salome HOME
First implementation of evalyfx.
[modules/yacs.git] / src / evalyfx_swig / testEvalYFX.py
1 import unittest
2
3 class TestEvalYFX(unittest.TestCase):
4     def test0(self):
5         fileName="test0.xml"
6         self.__buildScheme(fileName)
7         import evalyfx
8         efx=evalyfx.YACSEvalYFX.BuildFromFile(fileName)
9         inps=efx.getFreeInputPorts()
10         self.assertEqual([elt.getName() for elt in inps],['a','b','e'])
11         self.assertEqual([elt.hasDefaultValueDefined() for elt in inps],[False,True,True])
12         self.assertAlmostEqual(inps[1].getDefaultValueDefined(),1.3,12)
13         self.assertAlmostEqual(inps[2].getDefaultValueDefined(),2.5,12)
14         #
15         inps[0].setDefaultValue(3.4)
16         self.assertEqual([elt.hasDefaultValueDefined() for elt in inps],[True,True,True])
17         self.assertAlmostEqual(inps[0].getDefaultValueDefined(),3.4,12)
18         #
19         inps[0].setDefaultValue(None)
20         self.assertEqual([elt.hasDefaultValueDefined() for elt in inps],[False,True,True])
21         inps[2].setDefaultValue(2.7)
22         self.assertAlmostEqual(inps[2].getDefaultValueDefined(),2.7,12)
23         inps[2].setDefaultValue(None)
24         self.assertEqual([elt.hasDefaultValueDefined() for elt in inps],[False,True,False])
25         self.assertRaises(ValueError,inps[0].getDefaultValueDefined)
26         self.assertAlmostEqual(inps[1].getDefaultValueDefined(),1.3,12)
27         self.assertRaises(ValueError,inps[2].getDefaultValueDefined)
28         #
29         outps=efx.getFreeOutputPorts()
30         self.assertEqual([elt.getName() for elt in outps],['c','f','g'])
31         # prepare for execution
32         inps[0].setDefaultValue(1.1)
33         inps[1].setSequenceOfValuesToEval([10.1,10.2,10.3])
34         self.assertRaises(ValueError,efx.lockPortsForEvaluation,[outps[0],outps[2]]) # because e is not set
35         a,b=inps[2].hasSequenceOfValuesToEval()
36         self.assertTrue(not a)
37         inps[2].setSequenceOfValuesToEval([20.1,20.2,30.3,40.4])
38         a,b=inps[2].hasSequenceOfValuesToEval()
39         self.assertTrue(a)
40         self.assertEqual(b,4)
41         self.assertRaises(ValueError,efx.lockPortsForEvaluation,[outps[0],outps[2]]) # because size of vals of e is not equal to size of vals of a
42         inps[2].setSequenceOfValuesToEval([20.1,20.2,30.3])
43         efx.lockPortsForEvaluation([outps[0],outps[2]])
44         #
45         g=efx.getUndergroundGeneratedGraph()
46         g.saveSchema("toto.xml")
47         #
48         
49         pass
50
51     def __buildScheme(self,fname):
52         import SALOMERuntime
53         import loader
54         SALOMERuntime.RuntimeSALOME.setRuntime()
55         r=SALOMERuntime.getSALOMERuntime()
56         p=r.createProc("run")
57         td=p.createType("double","double")
58         #
59         cont=p.createContainer("zeCont","Salome")
60         #
61         n0=r.createFuncNode("Salome","node0")
62         p.edAddChild(n0)
63         n0.setFname("func0")
64         n0.setContainer(cont)
65         n0.setScript("""def func0(a,b):
66   return a*b
67 """)
68         n0.setExecutionMode("remote")
69         a=n0.edAddInputPort("a",td)
70         b=n0.edAddInputPort("b",td)  ; b.edInitPy(1.3)
71         c=n0.edAddOutputPort("c",td)
72         #
73         n1=r.createFuncNode("Salome","node1")
74         p.edAddChild(n1)
75         n1.setFname("func1")
76         n1.setContainer(cont)
77         n1.setScript("""def func1(a,b):
78   return a+b,3*(a+b)
79 """)
80         n1.setExecutionMode("remote")
81         d=n1.edAddInputPort("d",td)
82         e=n1.edAddInputPort("e",td)  ; e.edInitPy(2.5) # agy : useless but for test
83         f=n1.edAddOutputPort("f",td)
84         g=n1.edAddOutputPort("g",td)
85         #
86         p.edAddCFLink(n0,n1)
87         p.edAddLink(c,d)
88         #
89         p.saveSchema(fname)
90         pass
91     pass
92
93 if __name__ == '__main__':
94     unittest.main()