• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use syn::punctuated::{Pair, Punctuated};
2 use syn::Token;
3 
4 #[macro_use]
5 mod macros;
6 
7 macro_rules! check_exact_size_iterator {
8     ($iter:expr) => {{
9         let iter = $iter;
10         let size_hint = iter.size_hint();
11         let len = iter.len();
12         let count = iter.count();
13         assert_eq!(len, count);
14         assert_eq!(size_hint, (count, Some(count)));
15     }};
16 }
17 
18 #[test]
pairs()19 fn pairs() {
20     let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
21 
22     check_exact_size_iterator!(p.pairs());
23     check_exact_size_iterator!(p.pairs_mut());
24     check_exact_size_iterator!(p.into_pairs());
25 
26     let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
27 
28     assert_eq!(p.pairs().next_back().map(Pair::into_value), Some(&4));
29     assert_eq!(
30         p.pairs_mut().next_back().map(Pair::into_value),
31         Some(&mut 4)
32     );
33     assert_eq!(p.into_pairs().next_back().map(Pair::into_value), Some(4));
34 }
35 
36 #[test]
iter()37 fn iter() {
38     let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
39 
40     check_exact_size_iterator!(p.iter());
41     check_exact_size_iterator!(p.iter_mut());
42     check_exact_size_iterator!(p.into_iter());
43 
44     let mut p: Punctuated<_, Token![,]> = punctuated!(2, 3, 4);
45 
46     assert_eq!(p.iter().next_back(), Some(&4));
47     assert_eq!(p.iter_mut().next_back(), Some(&mut 4));
48     assert_eq!(p.into_iter().next_back(), Some(4));
49 }
50