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