Blame tests/run/exttype_dealloc.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: dealloc
Packit 562c7a
Packit 562c7a
import gc
Packit 562c7a
import sys
Packit 562c7a
Packit 562c7a
Packit 562c7a
test_results = []
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef void add_name(obj):
Packit 562c7a
    name = type(obj).__name__.rsplit('.', 1)[-1]
Packit 562c7a
    test_results.append(name)
Packit 562c7a
Packit 562c7a
Packit 562c7a
def find_name(exttype):
Packit 562c7a
    name = exttype.__name__.rsplit('.', 1)[-1]
Packit 562c7a
    return test_results.count(name)
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ExtTypeSimple:
Packit 562c7a
    """
Packit 562c7a
    >>> obj = ExtTypeSimple()
Packit 562c7a
    >>> find_name(ExtTypeSimple)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(ExtTypeSimple)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
    cdef int x
Packit 562c7a
    def __dealloc__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
        self.x = 0
Packit 562c7a
Packit 562c7a
Packit 562c7a
class PySubTypeSimple(ExtTypeSimple):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = PySubTypeSimple()
Packit 562c7a
    >>> find_name(PySubTypeSimple)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(PySubTypeSimple)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
Packit 562c7a
Packit 562c7a
class PySubTypeDel(ExtTypeSimple):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = PySubTypeDel()
Packit 562c7a
    >>> find_name(PySubTypeDel)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(PySubTypeDel)
Packit 562c7a
    2
Packit 562c7a
    """
Packit 562c7a
    def __del__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ExtSubTypeObjAttr(ExtTypeSimple):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = ExtSubTypeObjAttr()
Packit 562c7a
    >>> find_name(ExtSubTypeObjAttr)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
Packit 562c7a
    # both this type and the base class add the same name
Packit 562c7a
    >>> find_name(ExtSubTypeObjAttr)
Packit 562c7a
    2
Packit 562c7a
    """
Packit 562c7a
    cdef object attr
Packit 562c7a
    def __dealloc__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
        self.x = 1
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ExtTypeRaise:
Packit 562c7a
    """
Packit 562c7a
    >>> obj = ExtTypeRaise()
Packit 562c7a
    >>> find_name(ExtTypeRaise)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(ExtTypeRaise)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
    def __dealloc__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
        raise RuntimeError("HUHU !")
Packit 562c7a
Packit 562c7a
Packit 562c7a
class PySubTypeRaise(ExtTypeRaise):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = PySubTypeRaise()
Packit 562c7a
    >>> obj.ref = obj
Packit 562c7a
    >>> find_name(PySubTypeRaise)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(PySubTypeRaise)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ExtTypeRefCycle:
Packit 562c7a
    """
Packit 562c7a
    >>> obj = ExtTypeRefCycle()
Packit 562c7a
    >>> obj.ref = obj
Packit 562c7a
    >>> find_name(ExtTypeRefCycle)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(ExtTypeRefCycle)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
    cdef public object ref
Packit 562c7a
    cdef int x
Packit 562c7a
    def __dealloc__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
        self.x = 1
Packit 562c7a
Packit 562c7a
Packit 562c7a
class PySubTypeRefCycleDel(ExtTypeRefCycle):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = PySubTypeRefCycleDel()
Packit 562c7a
    >>> obj.ref = obj
Packit 562c7a
    >>> find_name(PySubTypeRefCycleDel)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
Packit 562c7a
    >>> count = 2
Packit 562c7a
    >>> if sys.version_info >= (3, 4):
Packit 562c7a
    ...     count = find_name(PySubTypeRefCycleDel)
Packit 562c7a
    >>> count
Packit 562c7a
    2
Packit 562c7a
    """
Packit 562c7a
    def __del__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ExtTypeRefCycleRaise:
Packit 562c7a
    """
Packit 562c7a
    >>> obj = ExtTypeRefCycleRaise()
Packit 562c7a
    >>> obj.ref = obj
Packit 562c7a
    >>> find_name(ExtTypeRefCycleRaise)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(ExtTypeRefCycleRaise)
Packit 562c7a
    1
Packit 562c7a
    """
Packit 562c7a
    cdef public object ref
Packit 562c7a
    def __dealloc__(self):
Packit 562c7a
        add_name(self)
Packit 562c7a
        raise RuntimeError("Cleaning up !")
Packit 562c7a
Packit 562c7a
Packit 562c7a
class PySubTypeRefCycleRaise(ExtTypeRefCycleRaise):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = PySubTypeRefCycleRaise()
Packit 562c7a
    >>> obj.ref = obj
Packit 562c7a
    >>> find_name(PySubTypeRefCycleRaise)
Packit 562c7a
    0
Packit 562c7a
    >>> obj = None
Packit 562c7a
    >>> _ = gc.collect()
Packit 562c7a
    >>> find_name(PySubTypeRefCycleRaise)
Packit 562c7a
    1
Packit 562c7a
    """