Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 1 | extern crate proc_macro2; |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 2 | extern crate syn; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 3 | |
David Tolnay | c3f9856 | 2018-11-02 08:55:05 -0700 | [diff] [blame] | 4 | mod features; |
David Tolnay | c7a5d3d | 2017-06-04 12:11:05 -0700 | [diff] [blame] | 5 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 6 | #[macro_use] |
| 7 | mod macros; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 8 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 9 | use proc_macro2::{Delimiter, Group, Literal, Punct, Spacing, TokenStream, TokenTree}; |
| 10 | use syn::Expr; |
| 11 | |
| 12 | use std::iter::FromIterator; |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 13 | |
| 14 | #[test] |
| 15 | fn test_grouping() { |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 16 | let tokens: TokenStream = TokenStream::from_iter(vec![ |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 17 | TokenTree::Literal(Literal::i32_suffixed(1)), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 18 | TokenTree::Punct(Punct::new('+', Spacing::Alone)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 19 | TokenTree::Group(Group::new( |
David Tolnay | 5138205 | 2017-12-27 13:46:21 -0500 | [diff] [blame] | 20 | Delimiter::None, |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 21 | TokenStream::from_iter(vec![ |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 22 | TokenTree::Literal(Literal::i32_suffixed(2)), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 23 | TokenTree::Punct(Punct::new('+', Spacing::Alone)), |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 24 | TokenTree::Literal(Literal::i32_suffixed(3)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 25 | ]), |
David Tolnay | 5138205 | 2017-12-27 13:46:21 -0500 | [diff] [blame] | 26 | )), |
Alex Crichton | 9dc5d0e | 2018-05-17 11:09:21 -0700 | [diff] [blame] | 27 | TokenTree::Punct(Punct::new('*', Spacing::Alone)), |
Alex Crichton | 9a4dca2 | 2018-03-28 06:32:19 -0700 | [diff] [blame] | 28 | TokenTree::Literal(Literal::i32_suffixed(4)), |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 29 | ]); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 30 | |
David Tolnay | 7d8b331 | 2019-03-10 01:26:11 -0800 | [diff] [blame] | 31 | assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32"); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 32 | |
David Tolnay | fcd53cf | 2019-05-09 13:06:59 -0700 | [diff] [blame^] | 33 | snapshot!(tokens as Expr, @r###" |
| 34 | ⋮Expr::Binary { |
| 35 | ⋮ left: Expr::Lit { |
| 36 | ⋮ lit: 1, |
| 37 | ⋮ }, |
| 38 | ⋮ op: Add, |
| 39 | ⋮ right: Expr::Binary { |
| 40 | ⋮ left: Expr::Group { |
| 41 | ⋮ expr: Expr::Binary { |
| 42 | ⋮ left: Expr::Lit { |
| 43 | ⋮ lit: 2, |
| 44 | ⋮ }, |
| 45 | ⋮ op: Add, |
| 46 | ⋮ right: Expr::Lit { |
| 47 | ⋮ lit: 3, |
| 48 | ⋮ }, |
| 49 | ⋮ }, |
| 50 | ⋮ }, |
| 51 | ⋮ op: Mul, |
| 52 | ⋮ right: Expr::Lit { |
| 53 | ⋮ lit: 4, |
| 54 | ⋮ }, |
| 55 | ⋮ }, |
| 56 | ⋮} |
| 57 | "###); |
Michael Layzell | be1e24d | 2017-06-04 21:15:23 -0400 | [diff] [blame] | 58 | } |