1199ce8e4SStefano Zampinifrom petsc4py import PETSc 2199ce8e4SStefano Zampiniimport unittest 3199ce8e4SStefano Zampini 4199ce8e4SStefano Zampini# -------------------------------------------------------------------- 5199ce8e4SStefano Zampini 6199ce8e4SStefano Zampini 7199ce8e4SStefano Zampiniclass TestDevice(unittest.TestCase): 8199ce8e4SStefano Zampini def testCurrent(self): 9199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().getCurrent() 10*7af56e5cSStefano Zampini if not dctx: 11*7af56e5cSStefano Zampini return 12199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 2) 13199ce8e4SStefano Zampini device = dctx.getDevice() 14199ce8e4SStefano Zampini del device 15199ce8e4SStefano Zampini del dctx 16199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().getCurrent() 17199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 2) 18199ce8e4SStefano Zampini device = dctx.getDevice() 19199ce8e4SStefano Zampini del device 20199ce8e4SStefano Zampini del dctx 21199ce8e4SStefano Zampini 22199ce8e4SStefano Zampini def testDevice(self): 23199ce8e4SStefano Zampini device = PETSc.Device.create() 24199ce8e4SStefano Zampini device.configure() 25199ce8e4SStefano Zampini _ = device.getDeviceType() 26199ce8e4SStefano Zampini _ = device.getDeviceId() 27199ce8e4SStefano Zampini del device 28199ce8e4SStefano Zampini 29199ce8e4SStefano Zampini def testDeviceContext(self): 30199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().create() 31*7af56e5cSStefano Zampini if not dctx: 32*7af56e5cSStefano Zampini return 33199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 1) 34199ce8e4SStefano Zampini dctx.setUp() 35199ce8e4SStefano Zampini self.assertTrue(dctx.idle()) 36199ce8e4SStefano Zampini dctx.destroy() 37199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 38199ce8e4SStefano Zampini 39199ce8e4SStefano Zampini def testStream(self): 40199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().getCurrent() 41*7af56e5cSStefano Zampini if not dctx: 42*7af56e5cSStefano Zampini return 43199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 2) 44199ce8e4SStefano Zampini stype = dctx.getStreamType() 45199ce8e4SStefano Zampini dctx.setStreamType(stype) 46199ce8e4SStefano Zampini dctx.destroy() 47199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 48199ce8e4SStefano Zampini 49199ce8e4SStefano Zampini def testSetFromOptions(self): 50199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().create() 51*7af56e5cSStefano Zampini if not dctx: 52*7af56e5cSStefano Zampini return 53199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 1) 54199ce8e4SStefano Zampini dctx.setFromOptions() 55199ce8e4SStefano Zampini dctx.setUp() 56199ce8e4SStefano Zampini dctx.destroy() 57199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 58199ce8e4SStefano Zampini 59199ce8e4SStefano Zampini def testDuplicate(self): 60199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().getCurrent() 61*7af56e5cSStefano Zampini if not dctx: 62*7af56e5cSStefano Zampini return 63199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 2) 64199ce8e4SStefano Zampini dctx2 = dctx.duplicate() 65199ce8e4SStefano Zampini self.assertEqual(dctx2.getRefCount(), 1) 66199ce8e4SStefano Zampini dctx.destroy() 67199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 68199ce8e4SStefano Zampini dctx2.destroy() 69199ce8e4SStefano Zampini self.assertEqual(dctx2.getRefCount(), 0) 70199ce8e4SStefano Zampini 71199ce8e4SStefano Zampini def testWaitFor(self): 72199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().create() 73*7af56e5cSStefano Zampini if not dctx: 74*7af56e5cSStefano Zampini return 75199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 1) 76199ce8e4SStefano Zampini dctx.setUp() 77199ce8e4SStefano Zampini dctx2 = PETSc.DeviceContext().create() 78199ce8e4SStefano Zampini self.assertEqual(dctx2.getRefCount(), 1) 79199ce8e4SStefano Zampini dctx2.setUp() 80199ce8e4SStefano Zampini dctx.waitFor(dctx2) 81199ce8e4SStefano Zampini dctx.destroy() 82199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 83199ce8e4SStefano Zampini dctx2.destroy() 84199ce8e4SStefano Zampini dctx2.destroy() 85199ce8e4SStefano Zampini self.assertEqual(dctx2.getRefCount(), 0) 86199ce8e4SStefano Zampini 87199ce8e4SStefano Zampini def testForkJoin(self): 88199ce8e4SStefano Zampini dctx = PETSc.DeviceContext().getCurrent() 89*7af56e5cSStefano Zampini if not dctx: 90*7af56e5cSStefano Zampini return 91199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 2) 92199ce8e4SStefano Zampini jdestroy = PETSc.DeviceContext.JoinMode.DESTROY 93199ce8e4SStefano Zampini jtypes = [ 94199ce8e4SStefano Zampini PETSc.DeviceContext.JoinMode.SYNC, 95199ce8e4SStefano Zampini PETSc.DeviceContext.JoinMode.NO_SYNC, 96199ce8e4SStefano Zampini ] 97199ce8e4SStefano Zampini for j in jtypes: 98199ce8e4SStefano Zampini dctxs = dctx.fork(4) 99199ce8e4SStefano Zampini for ctx in dctxs: 100199ce8e4SStefano Zampini self.assertEqual(ctx.getRefCount(), 1) 101199ce8e4SStefano Zampini dctx.join(j, dctxs[0::2]) 102199ce8e4SStefano Zampini dctx.join(j, dctxs[3::-2]) 103199ce8e4SStefano Zampini for ctx in dctxs: 104199ce8e4SStefano Zampini self.assertEqual(ctx.getRefCount(), 1) 105199ce8e4SStefano Zampini dctx.join(jdestroy, dctxs) 106199ce8e4SStefano Zampini for ctx in dctxs: 107199ce8e4SStefano Zampini self.assertEqual(ctx.getRefCount(), 0) 108199ce8e4SStefano Zampini dctx.destroy() 109199ce8e4SStefano Zampini self.assertEqual(dctx.getRefCount(), 0) 110199ce8e4SStefano Zampini 111199ce8e4SStefano Zampini 112199ce8e4SStefano Zampini# -------------------------------------------------------------------- 113199ce8e4SStefano Zampini 114199ce8e4SStefano Zampiniif __name__ == '__main__': 115199ce8e4SStefano Zampini unittest.main() 116