package org.shedlang.compiler.parser; import org.junit.jupiter.api.Test; import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*; import static org.shedlang.compiler.parser.ParserTesting.parseString; import static org.zwobble.precisely.AssertThat.assertThat; public class ParserPrecedenceTests { @Test public void callHasHigherPrecedenceThanAddition() { var source = "1 + f()"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat( node, isUntypedAddNode( isUntypedIntLiteralNode(1), isUntypedCallNode() .withReceiver(isUntypedReferenceNode("f")) ) ); } @Test public void subtractionIsLeftAssociative() { var source = "1 - 2 - 3"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat( node, isUntypedSubNode( isUntypedSubNode( isUntypedIntLiteralNode(1), isUntypedIntLiteralNode(2) ), isUntypedIntLiteralNode(3) ) ); } }