1# ticket: 445
2
3def complex_double_cast(double x, double complex z):
4    """
5    >>> complex_double_cast(1, 4-3j)
6    ((1+0j), (4-3j))
7    """
8    cdef double complex xx = <double complex>x
9    cdef double complex zz = <double complex>z
10    xx = x
11    return xx, zz
12
13def complex_double_int_cast(int x, int complex z):
14    """
15    >>> complex_double_int_cast(2, 2 + 3j)
16    ((2+0j), (3+3j))
17    """
18    cdef double complex xx = <double complex>x
19    cdef double complex zz = <double complex>(z+1)
20    return xx, zz
21
22def complex_int_double_cast(double x, double complex z):
23    """
24    >>> complex_int_double_cast(2.5, 2.5 + 3.5j)
25    ((2+0j), (2+3j))
26    """
27    cdef int complex xx = <int complex>x
28    cdef int complex zz = <int complex>z
29    return xx, zz
30
31cdef int side_effect_counter = 0
32
33cdef double complex side_effect(double complex z):
34    global side_effect_counter
35    side_effect_counter += 1
36    print "side effect", side_effect_counter, z
37    return z
38
39def test_side_effect(int complex z):
40    """
41    >>> test_side_effect(5)
42    side effect 1 (5+0j)
43    (5+0j)
44    >>> test_side_effect(3-4j)
45    side effect 2 (3-4j)
46    (3-4j)
47    """
48    cdef int complex zz = <int complex>side_effect(z)
49    return zz
50