Blame tests/run/arrayassign.pyx

Packit 562c7a
# mode: run
Packit 562c7a
Packit 562c7a
cimport cython
Packit 562c7a
Packit 562c7a
def test_literal_list():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[5]
Packit 562c7a
    a = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
def test_literal_list_multiplied():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_multiplied()
Packit 562c7a
    (1, 2, 1, 2, 1, 2)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[6]
Packit 562c7a
    a = [1,2] * 3
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4], a[5])
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_all():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_all()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[5] # = [5,4,3,2,1]
Packit 562c7a
    a[:] = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_start():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_start()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[7] # = [7,6,5,4,3,2,1]
Packit 562c7a
    a[2:] = [1,2,3,4,5]
Packit 562c7a
    return (a[2], a[3], a[4], a[5], a[6])
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_end():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_end()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[7] # = [7,6,5,4,3,2,1]
Packit 562c7a
    a[:5] = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_start_end():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_start_end()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[9] # = [9,8,7,6,5,4,3,2,1]
Packit 562c7a
    a[2:7] = [1,2,3,4,5]
Packit 562c7a
    return (a[2], a[3], a[4], a[5], a[6])
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_start_param(s):
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_start_param(4)
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    >>> test_literal_list_slice_start_param(3)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 6
Packit 562c7a
    >>> test_literal_list_slice_start_param(5)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 4
Packit 562c7a
    """
Packit 562c7a
    cdef int a[9] # = [9,8,7,6,5,4,3,2,1]
Packit 562c7a
    a[s:] = [1,2,3,4,5]
Packit 562c7a
    return (a[4], a[5], a[6], a[7], a[8])
Packit 562c7a
#    return a[s:]
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_end_param(e):
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_end_param(5)
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    >>> test_literal_list_slice_end_param(4)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 4
Packit 562c7a
    >>> test_literal_list_slice_end_param(6)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 6
Packit 562c7a
    """
Packit 562c7a
    cdef int a[9] # = [9,8,7,6,5,4,3,2,1]
Packit 562c7a
    a[:e] = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
#    return a[:e]
Packit 562c7a
Packit 562c7a
def test_literal_list_slice_start_end_param(s,e):
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(2,7)
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(3,7)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 4
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(1,7)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 6
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(2,6)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 4
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(2,8)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 6
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(3,6)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 3
Packit 562c7a
    >>> test_literal_list_slice_start_end_param(1,8)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 5, got 7
Packit 562c7a
    """
Packit 562c7a
    cdef int a[9] # = [9,8,7,6,5,4,3,2,1]
Packit 562c7a
    a[s:e] = [1,2,3,4,5]
Packit 562c7a
    return (a[2], a[3], a[4], a[5], a[6])
Packit 562c7a
#    return a[s:e]
Packit 562c7a
Packit 562c7a
def test_ptr_literal_list_slice_all():
Packit 562c7a
    """
Packit 562c7a
    >>> test_ptr_literal_list_slice_all()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int *a = [6,5,4,3,2]
Packit 562c7a
    a[:] = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
def test_ptr_literal_list_slice_start():
Packit 562c7a
    """
Packit 562c7a
    >>> test_ptr_literal_list_slice_start()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int *a = [6,5,4,3,2,1]
Packit 562c7a
    a[1:] = [1,2,3,4,5]
Packit 562c7a
    return (a[1], a[2], a[3], a[4], a[5])
Packit 562c7a
Packit 562c7a
def test_ptr_literal_list_slice_end():
Packit 562c7a
    """
Packit 562c7a
    >>> test_ptr_literal_list_slice_end()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int *a = [6,5,4,3,2,1]
Packit 562c7a
    a[:5] = [1,2,3,4,5]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
    '//ReturnStatNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
