]> git.proxmox.com Git - rustc.git/blob - vendor/syn-2.0.8/tests/test_iterators.rs
New upstream version 1.72.1+dfsg1
[rustc.git] / vendor / syn-2.0.8 / tests / test_iterators.rs
1 #![allow(clippy::uninlined_format_args)]
2
3 use syn::punctuated::{Pair, Punctuated};
4 use syn::Token;
5
6 #[macro_use]
7 mod macros;
8
9 macro_rules! check_exact_size_iterator {
10 ($iter:expr) => {{
11 let iter = $iter;
12 let size_hint = iter.size_hint();
13 let len = iter.len();
14 let count = iter.count();
15 assert_eq!(len, count);
16 assert_eq!(size_hint, (count, Some(count)));
17 }};
18 }
19
20 #[test]
21 fn pairs() {
22 let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
23
24 check_exact_size_iterator!(p.pairs());
25 check_exact_size_iterator!(p.pairs_mut());
26 check_exact_size_iterator!(p.into_pairs());
27
28 let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
29
30 assert_eq!(p.pairs().next_back().map(Pair::into_value), Some(&4));
31 assert_eq!(
32 p.pairs_mut().next_back().map(Pair::into_value),
33 Some(&mut 4)
34 );
35 assert_eq!(p.into_pairs().next_back().map(Pair::into_value), Some(4));
36 }
37
38 #[test]
39 fn iter() {
40 let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
41
42 check_exact_size_iterator!(p.iter());
43 check_exact_size_iterator!(p.iter_mut());
44 check_exact_size_iterator!(p.into_iter());
45
46 let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
47
48 assert_eq!(p.iter().next_back(), Some(&4));
49 assert_eq!(p.iter_mut().next_back(), Some(&mut 4));
50 assert_eq!(p.into_iter().next_back(), Some(4));
51 }
52
53 #[test]
54 fn may_dangle() {
55 let p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
56 for element in &p {
57 if *element == 2 {
58 drop(p);
59 break;
60 }
61 }
62
63 let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
64 for element in &mut p {
65 if *element == 2 {
66 drop(p);
67 break;
68 }
69 }
70 }