summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2000-06-30 05:02:53 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2000-06-30 05:02:53 (GMT)
commitc5007aa5c3d64109578cf12b026ca6305acff97b (patch)
treea576fb8432ea60a6b6db49c09937551903938003 /Lib
parent4e542a3d9995addd08e7675a63cb0c8ee61a5010 (diff)
downloadcpython-c5007aa5c3d64109578cf12b026ca6305acff97b.zip
cpython-c5007aa5c3d64109578cf12b026ca6305acff97b.tar.gz
cpython-c5007aa5c3d64109578cf12b026ca6305acff97b.tar.bz2
final patches from Neil Schemenauer for garbage collection
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/output/test_gc11
-rw-r--r--Lib/test/test_gc.py100
2 files changed, 111 insertions, 0 deletions
diff --git a/Lib/test/output/test_gc b/Lib/test/output/test_gc
new file mode 100644
index 0000000..c385928
--- /dev/null
+++ b/Lib/test/output/test_gc
@@ -0,0 +1,11 @@
+test_gc
+list 0x831a754
+dict 0x831a754
+list 0x831a754
+tuple 0x831a734
+class 0x831a794
+<test_gc.A instance at 831a754>
+a <test_gc.A instance at 831a754>
+b <test_gc.B instance at 831a95c>
+dict 0x831a9bc
+func 0x831d9e4
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
new file mode 100644
index 0000000..72253f4
--- /dev/null
+++ b/Lib/test/test_gc.py
@@ -0,0 +1,100 @@
+import gc
+
+def test_list():
+ l = []
+ l.append(l)
+ print 'list 0x%x' % id(l)
+ gc.collect()
+ del l
+ assert gc.collect() == 1
+
+def test_dict():
+ d = {}
+ d[1] = d
+ print 'dict 0x%x' % id(d)
+ gc.collect()
+ del d
+ assert gc.collect() == 1
+
+def test_tuple():
+ l = []
+ t = (l,)
+ l.append(t)
+ print 'list 0x%x' % id(l)
+ print 'tuple 0x%x' % id(t)
+ gc.collect()
+ del t
+ del l
+ assert gc.collect() == 2
+
+def test_class():
+ class A:
+ pass
+ A.a = A
+ print 'class 0x%x' % id(A)
+ gc.collect()
+ del A
+ assert gc.collect() > 0
+
+def test_instance():
+ class A:
+ pass
+ a = A()
+ a.a = a
+ print repr(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
+ print 'a', repr(a)
+ print 'b', repr(b)
+ gc.collect()
+ gc.garbage[:] = []
+ del a
+ del b
+ assert gc.collect() > 0
+ assert id(gc.garbage[0]) == id_a
+
+def test_function():
+ d = {}
+ exec("def f(): pass\n") in d
+ print 'dict 0x%x' % id(d)
+ print 'func 0x%x' % id(d['f'])
+ gc.collect()
+ del d
+ assert gc.collect() == 2
+
+
+def test_all():
+ debug = gc.get_debug()
+ gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS)
+ test_list()
+ test_dict()
+ test_tuple()
+ test_class()
+ test_instance()
+ test_method()
+ test_finalizer()
+ test_function()
+ gc.set_debug(debug)
+
+test_all()