def test_starred_from_array():
Packit 562c7a
    """
Packit 562c7a
    >>> test_starred_from_array()
Packit 562c7a
    (1, [2, 3, 4], 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[0] = 1
Packit 562c7a
    a[1] = 2
Packit 562c7a
    a[2] = 3
Packit 562c7a
    a[3] = 4
Packit 562c7a
    a[4] = 5
Packit 562c7a
    x, *y, z = a
Packit 562c7a
    return x, y, z
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode//CoerceToPyTypeNode',
Packit 562c7a
    '//ParallelAssignmentNode//CoerceFromPyTypeNode',
Packit 562c7a
)
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode',
Packit 562c7a
    '//ReturnStatNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
def test_multiple_from_array():
Packit 562c7a
    """
Packit 562c7a
    >>> test_multiple_from_array()
Packit 562c7a
    (1, 2, 3)
Packit 562c7a
    """
Packit 562c7a
    cdef int[3] a
Packit 562c7a
    a[0] = 1
Packit 562c7a
    a[1] = 2
Packit 562c7a
    a[2] = 3
Packit 562c7a
    x, y, z = a
Packit 562c7a
    return x, y, z
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode',
Packit 562c7a
    '//ReturnStatNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
def test_multiple_from_array_full_slice():
Packit 562c7a
    """
Packit 562c7a
    >>> test_multiple_from_array_full_slice()
Packit 562c7a
    (1, 2, 3)
Packit 562c7a
    """
Packit 562c7a
    cdef int[3] a
Packit 562c7a
    a[0] = 1
Packit 562c7a
    a[1] = 2
Packit 562c7a
    a[2] = 3
Packit 562c7a
    x, y, z = a[:]
Packit 562c7a
    return x, y, z
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
    '//ParallelAssignmentNode',
Packit 562c7a
    '//ReturnStatNode//CoerceToPyTypeNode'
Packit 562c7a
)
Packit 562c7a
def test_multiple_from_slice():
Packit 562c7a
    """
Packit 562c7a
    >>> test_multiple_from_slice()
Packit 562c7a
    (5, 4, 3)
Packit 562c7a
    """
Packit 562c7a
    cdef int *a = [6,5,4,3,2,1]
Packit 562c7a
    x, y, z = a[1:4]
Packit 562c7a
    return x, y, z
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_slice_from_multiple():
Packit 562c7a
    """
Packit 562c7a
    >>> test_slice_from_multiple()
Packit 562c7a
    (6, -1, -2, -3, 2, 1)
Packit 562c7a
    """
Packit 562c7a
    cdef int *a = [6,5,4,3,2,1]
Packit 562c7a
    a[1:4] = -1, -2, -3
Packit 562c7a
    return a[0], a[1], a[2], a[3], a[4], a[5]
Packit 562c7a
Packit 562c7a
def test_literal_tuple():
Packit 562c7a
    """
Packit 562c7a
    >>> test_literal_tuple()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[5]
Packit 562c7a
    a = (1,2,3,4,5)
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
def test_list(list l):
Packit 562c7a
    """
Packit 562c7a
    >>> test_list([1, 2, 3, 4, 5])
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int a[5]
Packit 562c7a
    a[:] = l
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_all_from_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_all_from_pointer()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a = v
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_full_from_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_full_from_pointer()
Packit 562c7a
    (1, 2, 3, 4, 5)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[:] = v
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_slice_end_from_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_slice_end_from_pointer()
Packit 562c7a
    (1, 2, 3, 4, 123)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[4] = 123
Packit 562c7a
    a[:4] = v
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_slice_start_from_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_slice_start_from_pointer()
Packit 562c7a
    (123, 234, 1, 2, 3)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[0] = 123
Packit 562c7a
    a[1] = 234
Packit 562c7a
    a[2:] = v
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_slice_start_end_from_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_slice_start_end_from_pointer()
Packit 562c7a
    (123, 234, 1, 2, 345)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[0] = 123
Packit 562c7a
    a[1] = 234
Packit 562c7a
    a[4] = 345
Packit 562c7a
    a[2:4] = v
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
'''
Packit 562c7a
# FIXME: make this work:
Packit 562c7a
def assign_slice_start_end_from_sliced_pointer():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_slice_start_end_from_sliced_pointer()
Packit 562c7a
    (123, 234, 3, 4, 345)
Packit 562c7a
    """
