test_iterators.rs 1.3 KB

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