import gc from test_support import * def test_list(): l = [] l.append(l) gc.collect() del l assert gc.collect() == 1 def test_dict(): d = {} d[1] = d gc.collect() del d assert gc.collect() == 1 def test_tuple(): l = [] t = (l,) l.append(t) gc.collect() del t del l assert gc.collect() == 2 def test_class(): class A: pass A.a = A gc.collect() del A assert gc.collect() > 0 def test_instance(): class A: pass a = A() a.a = a gc.collect() del a assert gc.collect() > 0 def test_method(): class A: def __init__(self): self.init = self.__init__ a = A() gc.collect() del a assert gc.collect() > 0 def test_finalizer(): class A: def __del__(self): pass class B: pass a = A() a.a = a id_a = id(a) b = B() b.b = b gc.collect() del a del b assert gc.collect() > 0 for obj in gc.garbage: if id(obj) == id_a: return raise TestFailed def test_function(): d = {} exec("def f(): pass\n") in d gc.collect() del d assert gc.collect() > 0 def test_all(): threshold = gc.get_threshold() gc.set_threshold(0) # disable automatic collection gc.collect() test_list() test_dict() test_tuple() test_class() test_instance() test_method() test_finalizer() test_function() apply(gc.set_threshold, threshold) test_all()