15808f684SSatish Balayfrom petsc4py import PETSc 25808f684SSatish Balayimport unittest 35808f684SSatish Balayimport gc, weakref 45808f684SSatish Balayimport warnings 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 Balayclass BaseTestGC(object): 155808f684SSatish Balay 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) 25*62e5d2d2SJDBetteridge PETSc.garbage_cleanup() 265808f684SSatish Balay 275808f684SSatish Balay def make_weakref(self): 285808f684SSatish Balay wref = weakref.ref(self.obj) 295808f684SSatish Balay return wref 305808f684SSatish Balay 315808f684SSatish Balay def testCycleInSelf(self): 325808f684SSatish Balay self.obj.setAttr('myself', self.obj) 335808f684SSatish Balay 345808f684SSatish Balay def testCycleInMethod(self): 355808f684SSatish Balay self.obj.setAttr('mymeth', self.obj.view) 365808f684SSatish Balay 375808f684SSatish Balay def testCycleInInstance(self): 385808f684SSatish Balay class A: pass 395808f684SSatish Balay a = A() 405808f684SSatish Balay a.obj = self.obj 415808f684SSatish Balay self.obj.setAttr('myinst', a) 425808f684SSatish Balay 435808f684SSatish Balay def testCycleInAllWays(self): 445808f684SSatish Balay self.testCycleInSelf() 455808f684SSatish Balay self.testCycleInMethod() 465808f684SSatish Balay self.testCycleInInstance() 475808f684SSatish Balay 485808f684SSatish Balay# -------------------------------------------------------------------- 495808f684SSatish Balay 505808f684SSatish Balayclass TestGCVec(BaseTestGC, unittest.TestCase): 515808f684SSatish Balay CLASS = PETSc.Vec 525808f684SSatish Balay 535808f684SSatish Balayclass TestGCVecSubType(TestGCVec): 545808f684SSatish Balay CLASS = type('_Vec', (PETSc.Vec,), {}) 555808f684SSatish Balay 565808f684SSatish Balayclass TestGCMat(BaseTestGC, unittest.TestCase): 575808f684SSatish Balay CLASS = PETSc.Mat 585808f684SSatish Balay 595808f684SSatish Balayclass TestGCMatSubType(TestGCMat): 605808f684SSatish Balay CLASS = type('_Mat', (PETSc.Mat,), {}) 615808f684SSatish Balay 625808f684SSatish Balayclass TestGCPC(BaseTestGC, unittest.TestCase): 635808f684SSatish Balay CLASS = PETSc.PC 645808f684SSatish Balay 655808f684SSatish Balayclass TestGCPCSubType(TestGCPC): 665808f684SSatish Balay CLASS = type('_PC', (PETSc.PC,), {}) 675808f684SSatish Balay 685808f684SSatish Balayclass TestGCKSP(BaseTestGC, unittest.TestCase): 695808f684SSatish Balay CLASS = PETSc.KSP 705808f684SSatish Balay 715808f684SSatish Balayclass TestGCKSPSubType(TestGCKSP): 725808f684SSatish Balay CLASS = type('_KSP', (PETSc.KSP,), {}) 735808f684SSatish Balay 745808f684SSatish Balayclass TestGCSNES(BaseTestGC, unittest.TestCase): 755808f684SSatish Balay CLASS = PETSc.SNES 765808f684SSatish Balay def testCycleInAppCtx(self): 775808f684SSatish Balay self.obj.setAppCtx(self.obj) 785808f684SSatish Balay 795808f684SSatish Balayclass TestGCSNESSubType(TestGCSNES): 805808f684SSatish Balay CLASS = type('_SNES', (PETSc.SNES,), {}) 815808f684SSatish Balay 825808f684SSatish Balayclass TestGCTS(BaseTestGC, unittest.TestCase): 835808f684SSatish Balay CLASS = PETSc.TS 845808f684SSatish Balay def testCycleInAppCtx(self): 855808f684SSatish Balay self.obj.setAppCtx(self.obj) 865808f684SSatish Balay 875808f684SSatish Balayclass TestGCTSSubType(TestGCTS): 885808f684SSatish Balay CLASS = type('_TS', (PETSc.TS,), {}) 895808f684SSatish Balay def testCycleInAppCtx(self): 905808f684SSatish Balay self.obj.setAppCtx(self.obj) 915808f684SSatish Balay 925808f684SSatish Balay# -------------------------------------------------------------------- 935808f684SSatish Balay 945808f684SSatish Balayif __name__ == '__main__': 955808f684SSatish Balay unittest.main() 96