1cdef struct Grail
2
3cdef struct Spam:
4    int i
5    char c
6    float *p[42]
7    Grail *g
8
9cdef struct Grail:
10    Spam *s
11
12cdef Spam spam, ham
13
14cdef void eggs_i(Spam s):
15    cdef int j
16    j = s.i
17    s.i = j
18
19cdef void eggs_c(Spam s):
20    cdef char c
21    c = s.c
22    s.c = c
23
24cdef void eggs_p(Spam s):
25    cdef float *p
26    p = s.p[0]
27    s.p[0] = p
28
29cdef void eggs_g(Spam s):
30    cdef float *p
31    p = s.p[0]
32    s.p[0] = p
33
34spam = ham
35
36def test_i():
37    """
38    >>> test_i()
39    """
40    spam.i = 1
41    eggs_i(spam)
42
43def test_c():
44    """
45    >>> test_c()
46    """
47    spam.c = c'a'
48    eggs_c(spam)
49
50def test_p():
51    """
52    >>> test_p()
53    """
54    cdef float f
55    spam.p[0] = &f
56    eggs_p(spam)
57
58def test_g():
59    """
60    >>> test_g()
61    """
62    cdef Grail l
63    spam.g = &l
64    eggs_g(spam)
65
66
67cdef struct Ints:
68    int a, b
69
70def assign_fields_in_loop():
71    """
72    >>> assign_fields_in_loop()
73    2
74    """
75    cdef int i = 0
76    cdef Ints s
77    for s.a, s.b in enumerate(range(3)):
78        assert s.a == s.b
79        assert s.a == i
80        i += 1
81
82    assert s.a == s.b
83    return s.b
84