]>
Commit | Line | Data |
---|---|---|
353b0b11 FG |
1 | #![allow(clippy::uninlined_format_args)] |
2 | ||
e74abb32 | 3 | use syn::punctuated::{Pair, Punctuated}; |
60c5eb7d | 4 | use syn::Token; |
e74abb32 | 5 | |
e74abb32 XL |
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 | } | |
9ffffee4 FG |
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 | } |