xref: /petsc/src/binding/petsc4py/test/test_gc.py (revision 6f33641175f69f1db294cc9ba81c3f4ad4f81d49)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
3*6f336411SStefano Zampiniimport gc
4*6f336411SStefano Zampiniimport weakref
55808f684SSatish Balay
65808f684SSatish Balay# --------------------------------------------------------------------
75808f684SSatish Balay
85808f684SSatish Balay## gc.set_debug((gc.DEBUG_STATS |
95808f684SSatish Balay##               gc.DEBUG_LEAK) &
105808f684SSatish Balay##              ~gc.DEBUG_SAVEALL)
115808f684SSatish Balay
125808f684SSatish Balay# --------------------------------------------------------------------
135808f684SSatish Balay
145808f684SSatish Balay
15*6f336411SStefano Zampiniclass BaseTestGC:
165808f684SSatish Balay    def setUp(self):
175808f684SSatish Balay        self.obj = self.CLASS().create(comm=PETSc.COMM_SELF)
185808f684SSatish Balay
195808f684SSatish Balay    def tearDown(self):
205808f684SSatish Balay        wref = self.make_weakref()
215808f684SSatish Balay        self.assertTrue(wref() is self.obj)
225808f684SSatish Balay        self.obj = None
235808f684SSatish Balay        gc.collect()
245808f684SSatish Balay        self.assertTrue(wref() is None)
2562e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
265808f684SSatish Balay
275808f684SSatish Balay    def make_weakref(self):
28*6f336411SStefano Zampini        return weakref.ref(self.obj)
295808f684SSatish Balay
305808f684SSatish Balay    def testCycleInSelf(self):
315808f684SSatish Balay        self.obj.setAttr('myself', self.obj)
325808f684SSatish Balay
335808f684SSatish Balay    def testCycleInMethod(self):
345808f684SSatish Balay        self.obj.setAttr('mymeth', self.obj.view)
355808f684SSatish Balay
365808f684SSatish Balay    def testCycleInInstance(self):
37*6f336411SStefano Zampini        class A:
38*6f336411SStefano Zampini            pass
39*6f336411SStefano Zampini
405808f684SSatish Balay        a = A()
415808f684SSatish Balay        a.obj = self.obj
425808f684SSatish Balay        self.obj.setAttr('myinst', a)
435808f684SSatish Balay
445808f684SSatish Balay    def testCycleInAllWays(self):
455808f684SSatish Balay        self.testCycleInSelf()
465808f684SSatish Balay        self.testCycleInMethod()
475808f684SSatish Balay        self.testCycleInInstance()
485808f684SSatish Balay
49*6f336411SStefano Zampini
505808f684SSatish Balay# --------------------------------------------------------------------
515808f684SSatish Balay
52*6f336411SStefano Zampini
535808f684SSatish Balayclass TestGCVec(BaseTestGC, unittest.TestCase):
545808f684SSatish Balay    CLASS = PETSc.Vec
555808f684SSatish Balay
56*6f336411SStefano Zampini
575808f684SSatish Balayclass TestGCVecSubType(TestGCVec):
585808f684SSatish Balay    CLASS = type('_Vec', (PETSc.Vec,), {})
595808f684SSatish Balay
60*6f336411SStefano Zampini
615808f684SSatish Balayclass TestGCMat(BaseTestGC, unittest.TestCase):
625808f684SSatish Balay    CLASS = PETSc.Mat
635808f684SSatish Balay
64*6f336411SStefano Zampini
655808f684SSatish Balayclass TestGCMatSubType(TestGCMat):
665808f684SSatish Balay    CLASS = type('_Mat', (PETSc.Mat,), {})
675808f684SSatish Balay
68*6f336411SStefano Zampini
695808f684SSatish Balayclass TestGCPC(BaseTestGC, unittest.TestCase):
705808f684SSatish Balay    CLASS = PETSc.PC
715808f684SSatish Balay
72*6f336411SStefano Zampini
735808f684SSatish Balayclass TestGCPCSubType(TestGCPC):
745808f684SSatish Balay    CLASS = type('_PC', (PETSc.PC,), {})
755808f684SSatish Balay
76*6f336411SStefano Zampini
775808f684SSatish Balayclass TestGCKSP(BaseTestGC, unittest.TestCase):
785808f684SSatish Balay    CLASS = PETSc.KSP
795808f684SSatish Balay
80*6f336411SStefano Zampini
815808f684SSatish Balayclass TestGCKSPSubType(TestGCKSP):
825808f684SSatish Balay    CLASS = type('_KSP', (PETSc.KSP,), {})
835808f684SSatish Balay
84*6f336411SStefano Zampini
855808f684SSatish Balayclass TestGCSNES(BaseTestGC, unittest.TestCase):
865808f684SSatish Balay    CLASS = PETSc.SNES
87*6f336411SStefano Zampini
885808f684SSatish Balay    def testCycleInAppCtx(self):
895808f684SSatish Balay        self.obj.setAppCtx(self.obj)
905808f684SSatish Balay
91*6f336411SStefano Zampini
925808f684SSatish Balayclass TestGCSNESSubType(TestGCSNES):
935808f684SSatish Balay    CLASS = type('_SNES', (PETSc.SNES,), {})
945808f684SSatish Balay
95*6f336411SStefano Zampini
965808f684SSatish Balayclass TestGCTS(BaseTestGC, unittest.TestCase):
975808f684SSatish Balay    CLASS = PETSc.TS
98*6f336411SStefano Zampini
995808f684SSatish Balay    def testCycleInAppCtx(self):
1005808f684SSatish Balay        self.obj.setAppCtx(self.obj)
1015808f684SSatish Balay
102*6f336411SStefano Zampini
1035808f684SSatish Balayclass TestGCTSSubType(TestGCTS):
1045808f684SSatish Balay    CLASS = type('_TS', (PETSc.TS,), {})
105*6f336411SStefano Zampini
1065808f684SSatish Balay    def testCycleInAppCtx(self):
1075808f684SSatish Balay        self.obj.setAppCtx(self.obj)
1085808f684SSatish Balay
109*6f336411SStefano Zampini
1105808f684SSatish Balay# --------------------------------------------------------------------
1115808f684SSatish Balay
1125808f684SSatish Balayif __name__ == '__main__':
1135808f684SSatish Balay    unittest.main()
114