Packit 562c7a
    cdef int *v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    a[0] = 123
Packit 562c7a
    a[1] = 234
Packit 562c7a
    a[4] = 345
Packit 562c7a
    a[2:4] = v[2:4]
Packit 562c7a
    return (a[0], a[1], a[2], a[3], a[4])
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_from_longer_array_slice():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_from_longer_array_slice()
Packit 562c7a
    [3, 4, 5]
Packit 562c7a
    """
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    cdef int[3] b
Packit 562c7a
    a[0] = 1
Packit 562c7a
    a[1] = 2
Packit 562c7a
    a[2] = 3
Packit 562c7a
    a[3] = 4
Packit 562c7a
    a[4] = 5
Packit 562c7a
    b[0] = 11
Packit 562c7a
    b[1] = 12
Packit 562c7a
    b[2] = 13
Packit 562c7a
    b = a[2:]
Packit 562c7a
    return b
Packit 562c7a
'''
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_slice_from_shorter_array():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_slice_from_shorter_array()
Packit 562c7a
    [1, 11, 12, 13, 5]
Packit 562c7a
    """
Packit 562c7a
    cdef int[5] a
Packit 562c7a
    cdef int[3] b
Packit 562c7a
    a[0] = 1
Packit 562c7a
    a[1] = 2
Packit 562c7a
    a[2] = 3
Packit 562c7a
    a[3] = 4
Packit 562c7a
    a[4] = 5
Packit 562c7a
    b[0] = 11
Packit 562c7a
    b[1] = 12
Packit 562c7a
    b[2] = 13
Packit 562c7a
    a[1:4] = b
Packit 562c7a
    return a
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef enum:
Packit 562c7a
    SIZE = 2
Packit 562c7a
Packit 562c7a
ctypedef int[SIZE] int_array_dyn
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_ptr_to_unknown_csize():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_ptr_to_unknown_csize()
Packit 562c7a
    [1, 2]
Packit 562c7a
    """
Packit 562c7a
    cdef int* v = [1, 2, 3, 4, 5]
Packit 562c7a
    cdef int_array_dyn d
Packit 562c7a
    d = v
Packit 562c7a
    return d
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_to_wrong_csize():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_to_wrong_csize()
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ValueError: Assignment to slice of wrong length, expected 3, got 2
Packit 562c7a
    """
Packit 562c7a
    cdef int_array_dyn d
Packit 562c7a
    cdef int v[3]
Packit 562c7a
    v[0] = 1
Packit 562c7a
    v[1] = 2
Packit 562c7a
    v[2] = 3
Packit 562c7a
    d = v
Packit 562c7a
    return d
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_full_array_slice_to_array():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_full_array_slice_to_array()
Packit 562c7a
    [1, 2, 3]
Packit 562c7a
    """
Packit 562c7a
    cdef int[3] x, y
Packit 562c7a
    x[0] = 1
Packit 562c7a
    x[1] = 2
Packit 562c7a
    x[2] = 3
Packit 562c7a
    y = x[:]
Packit 562c7a
    return y
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class ArrayOwner:
Packit 562c7a
    cdef readonly int[3] array
Packit 562c7a
Packit 562c7a
    def __init__(self, a, b, c):
Packit 562c7a
        self.array = (a, b, c)
Packit 562c7a
Packit 562c7a
Packit 562c7a
def assign_from_array_attribute():
Packit 562c7a
    """
Packit 562c7a
    >>> assign_from_array_attribute()
Packit 562c7a
    [1, 2, 3]
Packit 562c7a
    """
Packit 562c7a
    cdef int[3] v
Packit 562c7a
    a = ArrayOwner(1, 2, 3)
Packit 562c7a
    v = a.array[:]
Packit 562c7a
    return v