def test_meminfo_refct_1(self): d = Dummy() self.assertEqual(Dummy.alive, 1) addr = 0xdeadcafe # some made up location mi = rtsys.meminfo_new(addr, d) del d self.assertEqual(Dummy.alive, 1) mi.acquire() self.assertEqual(Dummy.alive, 1) mi.release() del mi self.assertEqual(Dummy.alive, 0)
def test_meminfo_refct_2(self): d = Dummy() self.assertEqual(Dummy.alive, 1) addr = 0xdeadcafe # some made up location mi = rtsys.meminfo_new(addr, d) self.assertEqual(mi.refcount, 1) del d self.assertEqual(Dummy.alive, 1) for ct in range(100): mi.acquire() self.assertEqual(mi.refcount, 1 + 100) self.assertEqual(Dummy.alive, 1) for _ in range(100): mi.release() self.assertEqual(mi.refcount, 1) del mi self.assertEqual(Dummy.alive, 0)
def test_defer_dtor(self): d = Dummy() self.assertEqual(Dummy.alive, 1) addr = 0xdeadcafe # some made up location mi = rtsys.meminfo_new(addr, d) # Set defer flag mi.defer = True del d self.assertEqual(Dummy.alive, 1) mi.acquire() self.assertEqual(Dummy.alive, 1) mi.release() del mi # mi refct is zero but not yet removed due to deferring self.assertEqual(Dummy.alive, 1) rtsys.process_defer_dtor() self.assertEqual(Dummy.alive, 0)
def test_fake_memoryview(self): d = Dummy() self.assertEqual(Dummy.alive, 1) addr = 0xdeadcafe # some made up location mi = rtsys.meminfo_new(addr, d) mview = memoryview(mi) self.assertEqual(addr, mi.data) self.assertFalse(mview.readonly) self.assertIs(mi, mview.obj) self.assertTrue(mview.c_contiguous) self.assertEqual(mview.itemsize, 1) self.assertEqual(mview.ndim, 1) del d del mi self.assertEqual(Dummy.alive, 1) del mview self.assertEqual(Dummy.alive, 0)