Blame tests/run/cpp_stl.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: cpp, werror
Packit 562c7a
Packit 562c7a
cdef extern from "vector" namespace "std":
Packit 562c7a
Packit 562c7a
    cdef cppclass vector[T]:
Packit 562c7a
Packit 562c7a
        T at(int)
Packit 562c7a
        void push_back(T t)
Packit 562c7a
        void assign(int, T)
Packit 562c7a
        void clear()
Packit 562c7a
        int size()
Packit 562c7a
Packit 562c7a
        cppclass iterator:
Packit 562c7a
            T operator*()
Packit 562c7a
            iterator operator++()
Packit 562c7a
            bint operator==(iterator)
Packit 562c7a
            bint operator!=(iterator)
Packit 562c7a
Packit 562c7a
        iterator end()
Packit 562c7a
        iterator begin()
Packit 562c7a
Packit 562c7a
from cython.operator cimport dereference as deref, preincrement as inc
Packit 562c7a
Packit 562c7a
def test_vector(L):
Packit 562c7a
    """
Packit 562c7a
    >>> test_vector([1,10,100])
Packit 562c7a
    1
Packit 562c7a
    10
Packit 562c7a
    100
Packit 562c7a
    """
Packit 562c7a
    v = new vector[int]()
Packit 562c7a
    for a in L:
Packit 562c7a
        v.push_back(a)
Packit 562c7a
    cdef int i
Packit 562c7a
    for i in range(len(L)):
Packit 562c7a
        print v.at(i)
Packit 562c7a
    del v
Packit 562c7a
Packit 562c7a
ctypedef int my_int
Packit 562c7a
def test_vector_typedef(L):
Packit 562c7a
    """
Packit 562c7a
    >>> test_vector_typedef([1, 2, 3])
Packit 562c7a
    [1, 2, 3]
Packit 562c7a
    """
Packit 562c7a
    cdef vector[my_int] v = L
Packit 562c7a
    cdef vector[int] vv = v
Packit 562c7a
    return vv
Packit 562c7a
Packit 562c7a
def test_vector_iterator(L):
Packit 562c7a
    """
Packit 562c7a
    >>> test_vector([11, 37, 389, 5077])
Packit 562c7a
    11
Packit 562c7a
    37
Packit 562c7a
    389
Packit 562c7a
    5077
Packit 562c7a
    """
Packit 562c7a
    v = new vector[int]()
Packit 562c7a
    for a in L:
Packit 562c7a
        v.push_back(a)
Packit 562c7a
    cdef vector[int].iterator iter = v.begin()
Packit 562c7a
    while iter != v.end():
Packit 562c7a
        print deref(iter)
Packit 562c7a
        inc(iter)
Packit 562c7a
    del v
Packit 562c7a
Packit 562c7a
cdef class VectorWrapper:
Packit 562c7a
    """
Packit 562c7a
    >>> VectorWrapper(1, .5, .25, .125)
Packit 562c7a
    [1.0, 0.5, 0.25, 0.125]
Packit 562c7a
    """
Packit 562c7a
    cdef vector[double] vector
Packit 562c7a
    def __init__(self, *args):
Packit 562c7a
        self.vector = args
Packit 562c7a
    def __repr__(self):
Packit 562c7a
        return repr(self.vector)