2
# tag: forin, builtins, reversed, enumerate
10
@cython.test_assert_path_exists('//ForInStatNode',
11
'//ForInStatNode/IteratorNode',
12
'//ForInStatNode/IteratorNode[@reversed = True]',
14
@cython.test_fail_if_path_exists('//ForInStatNode/IteratorNode//SimpleCallNode')
15
def reversed_list(list l):
17
>>> [ i for i in _reversed([1,2,3,4]) ]
19
>>> reversed_list([1,2,3,4])
23
>>> reversed_list(None)
24
Traceback (most recent call last):
25
TypeError: 'NoneType' object is not iterable
28
for item in reversed(l):
32
@cython.test_assert_path_exists('//ForInStatNode',
33
'//ForInStatNode/IteratorNode',
34
'//ForInStatNode/IteratorNode[@reversed = True]',
36
@cython.test_fail_if_path_exists('//ForInStatNode/IteratorNode//SimpleCallNode')
37
def reversed_tuple(tuple t):
39
>>> [ i for i in _reversed((1,2,3,4)) ]
41
>>> reversed_tuple((1,2,3,4))
43
>>> reversed_tuple(())
45
>>> reversed_tuple(None)
46
Traceback (most recent call last):
47
TypeError: 'NoneType' object is not iterable
50
for item in reversed(t):
54
@cython.test_assert_path_exists('//ForInStatNode',
55
'//ForInStatNode/IteratorNode',
56
'//ForInStatNode/IteratorNode[@reversed = True]',
58
@cython.test_fail_if_path_exists('//ForInStatNode/IteratorNode//SimpleCallNode')
59
def enumerate_reversed_list(list l):
61
>>> list(enumerate(_reversed([1,2,3])))
62
[(0, 3), (1, 2), (2, 1)]
63
>>> enumerate_reversed_list([1,2,3])
64
[(0, 3), (1, 2), (2, 1)]
65
>>> enumerate_reversed_list([])
67
>>> enumerate_reversed_list(None)
68
Traceback (most recent call last):
69
TypeError: 'NoneType' object is not iterable
73
for i, item in enumerate(reversed(l)):
74
result.append((i, item))
77
@cython.test_assert_path_exists('//ForFromStatNode')
78
def reversed_range(int N):
80
>>> [ i for i in _reversed(range(5)) ]
85
>>> [ i for i in _reversed(range(0)) ]
92
for i in reversed(range(N)):
96
@cython.test_assert_path_exists('//ForFromStatNode')
97
def reversed_range_step_pos(int a, int b):
99
>>> [ i for i in _reversed(range(0, 5, 1)) ]
101
>>> reversed_range_step_pos(0, 5)
104
>>> [ i for i in _reversed(range(5, 0, 1)) ]
106
>>> reversed_range_step_pos(5, 0)
111
for i in reversed(range(a, b, 1)):
115
@cython.test_assert_path_exists('//ForFromStatNode')
116
def reversed_range_step_neg(int a, int b):
118
>>> [ i for i in _reversed(range(5, -1, -1)) ]
120
>>> reversed_range_step_neg(5, -1)
121
([0, 1, 2, 3, 4, 5], 5)
123
>>> [ i for i in _reversed(range(0, 5, -1)) ]
125
>>> reversed_range_step_neg(0, 5)
130
for i in reversed(range(a, b, -1)):
134
@cython.test_assert_path_exists('//ForFromStatNode')
135
@cython.test_fail_if_path_exists('//ForInStatNode')
136
def reversed_range_step3(int a, int b):
138
>>> [ i for i in _reversed(range(-5, 0, 3)) ]
140
>>> reversed_range_step3(-5, 0)
143
>>> [ i for i in _reversed(range(0, 5, 3)) ]
145
>>> reversed_range_step3(0, 5)
148
>>> [ i for i in _reversed(range(5, 0, 3)) ]
150
>>> reversed_range_step3(5, 0)
153
>>> [ i for i in _reversed(range(1, 1, 3)) ]
155
>>> reversed_range_step3(1, 1)
160
for i in reversed(range(a, b, 3)):
164
@cython.test_assert_path_exists('//ForFromStatNode')
165
@cython.test_fail_if_path_exists('//ForInStatNode')
166
def reversed_range_step3_expr(int a, int b):
168
>>> [ i for i in _reversed(range(0, 5, 3)) ]
170
>>> reversed_range_step3_expr(0, 5)
173
cdef int i = 99, c = 100
175
for i in reversed(range(c-c + a + c-c, c-c + b + c-c, 3)):
179
@cython.test_assert_path_exists('//ForFromStatNode')
180
@cython.test_fail_if_path_exists('//ForInStatNode')
181
def reversed_range_step3_neg(int a, int b):
183
>>> [ i for i in _reversed(range(0, -5, -3)) ]
185
>>> reversed_range_step3_neg(0, -5)
188
>>> [ i for i in _reversed(range(5, 0, -3)) ]
190
>>> reversed_range_step3_neg(5, 0)
193
>>> [ i for i in _reversed(range(0, 5, -3)) ]
195
>>> reversed_range_step3_neg(0, 5)
198
>>> [ i for i in _reversed(range(1, 1, -3)) ]
200
>>> reversed_range_step3_neg(1, 1)
205
for i in reversed(range(a, b, -3)):
209
@cython.test_assert_path_exists('//ForFromStatNode')
210
@cython.test_fail_if_path_exists('//ForInStatNode')
211
def reversed_range_step3_neg_expr(int a, int b):
213
>>> [ i for i in _reversed(range(5, 0, -3)) ]
215
>>> reversed_range_step3_neg_expr(5, 0)
218
cdef int i = 99, c = 100
220
for i in reversed(range(c-c + a + c-c, c-c + b + c-c, -3)):
224
def reversed_range_step3_py_args(a, b):
226
>>> [ i for i in _reversed(range(-5, 0, 3)) ]
228
>>> reversed_range_step3_py_args(-5, 0)
231
>>> [ i for i in _reversed(range(0, 5, 3)) ]
233
>>> reversed_range_step3_py_args(0, 5)
236
>>> [ i for i in _reversed(range(5, 0, 3)) ]
238
>>> reversed_range_step3_py_args(5, 0)
241
>>> [ i for i in _reversed(range(1, 1, 3)) ]
243
>>> reversed_range_step3_py_args(1, 1)
246
>>> reversed_range_step3_py_args(set(), 1) # doctest: +ELLIPSIS
247
Traceback (most recent call last):
248
TypeError: ...integer...
250
>>> reversed_range_step3_py_args(1, set()) # doctest: +ELLIPSIS
251
Traceback (most recent call last):
252
TypeError: ...integer...
256
for i in reversed(range(a, b, 3)):
260
def reversed_range_step3_neg_py_args(a, b):
262
>>> [ i for i in _reversed(range(0, -5, -3)) ]
264
>>> reversed_range_step3_neg_py_args(0, -5)
267
>>> [ i for i in _reversed(range(5, 0, -3)) ]
269
>>> reversed_range_step3_neg_py_args(5, 0)
272
>>> [ i for i in _reversed(range(0, 5, -3)) ]
274
>>> reversed_range_step3_neg_py_args(0, 5)
277
>>> [ i for i in _reversed(range(1, 1, -3)) ]
279
>>> reversed_range_step3_neg_py_args(1, 1)
282
>>> reversed_range_step3_neg_py_args(set(), 1) # doctest: +ELLIPSIS
283
Traceback (most recent call last):
284
TypeError: ...integer...
286
>>> reversed_range_step3_neg_py_args(1, set()) # doctest: +ELLIPSIS
287
Traceback (most recent call last):
288
TypeError: ...integer...
292
for i in reversed(range(a, b, -3)):
296
def reversed_range_step3_py_obj_left(a, int b):
298
>>> reversed_range_step3_py_obj_left(set(), 0) # doctest: +ELLIPSIS
299
Traceback (most recent call last):
304
for i in reversed(range(a, b, 3)):
307
def reversed_range_step3_py_obj_right(int a, b):
309
>>> reversed_range_step3_py_obj_right(0, set()) # doctest: +ELLIPSIS
310
Traceback (most recent call last):
315
for i in reversed(range(a, b, 3)):
318
def reversed_range_step3_neg_py_obj_left(a, int b):
320
>>> reversed_range_step3_neg_py_obj_left(set(), 0) # doctest: +ELLIPSIS
321
Traceback (most recent call last):
326
for i in reversed(range(a, b, -3)):
329
def reversed_range_step3_neg_py_obj_right(int a, b):
331
>>> reversed_range_step3_py_obj_right(0, set()) # doctest: +ELLIPSIS
332
Traceback (most recent call last):
337
for i in reversed(range(a, b, -3)):
340
@cython.test_fail_if_path_exists('//ForInStatNode')
341
def reversed_range_constant():
343
>>> [ i for i in _reversed(range(-12, -2, 4)) ]
345
>>> reversed_range_constant()
350
for i in reversed(range(1, 1, 4)):
352
assert result == list(reversed(range(1, 1, 4))), result
355
for i in reversed(range(1, 1, 1)):
357
assert result == list(reversed(range(1, 1, 1))), result
360
for i in reversed(range(0, 1, 4)):
362
assert result == list(reversed(range(0, 1, 4))), result
365
for i in reversed(range(0, 1, 1)):
367
assert result == list(reversed(range(0, 1, 1))), result
370
for i in reversed(range(1, 8, 4)):
372
assert result == list(reversed(range(1, 8, 4))), result
375
for i in reversed(range(1, 8, 1)):
377
assert result == list(reversed(range(1, 8, 1))), result
380
for i in reversed(range(1, 9, 4)):
382
assert result == list(reversed(range(1, 9, 4))), result
385
for i in reversed(range(1, 10, 4)):
387
assert result == list(reversed(range(1, 10, 4))), result
390
for i in reversed(range(1, 11, 4)):
392
assert result == list(reversed(range(1, 11, 4))), result
395
for i in reversed(range(1, 12, 4)):
397
assert result == list(reversed(range(1, 12, 4))), result
400
for i in reversed(range(0, 8, 4)):
402
assert result == list(reversed(range(0, 8, 4))), result
405
for i in reversed(range(0, 9, 4)):
407
assert result == list(reversed(range(0, 9, 4))), result
410
for i in reversed(range(0, 10, 4)):
412
assert result == list(reversed(range(0, 10, 4))), result
415
for i in reversed(range(0, 11, 4)):
417
assert result == list(reversed(range(0, 11, 4))), result
420
for i in reversed(range(0, 12, 4)):
422
assert result == list(reversed(range(0, 12, 4))), result
426
for i in reversed(range(-12, -2, 4)):
428
assert result == list(reversed(range(-12, -2, 4))), result
431
@cython.test_assert_path_exists('//ForFromStatNode')
432
@cython.test_fail_if_path_exists('//ForInStatNode')
433
def reversed_range_constant_neg():
435
>>> [ i for i in _reversed(range(-2, -12, -4)) ]
437
>>> reversed_range_constant_neg()
441
for i in reversed(range(1, 1, -4)):
443
assert result == list(reversed(range(1, 1, -4))), result
447
for i in reversed(range(1, 1, -1)):
449
assert result == list(reversed(range(1, 1, -1))), result
452
for i in reversed(range(1, 0, -4)):
454
assert result == list(reversed(range(1, 0, -4))), result
457
for i in reversed(range(1, 0, -1)):
459
assert result == list(reversed(range(1, 0, -1))), result
462
for i in reversed(range(8, 1, -4)):
464
assert result == list(reversed(range(8, 1, -4))), result
467
for i in reversed(range(8, 1, -1)):
469
assert result == list(reversed(range(8, 1, -1))), result
472
for i in reversed(range(9, 1, -4)):
474
assert result == list(reversed(range(9, 1, -4))), result
477
for i in reversed(range(9, 1, -1)):
479
assert result == list(reversed(range(9, 1, -1))), result
482
for i in reversed(range(10, 1, -4)):
484
assert result == list(reversed(range(10, 1, -4))), result
487
for i in reversed(range(11, 1, -4)):
489
assert result == list(reversed(range(11, 1, -4))), result
492
for i in reversed(range(11, 1, -1)):
494
assert result == list(reversed(range(11, 1, -1))), result
497
for i in reversed(range(12, 1, -4)):
499
assert result == list(reversed(range(12, 1, -4))), result
502
for i in reversed(range(12, 1, -1)):
504
assert result == list(reversed(range(12, 1, -1))), result
507
for i in reversed(range(8, 0, -4)):
509
assert result == list(reversed(range(8, 0, -4))), result
512
for i in reversed(range(8, 0, -1)):
514
assert result == list(reversed(range(8, 0, -1))), result
517
for i in reversed(range(9, 0, -4)):
519
assert result == list(reversed(range(9, 0, -4))), result
522
for i in reversed(range(9, 0, -1)):
524
assert result == list(reversed(range(9, 0, -1))), result
527
for i in reversed(range(10, 0, -4)):
529
assert result == list(reversed(range(10, 0, -4))), result
532
for i in reversed(range(10, 0, -1)):
534
assert result == list(reversed(range(10, 0, -1))), result
537
for i in reversed(range(11, 0, -4)):
539
assert result == list(reversed(range(11, 0, -4))), result
542
for i in reversed(range(11, 0, -1)):
544
assert result == list(reversed(range(11, 0, -1))), result
547
for i in reversed(range(12, 0, -4)):
549
assert result == list(reversed(range(12, 0, -4))), result
552
for i in reversed(range(12, 0, -1)):
554
assert result == list(reversed(range(12, 0, -1))), result
557
for i in reversed(range(-2, -12, -4)):
559
assert result == list(reversed(range(-2, -12, -4))), result
562
for i in reversed(range(-2, -12, -1)):
564
assert result == list(reversed(range(-2, -12, -1))), result
566
unicode_string = u"abcDEF"
568
@cython.test_assert_path_exists('//ForFromStatNode')
569
def reversed_unicode(unicode u):
571
>>> print(''.join(_reversed(unicode_string)))
573
>>> print(''.join(reversed_unicode(unicode_string)))
577
for c in reversed(u):
581
@cython.test_assert_path_exists('//ForFromStatNode')
582
def reversed_unicode_slice(unicode u):
584
>>> print(''.join(_reversed(unicode_string[1:-2])))
586
>>> print(''.join(reversed_unicode_slice(unicode_string)))
590
for c in reversed(u[1:-2]):
594
@cython.test_assert_path_exists('//ForFromStatNode')
595
def reversed_unicode_slice_neg_step(unicode u):
597
>>> print(''.join(_reversed(unicode_string[-2:1:-1])))
599
>>> print(''.join(reversed_unicode_slice_neg_step(unicode_string)))
603
for c in reversed(u[-2:1:-1]):
607
@cython.test_assert_path_exists('//ForFromStatNode')
608
def reversed_unicode_slice_pos_step(unicode u):
610
>>> print(''.join(_reversed(unicode_string[1:-2:1])))
612
>>> print(''.join(reversed_unicode_slice_pos_step(unicode_string)))
616
for c in reversed(u[1:-2:1]):
620
@cython.test_assert_path_exists('//ForFromStatNode')
621
def reversed_unicode_slice_start_pos_step(unicode u):
623
>>> print(''.join(_reversed(unicode_string[2::1])))
625
>>> print(''.join(reversed_unicode_slice_start_pos_step(unicode_string)))
629
for c in reversed(u[2::1]):
633
@cython.test_assert_path_exists('//ForFromStatNode')
634
def reversed_unicode_slice_start_neg_step(unicode u):
636
>>> print(''.join(_reversed(unicode_string[3::-1])))
638
>>> print(''.join(reversed_unicode_slice_start_neg_step(unicode_string)))
642
for c in reversed(u[3::-1]):
646
@cython.test_assert_path_exists('//ForFromStatNode')
647
def reversed_unicode_slice_end_pos_step(unicode u):
649
>>> print(''.join(_reversed(unicode_string[:-2:1])))
651
>>> print(''.join(reversed_unicode_slice_end_pos_step(unicode_string)))
655
for c in reversed(u[:-2:1]):
659
@cython.test_assert_path_exists('//ForFromStatNode')
660
def reversed_unicode_slice_end_neg_step(unicode u):
662
>>> print(''.join(_reversed(unicode_string[:-3:-1])))
664
>>> print(''.join(reversed_unicode_slice_end_neg_step(unicode_string)))
668
for c in reversed(u[:-3:-1]):
672
@cython.test_assert_path_exists('//ForFromStatNode')
673
def reversed_unicode_slice_neg_step_only(unicode u):
675
>>> print(''.join(_reversed(unicode_string[::-1])))
677
>>> print(''.join(reversed_unicode_slice_neg_step_only(unicode_string)))
681
for c in reversed(u[::-1]):
685
@cython.test_assert_path_exists('//ForFromStatNode')
686
def reversed_unicode_slice_pos_step_only(unicode u):
688
>>> print(''.join(_reversed(unicode_string[::1])))
690
>>> print(''.join(reversed_unicode_slice_pos_step_only(unicode_string)))
694
for c in reversed(u[::1]):
698
bytes_string = b'abcDEF'
701
@cython.test_assert_path_exists('//ForFromStatNode')
702
def reversed_bytes(bytes s):
704
>>> list(_reversed(bytes_string))
705
[70, 69, 68, 99, 98, 97]
706
>>> reversed_bytes(bytes_string)
707
[70, 69, 68, 99, 98, 97]
711
for c in reversed(s):
715
@cython.test_assert_path_exists('//ForFromStatNode')
716
def reversed_bytes_slice(bytes s):
718
>>> list(_reversed(bytes_string[1:-2]))
720
>>> reversed_bytes_slice(bytes_string)
725
for c in reversed(s[1:-2]):
729
@cython.test_assert_path_exists('//ForFromStatNode')
730
def reversed_bytes_slice_step(bytes s):
732
>>> list(_reversed(bytes_string[-2:1:-1]))
734
>>> reversed_bytes_slice_step(bytes_string)
739
for c in reversed(s[-2:1:-1]):
743
@cython.test_assert_path_exists('//ForFromStatNode')
744
def reversed_bytes_slice_step_only(bytes s):
746
>>> list(_reversed(bytes_string[::-1]))
747
[97, 98, 99, 68, 69, 70]
748
>>> reversed_bytes_slice_step_only(bytes_string)
749
[97, 98, 99, 68, 69, 70]
753
for c in reversed(s[::-1]):
758
@cython.test_assert_path_exists('//ForFromStatNode')
759
def reversed_unsigned(int a, int b):
761
>>> reversed_unsigned(0, 5)
763
>>> reversed_unsigned(1, 5)
765
>>> reversed_unsigned(1, 1)
769
return [i for i in reversed(range(a, b))]
771
@cython.test_assert_path_exists('//ForFromStatNode')
772
def reversed_unsigned_by_3(int a, int b):
774
>>> reversed_unsigned_by_3(0, 5)
776
>>> reversed_unsigned_by_3(0, 7)
780
return [i for i in reversed(range(a, b, 3))]
782
@cython.test_assert_path_exists('//ForFromStatNode')
783
def range_unsigned_by_neg_3(int a, int b):
785
>>> range_unsigned_by_neg_3(-1, 6)
787
>>> range_unsigned_by_neg_3(0, 7)
791
return [i for i in range(b, a, -3)]