/** * Copyright (C) 2019 Adrien Hopkins * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package test.java; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.unitConverter.math.ExpressionParser; /** * @author Adrien Hopkins * @since 2019-03-22 */ public class ExpressionParserTest { private static final ExpressionParser numberParser = new ExpressionParser.Builder<>(Integer::parseInt) .addBinaryOperator("+", (o1, o2) -> o1 + o2, 0).addBinaryOperator("-", (o1, o2) -> o1 - o2, 0) .addBinaryOperator("*", (o1, o2) -> o1 * o2, 1).addBinaryOperator("/", (o1, o2) -> o1 / o2, 1) .addBinaryOperator("^", (o1, o2) -> (int) Math.pow(o1, o2), 2).build(); /** * Test method for {@link org.unitConverter.math.ExpressionParser#parseExpression(java.lang.String)}. */ @Test public void testParseExpression() { // test parsing of expressions assertEquals((int) numberParser.parseExpression("1 + 2 ^ 5 * 3"), 97); assertEquals((int) numberParser.parseExpression("(1 + 2) ^ 5 * 3"), 729); // ensure it normally goes left to right assertEquals((int) numberParser.parseExpression("1 + 2 + 3 + 4"), 10); assertEquals((int) numberParser.parseExpression("12 - 4 - 3"), 5); assertEquals((int) numberParser.parseExpression("12 - (4 - 3)"), 11); assertEquals((int) numberParser.parseExpression("1 / 2 + 3"), 3); } }