Blame tests/run/extern_builtins_T258.pyx

Packit 562c7a
# ticket: 258
Packit 562c7a
Packit 562c7a
cdef extern from "Python.h":
Packit 562c7a
Packit 562c7a
    ctypedef class __builtin__.list  [object PyListObject]:
Packit 562c7a
        cdef Py_ssize_t allocated
Packit 562c7a
Packit 562c7a
    ctypedef class __builtin__.dict  [object PyDictObject]:
Packit 562c7a
        pass
Packit 562c7a
Packit 562c7a
    cdef Py_ssize_t Py_SIZE(object o)
Packit 562c7a
Packit 562c7a
cdef list L = [1,2,4]
Packit 562c7a
cdef dict d = {'A': 'a'}
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_list(list L):
Packit 562c7a
    """
Packit 562c7a
    >>> test_list(list(range(10)))
Packit 562c7a
    True
Packit 562c7a
    >>> class list_subclass(list): pass
Packit 562c7a
    >>> test_list(list_subclass([1,2,3]))
Packit 562c7a
    True
Packit 562c7a
    """
Packit 562c7a
    return Py_SIZE(L) <= L.allocated
Packit 562c7a
Packit 562c7a
def test_tuple(tuple t):
Packit 562c7a
    """
Packit 562c7a
    Actual builtin types are restrictive wrt subclassing so optimizations can be safely performed.
Packit 562c7a
Packit 562c7a
    >>> test_tuple((1,2))
Packit 562c7a
    2
Packit 562c7a
    >>> class tuple_subclass(tuple): pass
Packit 562c7a
    >>> test_tuple(tuple_subclass((1,2)))
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    TypeError: Argument 't' has incorrect type (expected tuple, got tuple_subclass)
Packit 562c7a
    """
Packit 562c7a
    return len(t)
Packit 562c7a