1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
use glsl::parser::Parse;
use glsl::syntax;
#[test]
fn left_associativity() {
let r = syntax::TranslationUnit::parse(
"
void main() {
x = a + b + c;
}
",
);
let expected = syntax::TranslationUnit::from_non_empty_iter(vec![
syntax::ExternalDeclaration::FunctionDefinition(syntax::FunctionDefinition {
prototype: syntax::FunctionPrototype {
ty: syntax::FullySpecifiedType {
qualifier: None,
ty: syntax::TypeSpecifier {
ty: syntax::TypeSpecifierNonArray::Void,
array_specifier: None,
},
},
name: "main".into(),
parameters: Vec::new(),
},
statement: syntax::CompoundStatement {
statement_list: vec![syntax::Statement::Simple(Box::new(
syntax::SimpleStatement::Expression(Some(syntax::Expr::Assignment(
Box::new(syntax::Expr::Variable("x".into())),
syntax::AssignmentOp::Equal,
Box::new(syntax::Expr::Binary(
syntax::BinaryOp::Add,
Box::new(syntax::Expr::Binary(
syntax::BinaryOp::Add,
Box::new(syntax::Expr::Variable("a".into())),
Box::new(syntax::Expr::Variable("b".into())),
)),
Box::new(syntax::Expr::Variable("c".into())),
)),
))),
))],
},
}),
])
.unwrap();
assert_eq!(r, Ok(expected));
}
|