]>
git.proxmox.com Git - rustc.git/blob - library/core/tests/iter/traits/double_ended.rs
3 //! You're probably viewing this file because you're adding a test (or you might
4 //! just be browsing, in that case, hey there!).
6 //! If you've made a test that happens to use one of DoubleEnded's methods, but
7 //! it tests another adapter or trait, you should *add it to the adapter or
8 //! trait's test file*.
10 //! Some examples would be `adapters::cloned::test_cloned_try_folds` or
11 //! `adapters::flat_map::test_double_ended_flat_map`, which use `try_fold` and
12 //! `next_back`, but test their own adapter.
15 fn test_iterator_rev_nth_back() {
16 let v
: &[_
] = &[0, 1, 2, 3, 4];
18 assert_eq
!(v
.iter().rev().nth_back(i
).unwrap(), &v
[i
]);
20 assert_eq
!(v
.iter().rev().nth_back(v
.len()), None
);
24 fn test_iterator_rev_nth() {
25 let v
: &[_
] = &[0, 1, 2, 3, 4];
27 assert_eq
!(v
.iter().rev().nth(i
).unwrap(), &v
[v
.len() - 1 - i
]);
29 assert_eq
!(v
.iter().rev().nth(v
.len()), None
);
34 let xs
= [2, 4, 6, 8, 10, 12, 14, 16];
35 let mut it
= xs
.iter();
38 assert
!(it
.rev().cloned().collect
::<Vec
<isize>>() == vec
![16, 14, 12, 10, 8, 6]);
42 fn test_rev_try_folds() {
43 let f
= &|acc
, x
| i32::checked_add(2 * acc
, x
);
44 assert_eq
!((1..10).rev().try_fold(7, f
), (1..10).try_rfold(7, f
));
45 assert_eq
!((1..10).rev().try_rfold(7, f
), (1..10).try_fold(7, f
));
47 let a
= [10, 20, 30, 40, 100, 60, 70, 80, 90];
48 let mut iter
= a
.iter().rev();
49 assert_eq
!(iter
.try_fold(0_i8, |acc
, &x
| acc
.checked_add(x
)), None
);
50 assert_eq
!(iter
.next(), Some(&70));
51 let mut iter
= a
.iter().rev();
52 assert_eq
!(iter
.try_rfold(0_i8, |acc
, &x
| acc
.checked_add(x
)), None
);
53 assert_eq
!(iter
.next_back(), Some(&60));
58 fn f(xy
: &(isize, char)) -> bool
{
62 fn g(xy
: &(isize, char)) -> bool
{
66 let v
= [(0, 'a'
), (1, 'b'
), (2, 'c'
), (3, 'b'
)];
68 assert_eq
!(v
.iter().rposition(f
), Some(3));
69 assert
!(v
.iter().rposition(g
).is_none());
73 fn test_rev_rposition() {
75 assert_eq
!(v
.iter().rev().rposition(|&x
| x
== 1), Some(1));
80 fn test_rposition_panic() {
81 let v
: [(Box
<_
>, Box
<_
>); 4] = [(box 0, box 0), (box 0, box 0), (box 0, box 0), (box 0, box 0)];
83 v
.iter().rposition(|_elt
| {