File: test_gc.py

package info (click to toggle)
python-greenlet 0.3.1-2.5
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 392 kB
  • sloc: ansic: 1,506; python: 666; makefile: 14
file content (48 lines) | stat: -rw-r--r-- 1,393 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import gc
import sys
import unittest
import weakref

import greenlet

def _live_greenlet_body():
    g = greenlet.getcurrent()
    try:
        g.parent.switch(g)
    finally:
        pass #print "live_greenlet_body dying"

class GCTests(unittest.TestCase):
    def test_circular_greenlet(self):
        class circular_greenlet(greenlet.greenlet):
            pass
        o = circular_greenlet()
        o.self = o
        o = weakref.ref(o)
        gc.collect()
        if gc.garbage:
            #print gc.garbage
            self.assertFalse(gc.garbage)
        self.assertTrue(o() is None)

    def test_dead_circular_ref(self):
        if not greenlet.GREENLET_USE_GC:
            #print >>sys.stderr, "skipped", sys._getframe().f_code.co_name
            return
        o = weakref.ref(greenlet.greenlet(greenlet.getcurrent).switch())
        gc.collect()
        if gc.garbage:
            #print gc.garbage
            self.assertFalse(gc.garbage)
        self.assertTrue(o() is None)

    def test_live_circular_ref(self):
        if not greenlet.GREENLET_USE_GC:
            #print >>sys.stderr, "skipped", sys._getframe().f_code.co_name
            return
        o = weakref.ref(greenlet.greenlet(_live_greenlet_body).switch())
        gc.collect()
        if gc.garbage:
            #print gc.garbage
            self.assertFalse(gc.garbage)
        self.assertTrue(o() is None)