5
@cython.test_assert_path_exists(
6
"//ParallelAssignmentNode",
7
"//ParallelAssignmentNode/SingleAssignmentNode",
8
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode/NameNode",
9
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=False]/NameNode",
11
@cython.test_fail_if_path_exists(
12
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=True]",
23
@cython.test_assert_path_exists(
24
"//ParallelAssignmentNode",
25
"//ParallelAssignmentNode/SingleAssignmentNode",
26
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode/NameNode",
27
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=False]/NameNode",
29
@cython.test_fail_if_path_exists(
30
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=True]",
41
@cython.test_assert_path_exists(
42
"//ParallelAssignmentNode",
43
"//ParallelAssignmentNode/SingleAssignmentNode",
44
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode/NameNode",
45
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=False]/NameNode",
47
@cython.test_fail_if_path_exists(
48
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=True]",
50
cdef bint c_swap_cmp5(a, b, c, d, e):
52
return a > b > c > d > e
54
def swap_cmp5(a,b,c,d,e):
56
>>> swap_cmp5(1,2,3,4,5)
59
return c_swap_cmp5(a,b,c,d,e)
62
@cython.test_assert_path_exists(
63
"//ParallelAssignmentNode",
64
"//ParallelAssignmentNode/SingleAssignmentNode",
65
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode/NameNode",
66
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=True]/NameNode",
68
@cython.test_fail_if_path_exists(
69
"//ParallelAssignmentNode/SingleAssignmentNode//CoerceToTempNode[@use_managed_ref=False]",
81
cdef readonly object x
82
cdef readonly object y
83
def __init__(self, x, y):
86
@cython.test_assert_path_exists(
87
"//ParallelAssignmentNode",
88
"//ParallelAssignmentNode/SingleAssignmentNode",
89
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode",
90
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode[@use_managed_ref=False]",
91
"//ParallelAssignmentNode/SingleAssignmentNode//AttributeNode/NameNode",
92
"//ParallelAssignmentNode/SingleAssignmentNode//AttributeNode[@use_managed_ref=False]/NameNode",
94
@cython.test_fail_if_path_exists(
95
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode[@use_managed_ref=True]",
96
"//ParallelAssignmentNode/SingleAssignmentNode/AttributeNode[@use_managed_ref=True]",
98
def swap_attr_values(A a, A b):
100
>>> a, b = A(1,2), A(3,4)
101
>>> a.x, a.y, b.x, b.y
103
>>> swap_attr_values(a,b)
104
>>> a.x, a.y, b.x, b.y
107
a.x, a.y, b.x, b.y = a.y, b.x, b.y, a.x # shift by one
108
a.x, a.y, b.x, b.y = b.x, b.y, a.x, a.y # shift by two
109
a.x, a.y, b.x, b.y = b.y, b.x, a.y, a.x # reverse
115
def __init__(self, x1, y1, x2, y2):
116
self.a1, self.a2 = A(x1, y1), A(x2, y2)
118
@cython.test_assert_path_exists(
119
"//ParallelAssignmentNode",
120
"//ParallelAssignmentNode/SingleAssignmentNode",
121
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode",
122
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode[@use_managed_ref=False]",
123
"//ParallelAssignmentNode/SingleAssignmentNode//AttributeNode/NameNode",
124
"//ParallelAssignmentNode/SingleAssignmentNode//AttributeNode[@use_managed_ref=False]/NameNode",
126
@cython.test_fail_if_path_exists(
127
"//ParallelAssignmentNode/SingleAssignmentNode/CoerceToTempNode[@use_managed_ref=True]",
128
"//ParallelAssignmentNode/SingleAssignmentNode/AttributeNode[@use_managed_ref=True]",
130
def swap_recursive_attr_values(B a, B b):
132
>>> a, b = B(1,2,3,4), B(5,6,7,8)
133
>>> a.a1.x, a.a1.y, a.a2.x, a.a2.y
135
>>> b.a1.x, b.a1.y, b.a2.x, b.a2.y
137
>>> swap_recursive_attr_values(a,b)
138
>>> a.a1.x, a.a1.y, a.a2.x, a.a2.y
140
>>> b.a1.x, b.a1.y, b.a2.x, b.a2.y
145
... def __init__(self, x, y):
146
... self.x, self.y = x, y
148
... def __init__(self, x1, y1, x2, y2):
149
... self.a1, self.a2 = A(x1, y1), A(x2, y2)
150
>>> a, b = B(1,2,3,4), B(5,6,7,8)
151
>>> a.a1, a.a2 = a.a2, a.a1
152
>>> b.a1, b.a2 = b.a2, b.a1
153
>>> a.a1, a.a1.x, a.a2.y, a.a2, a.a1.y, a.a2.x = a.a2, a.a2.y, a.a1.x, a.a1, a.a2.x, a.a1.y
154
>>> b.a1, b.a1.x, b.a2.y, b.a2, b.a1.y, b.a2.x = b.a2, b.a2.y, b.a1.x, b.a1, b.a2.x, b.a1.y
155
>>> a.a1.x, a.a1.y, a.a2.x, a.a2.y
157
>>> b.a1.x, b.a1.y, b.a2.x, b.a2.y
160
a.a1, a.a2 = a.a2, a.a1
161
b.a1, b.a2 = b.a2, b.a1
162
a.a1, a.a1.x, a.a2.y, a.a2, a.a1.y, a.a2.x = a.a2, a.a2.y, a.a1.x, a.a1, a.a2.x, a.a1.y
163
b.a1, b.a1.x, b.a2.y, b.a2, b.a1.y, b.a2.x = b.a2, b.a2.y, b.a1.x, b.a1, b.a2.x, b.a1.y
166
@cython.test_assert_path_exists(
167
# "//ParallelAssignmentNode",
168
# "//ParallelAssignmentNode/SingleAssignmentNode",
169
# "//ParallelAssignmentNode/SingleAssignmentNode//IndexNode",
170
# "//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=False]",
172
@cython.test_fail_if_path_exists(
173
# "//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=True]",
175
def swap_list_items(list a, int i, int j):
178
>>> swap_list_items(l, 1, 2)
181
>>> swap_list_items(l, 3, 0)
184
>>> swap_list_items(l, 0, 5)
185
Traceback (most recent call last):
186
IndexError: list index out of range
190
a[i], a[j] = a[j], a[i]
193
@cython.test_assert_path_exists(
194
"//ParallelAssignmentNode",
195
"//ParallelAssignmentNode/SingleAssignmentNode",
196
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode",
197
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=True]",
199
@cython.test_fail_if_path_exists(
200
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=False]",
202
def swap_list_items_py1(list a, int i, int j):
203
a[i], a[j] = a[j+1], a[i]
206
@cython.test_assert_path_exists(
207
"//ParallelAssignmentNode",
208
"//ParallelAssignmentNode/SingleAssignmentNode",
209
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode",
210
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=True]",
212
@cython.test_fail_if_path_exists(
213
"//ParallelAssignmentNode/SingleAssignmentNode//IndexNode[@use_managed_ref=False]",
215
def swap_list_items_py2(list a, int i, int j):
216
a[i], a[j] = a[i], a[i]