1# ticket: 258 2 3cdef extern from "Python.h": 4 5 ctypedef class __builtin__.list [object PyListObject]: 6 cdef Py_ssize_t allocated 7 8 ctypedef class __builtin__.dict [object PyDictObject]: 9 pass 10 11 cdef Py_ssize_t Py_SIZE(object o) 12 13cdef list L = [1,2,4] 14cdef dict d = {'A': 'a'} 15 16 17def test_list(list L): 18 """ 19 >>> test_list(list(range(10))) 20 True 21 >>> class list_subclass(list): pass 22 >>> test_list(list_subclass([1,2,3])) 23 True 24 """ 25 return Py_SIZE(L) <= L.allocated 26 27def test_tuple(tuple t): 28 """ 29 Actual builtin types are restrictive wrt subclassing so optimizations can be safely performed. 30 31 >>> test_tuple((1,2)) 32 2 33 >>> class tuple_subclass(tuple): pass 34 >>> test_tuple(tuple_subclass((1,2))) 35 Traceback (most recent call last): 36 ... 37 TypeError: Argument 't' has incorrect type (expected tuple, got tuple_subclass) 38 """ 39 return len(t) 40 41