1fad3a1d3Sopenharmony_ci#![allow(clippy::uninlined_format_args)]
2fad3a1d3Sopenharmony_ci
3fad3a1d3Sopenharmony_ci#[macro_use]
4fad3a1d3Sopenharmony_cimod macros;
5fad3a1d3Sopenharmony_ci
6fad3a1d3Sopenharmony_ciuse proc_macro2::{Delimiter, Group, Literal, Punct, Spacing, TokenStream, TokenTree};
7fad3a1d3Sopenharmony_ciuse syn::Expr;
8fad3a1d3Sopenharmony_ci
9fad3a1d3Sopenharmony_ci#[test]
10fad3a1d3Sopenharmony_cifn test_grouping() {
11fad3a1d3Sopenharmony_ci    let tokens: TokenStream = TokenStream::from_iter(vec![
12fad3a1d3Sopenharmony_ci        TokenTree::Literal(Literal::i32_suffixed(1)),
13fad3a1d3Sopenharmony_ci        TokenTree::Punct(Punct::new('+', Spacing::Alone)),
14fad3a1d3Sopenharmony_ci        TokenTree::Group(Group::new(
15fad3a1d3Sopenharmony_ci            Delimiter::None,
16fad3a1d3Sopenharmony_ci            TokenStream::from_iter(vec![
17fad3a1d3Sopenharmony_ci                TokenTree::Literal(Literal::i32_suffixed(2)),
18fad3a1d3Sopenharmony_ci                TokenTree::Punct(Punct::new('+', Spacing::Alone)),
19fad3a1d3Sopenharmony_ci                TokenTree::Literal(Literal::i32_suffixed(3)),
20fad3a1d3Sopenharmony_ci            ]),
21fad3a1d3Sopenharmony_ci        )),
22fad3a1d3Sopenharmony_ci        TokenTree::Punct(Punct::new('*', Spacing::Alone)),
23fad3a1d3Sopenharmony_ci        TokenTree::Literal(Literal::i32_suffixed(4)),
24fad3a1d3Sopenharmony_ci    ]);
25fad3a1d3Sopenharmony_ci
26fad3a1d3Sopenharmony_ci    assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32");
27fad3a1d3Sopenharmony_ci
28fad3a1d3Sopenharmony_ci    snapshot!(tokens as Expr, @r###"
29fad3a1d3Sopenharmony_ci    Expr::Binary {
30fad3a1d3Sopenharmony_ci        left: Expr::Lit {
31fad3a1d3Sopenharmony_ci            lit: 1i32,
32fad3a1d3Sopenharmony_ci        },
33fad3a1d3Sopenharmony_ci        op: BinOp::Add,
34fad3a1d3Sopenharmony_ci        right: Expr::Binary {
35fad3a1d3Sopenharmony_ci            left: Expr::Group {
36fad3a1d3Sopenharmony_ci                expr: Expr::Binary {
37fad3a1d3Sopenharmony_ci                    left: Expr::Lit {
38fad3a1d3Sopenharmony_ci                        lit: 2i32,
39fad3a1d3Sopenharmony_ci                    },
40fad3a1d3Sopenharmony_ci                    op: BinOp::Add,
41fad3a1d3Sopenharmony_ci                    right: Expr::Lit {
42fad3a1d3Sopenharmony_ci                        lit: 3i32,
43fad3a1d3Sopenharmony_ci                    },
44fad3a1d3Sopenharmony_ci                },
45fad3a1d3Sopenharmony_ci            },
46fad3a1d3Sopenharmony_ci            op: BinOp::Mul,
47fad3a1d3Sopenharmony_ci            right: Expr::Lit {
48fad3a1d3Sopenharmony_ci                lit: 4i32,
49fad3a1d3Sopenharmony_ci            },
50fad3a1d3Sopenharmony_ci        },
51fad3a1d3Sopenharmony_ci    }
52fad3a1d3Sopenharmony_ci    "###);
53fad3a1d3Sopenharmony_ci}
54