def test_uncollectable(self): """Test uncollectable object tracking. This is fixed in Python 3.4 (PEP 442). """ foo = Foo() foo.parent = foo enemy = Enemy() enemy.parent = enemy idfoo = id(foo) idenemy = id(enemy) del foo del enemy gb = GarbageGraph(collectable=0) gfoo = [x for x in gb.metadata if x.id == idfoo] self.assertEqual(len(gfoo), 0) genemy = [x for x in gb.metadata if x.id == idenemy] if sys.version_info < (3, 4): self.assertEqual(len(genemy), 1) self.assertEqual(gb.reduce_to_cycles(), None)
def test_prune(self): """Test pruning of reference graph. """ foo = Foo() bar = Bar() foo.parent = foo foo.leaf = bar idb = id(bar) del foo del bar gb1 = GarbageGraph() gb2 = GarbageGraph(reduce=True) self.assertEqual(gb1.count, gb2.count) self.assert_(len(gb1.metadata) > len(gb2.metadata)) gbar = [x for x in gb1.metadata if x.id == idb] self.assertEqual(len(gbar), 1) gbar = [x for x in gb2.metadata if x.id == idb] self.assertEqual(len(gbar), 0) full = StringIO() gb1.print_stats(stream=full) reduced = StringIO() gb2.print_stats(stream=reduced) lazy_reduce = StringIO() gb1_pruned = gb1.reduce_to_cycles() self.assertTrue(gb1_pruned is gb1.reduce_to_cycles()) gb1_pruned.print_stats(stream=lazy_reduce) self.assertEqual(lazy_reduce.getvalue(), reduced.getvalue()) self.assertTrue('Foo' in reduced.getvalue()) self.assertFalse('Bar' in reduced.getvalue()) self.assertTrue('Foo' in full.getvalue()) self.assertTrue('Bar' in full.getvalue())
def test_uncollectable(self): """Test uncollectable object tracking. """ foo = Foo() foo.parent = foo enemy = Enemy() enemy.parent = enemy idfoo = id(foo) idenemy = id(enemy) del foo del enemy gb = GarbageGraph(collectable=0) gfoo = [x for x in gb.metadata if x.id == idfoo] self.assertEqual(len(gfoo), 0) genemy = [x for x in gb.metadata if x.id == idenemy] self.assertEqual(len(genemy), 1) self.assertEqual(gb.reduce_to_cycles(), None)