# mode: run # ticket: 466 # extension to T409 cimport cython def simple_parallel_typed(): """ >>> simple_parallel_typed() (1, 2, [1, 2], [1, 2]) """ cdef int a,c a, c = d = e = [1,2] return a, c, d, e def simple_parallel_int_mix(): """ >>> simple_parallel_int_mix() (1, 2, 1, 2, 1, 2, [1, 2], [1, 2]) """ cdef int ai,bi cdef long al,bl cdef object ao, bo ai, bi = al, bl = ao, bo = c = d = [1,2] return ao, bo, ai, bi, al, bl, c, d def simple_parallel_int_mix_recursive(): """ >>> simple_parallel_int_mix_recursive() (1, 2, 3, 1, [2, 3], 1, 2, 3, 1, 2, 3, [1, [2, 3]], [1, [2, 3]]) """ cdef int ai, bi, ci cdef long al, bl, cl cdef object ao, bo, co cdef object xo, yo ai, [bi, ci] = al, [bl, cl] = xo, yo = ao, [bo, co] = c = d = [1, [2, 3]] return ao, bo, co, xo, yo, ai, bi, ci, al, bl, cl, c, d cdef int called = 0 cdef char* get_string(): global called called += 1 return "abcdefg" def non_simple_rhs(): """ >>> non_simple_rhs() 1 """ cdef char *a, *b cdef int orig_called = called a = b = get_string() assert a is b return called - orig_called from libc.stdlib cimport malloc, free def non_simple_rhs_malloc(): """ >>> non_simple_rhs_malloc() """ cdef char *a, *b, **c c = &b c[0] = a = malloc(2) a[0] = c'X' b[1] = c'\0' # copy from different pointers to make sure they all point to the # same memory cdef char[2] x x[0] = b[0] x[1] = a[1] # clean up free(a) if b is not a: # shouldn't happen free(b) # check copied values assert x[0] == c'X' assert x[1] == c'\0' @cython.test_assert_path_exists( '//CascadedAssignmentNode', '//CascadedAssignmentNode//CoerceToTempNode', '//CascadedAssignmentNode//CoerceToTempNode[@type.is_ptr]') def assign_carray(): """ assign_carray() (1, 2, 3) """ cdef int *b, *c cdef int[3] a a[0] = 1 a[1] = 2 a[2] = 3 b = c = a+1 assert b[0] == 2 assert c[1] == 3 return a[0], b[0], c[1] def pyobject_from_cvalue(table, key): """ >>> table = {'X':0, 'Y':1} >>> pyobject_from_cvalue(table, 'Z') 2 >>> pyobject_from_cvalue(table, 'X') 0 """ cdef int num num = table.get(key, -1) if num < 0: num = table[key] = len(table) return num