1
0
Fork 0
firefox/third_party/rust/glsl/tests/left_associativity.rs
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

58 lines
1.6 KiB
Rust

use glsl::parser::Parse;
use glsl::syntax;
#[test]
fn left_associativity() {
for (opstr, opname) in [
("+", syntax::BinaryOp::Add),
("&&", syntax::BinaryOp::And),
("||", syntax::BinaryOp::Or),
]
.iter()
{
let r = syntax::TranslationUnit::parse(format!(
"
void main() {{
x = a {op} b {op} c;
}}
",
op = opstr
));
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(
opname.clone(),
Box::new(syntax::Expr::Binary(
opname.clone(),
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));
}
}