1 extern crate proc_macro2;
2 extern crate syn;
3
4 mod features;
5
6 #[macro_use]
7 mod macros;
8
9 use proc_macro2::{Delimiter, Group, Literal, Punct, Spacing, TokenStream, TokenTree};
10 use syn::Expr;
11
12 use std::iter::FromIterator;
13
14 #[test]
test_grouping()15 fn test_grouping() {
16 let tokens: TokenStream = TokenStream::from_iter(vec![
17 TokenTree::Literal(Literal::i32_suffixed(1)),
18 TokenTree::Punct(Punct::new('+', Spacing::Alone)),
19 TokenTree::Group(Group::new(
20 Delimiter::None,
21 TokenStream::from_iter(vec![
22 TokenTree::Literal(Literal::i32_suffixed(2)),
23 TokenTree::Punct(Punct::new('+', Spacing::Alone)),
24 TokenTree::Literal(Literal::i32_suffixed(3)),
25 ]),
26 )),
27 TokenTree::Punct(Punct::new('*', Spacing::Alone)),
28 TokenTree::Literal(Literal::i32_suffixed(4)),
29 ]);
30
31 assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32");
32
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 "###);
58 }
59