Salome HOME
Correction on evalyfx to take into account about first feedback.
[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,[inps[1]],[outps[0],outps[2]]) # because e is not set
35         a=inps[2].hasSequenceOfValuesToEval()
36         self.assertTrue(not a)
37         inps[2].setSequenceOfValuesToEval([20.1,20.2,30.3,40.4])
38         a=inps[2].hasSequenceOfValuesToEval()
39         self.assertTrue(a)
40         efx.lockPortsForEvaluation([inps[1],inps[2]],[outps[0],outps[2]])
41         inps[2].setSequenceOfValuesToEval([20.1,20.2,30.3])
42         #
43         g=efx.getUndergroundGeneratedGraph()
44         g.saveSchema("toto.xml")
45         #
46         
47         pass
48
49     def __buildScheme(self,fname):
50         import SALOMERuntime
51         import loader
52         SALOMERuntime.RuntimeSALOME.setRuntime()
53         r=SALOMERuntime.getSALOMERuntime()
54         p=r.createProc("run")
55         td=p.createType("double","double")
56         #
57         cont=p.createContainer("zeCont","Salome")
58         #
59         n0=r.createFuncNode("Salome","node0")
60         p.edAddChild(n0)
61         n0.setFname("func0")
62         n0.setContainer(cont)
63         n0.setScript("""def func0(a,b):
64   return a*b
65 """)
66         n0.setExecutionMode("remote")
67         a=n0.edAddInputPort("a",td)
68         b=n0.edAddInputPort("b",td)  ; b.edInitPy(1.3)
69         c=n0.edAddOutputPort("c",td)
70         #
71         n1=r.createFuncNode("Salome","node1")
72         p.edAddChild(n1)
73         n1.setFname("func1")
74         n1.setContainer(cont)
75         n1.setScript("""def func1(a,b):
76   return a+b,3*(a+b)
77 """)
78         n1.setExecutionMode("remote")
79         d=n1.edAddInputPort("d",td)
80         e=n1.edAddInputPort("e",td)  ; e.edInitPy(2.5) # agy : useless but for test
81         f=n1.edAddOutputPort("f",td)
82         g=n1.edAddOutputPort("g",td)
83         #
84         p.edAddCFLink(n0,n1)
85         p.edAddLink(c,d)
86         #
87         p.saveSchema(fname)
88         pass
89     pass
90
91 if __name__ == '__main__':
92     unittest.main()