Salome HOME
updated copyright message
[modules/yacs.git] / src / yacsloader_swig / Test / testRefcount.py
1 #!/usr/bin/env python3
2 # Copyright (C) 2006-2023  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import unittest
22 import pilot
23 import SALOMERuntime
24
25 class TestContainerRef(unittest.TestCase):
26   def setUp(self):
27     SALOMERuntime.RuntimeSALOME_setRuntime()
28     self.r=SALOMERuntime.getSALOMERuntime()
29     self.p=self.r.createProc("pr")
30
31   def test0(self):
32     """test delete following creation from class"""
33     co=self.r.createContainer()
34     self.assertEqual(co.getRefCnt(), 1)
35     self.assertTrue(co.thisown)
36     del co
37
38   def test1(self):
39     """test delete following creation from createContainer and delitem from containerMap"""
40     co=self.p.createContainer("c2")
41     del self.p.containerMap["c2"]
42     self.assertTrue(co.thisown)
43     self.assertEqual(co.getRefCnt(), 1)
44     del co
45
46   def test2(self):
47     """test delete following creation from createContainer and
48        manipulations on containerMap
49     """
50     co=self.p.createContainer("c2")
51     self.p.containerMap["c2"]=co
52     del self.p.containerMap["c2"]
53     self.assertTrue(co.thisown)
54     self.assertEqual(co.getRefCnt(), 1)
55     del co
56
57   def test3(self):
58     """test existence on getitem followed by delitem"""
59     self.p.createContainer("c9")
60     co=self.p.containerMap["c9"]
61     self.assertEqual(co.getRefCnt(), 2)
62     del self.p.containerMap["c9"]
63     self.assertEqual(co.getName(), "c9")
64     self.assertEqual(co.getRefCnt(), 1)
65     self.assertTrue(co.thisown)
66     del co
67
68   def test4(self):
69     """test delete from containerMap following creation from createContainer"""
70     co=self.p.createContainer("c10")
71     del self.p.containerMap["c10"]
72     self.assertEqual(co.getName(), "c10")
73     self.assertEqual(co.getRefCnt(), 1)
74     self.assertTrue(co.thisown)
75     del co
76
77   def test5(self):
78     """test existence container following delete proc"""
79     co=self.p.createContainer("c10")
80     del self.p
81     self.assertEqual(co.getName(), "c10")
82     self.assertEqual(co.getRefCnt(), 1)
83     self.assertTrue(co.thisown)
84     del co
85
86   def test6(self):
87     """test ownership of container on getitem from containerMap"""
88     co=self.p.createContainer("c8")
89     self.assertEqual(co.getRefCnt(), 2)
90     self.assertTrue(co.thisown)
91     del co
92     self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
93     co=self.p.containerMap["c8"]
94     self.assertEqual(co.getRefCnt(), 2)
95     self.assertTrue(co.thisown)
96     del co
97     self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
98     del self.p.containerMap["c8"]
99
100   def test7(self):
101     """test getitem following creation from class"""
102     co=self.r.createContainer()
103     self.assertEqual(co.getRefCnt(), 1)
104     self.p.containerMap["c8"]=co
105     self.assertEqual(co.getRefCnt(), 2)
106     d=self.p.containerMap["c8"]
107     self.assertEqual(d.getRefCnt(), 3)
108     del self.p.containerMap["c8"]
109     self.assertEqual(d.getRefCnt(), 2)
110     self.assertEqual(co.getRefCnt(), 2)
111     del co
112     self.assertEqual(d.getRefCnt(), 1)
113
114   def test8(self):
115     """test setitem following creation from class"""
116     co=self.r.createContainer()
117     self.p.containerMap["c8"]=co
118     d=self.p.containerMap["c8"]
119     self.p.containerMap["c9"]=d
120     self.assertEqual(d.getRefCnt(), 4)
121
122   def test9(self):
123     """test method values"""
124     self.p.createContainer("c8")
125     for co in list(self.p.containerMap.values()):
126       self.assertTrue(co.thisown)
127       self.assertEqual(co.getRefCnt(), 2)
128
129   def test10(self):
130     """test method items"""
131     self.p.createContainer("c8")
132     for k,co in list(self.p.containerMap.items()):
133       self.assertTrue(co.thisown)
134       self.assertEqual(co.getRefCnt(), 2)
135
136   def test11(self):
137     """test method clear"""
138     co=self.p.createContainer("c8")
139     self.p.containerMap.clear()
140     self.assertTrue(co.thisown)
141     self.assertEqual(co.getRefCnt(), 1)
142
143   def test12(self):
144     """test method update"""
145     co=self.p.createContainer("c8")
146     d={"c1":co}
147     self.p.containerMap.update(d)
148     self.assertTrue(co.thisown)
149     self.assertEqual(co.getRefCnt(), 3)
150
151 class TestTypeCodeRef(unittest.TestCase):
152   def setUp(self):
153     self.r=SALOMERuntime.getSALOMERuntime()
154     self.p=self.r.createProc("pr")
155
156   def test0(self):
157     """test delete following creation from createSequenceTc"""
158     tc=pilot.TypeCode(pilot.Double)
159     self.assertEqual(tc.getRefCnt(), 1)
160     self.assertTrue(tc.thisown)
161
162   def test1(self):
163     """test delete following creation from createInterfaceTc and delitem from typeMap"""
164     tc=self.p.createInterfaceTc("","obj",[])
165     del self.p.typeMap["obj"]
166     self.assertTrue(tc.thisown)
167     self.assertEqual(tc.getRefCnt(), 1)
168
169   def test2(self):
170     """test delete following creation from createInterfaceTc and
171        manipulations on typeMap
172     """
173     tc=self.p.createInterfaceTc("","obj",[])
174     self.p.typeMap["obj"]=tc
175     del self.p.typeMap["obj"]
176     self.assertTrue(tc.thisown)
177     self.assertEqual(tc.getRefCnt(), 1)
178
179   def test3(self):
180     """test existence on getitem followed by delitem"""
181     self.p.createInterfaceTc("","obj",[])
182     tc=self.p.typeMap["obj"]
183     self.assertEqual(tc.getRefCnt(), 2)
184     del self.p.typeMap["obj"]
185     self.assertEqual(tc.getRefCnt(), 1)
186     self.assertTrue(tc.thisown)
187
188   def test4(self):
189     """test delete from typeMap following creation from createInterfaceTc"""
190     tc=self.p.createInterfaceTc("","obj",[])
191     del self.p.typeMap["obj"]
192     self.assertEqual(tc.getRefCnt(), 1)
193     self.assertTrue(tc.thisown)
194
195   def test5(self):
196     """test existence TypeCode following delete proc"""
197     tc=self.p.createInterfaceTc("","obj",[])
198     del self.p
199     self.assertEqual(tc.getRefCnt(), 1)
200     self.assertTrue(tc.thisown)
201
202   def test6(self):
203     """test ownership of TypeCode on getitem from typeMap"""
204     tc=self.p.createInterfaceTc("","obj",[])
205     self.assertEqual(tc.getRefCnt(), 2)
206     self.assertTrue(tc.thisown)
207     del tc
208     self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
209     tc=self.p.typeMap["obj"]
210     self.assertEqual(tc.getRefCnt(), 2)
211     self.assertTrue(tc.thisown)
212     del tc
213     self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
214     del self.p.typeMap["obj"]
215
216   def test7(self):
217     """test getitem following creation from class"""
218     tc=pilot.TypeCode.interfaceTc("obj","obj")
219     self.assertEqual(tc.getRefCnt(), 1)
220     self.p.typeMap["obj"]=tc
221     self.assertEqual(tc.getRefCnt(), 2)
222     d=self.p.typeMap["obj"]
223     self.assertEqual(d.getRefCnt(), 3)
224     del self.p.typeMap["obj"]
225     self.assertEqual(d.getRefCnt(), 2)
226     self.assertEqual(tc.getRefCnt(), 2)
227     del tc
228     self.assertEqual(d.getRefCnt(), 1)
229
230   def test8(self):
231     """test setitem following creation from class"""
232     tc=pilot.TypeCodeObjref("obj","obj")
233     self.p.typeMap["obj"]=tc
234     d=self.p.typeMap["obj"]
235     self.p.typeMap["t9"]=d
236     self.assertEqual(d.getRefCnt(), 4)
237
238   def test9(self):
239     """test method values"""
240     self.p.createInterfaceTc("","obj",[])
241     for tc in list(self.p.typeMap.values()):
242       if tc.name()!="obj":continue
243       self.assertTrue(tc.thisown)
244       self.assertEqual(tc.getRefCnt(), 2)
245
246   def test10(self):
247     """test method items"""
248     self.p.createInterfaceTc("","obj",[])
249     for k,tc in list(self.p.typeMap.items()):
250       if tc.name()!="obj":continue
251       self.assertTrue(tc.thisown)
252       self.assertEqual(tc.getRefCnt(), 2)
253
254   def test11(self):
255     """test method clear"""
256     tc=self.p.createInterfaceTc("","obj",[])
257     self.p.typeMap.clear()
258     self.assertTrue(tc.thisown)
259     self.assertEqual(tc.getRefCnt(), 1)
260
261   def test12(self):
262     """test method update"""
263     tc=self.p.createInterfaceTc("","obj",[])
264     d={"c1":tc}
265     self.p.typeMap.update(d)
266     self.assertTrue(tc.thisown)
267     self.assertEqual(tc.getRefCnt(), 3)
268
269 if __name__ == '__main__':
270   import tempfile
271   import os
272   dir_test = tempfile.mkdtemp(suffix=".yacstest")
273   file_test = os.path.join(dir_test,"UnitTestsResult")
274   with open(file_test, 'a') as f:
275       f.write("  --- TEST src/yacsloader: testRefcount.py\n")
276       suite1 = unittest.makeSuite(TestContainerRef)
277       suite2 = unittest.makeSuite(TestTypeCodeRef)
278       suite = unittest.TestSuite((suite1, suite2))
279       result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
280   sys.exit(not result.wasSuccessful())