summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-09-27 18:31:28 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-09-27 18:31:52 -0500
commit1555a741bb2d12de8591b6195d2c0af7981a58e8 (patch)
treea8348eaeb31b5a128959780650b6f1197bc894db /src/test
parenta7584b843a64c806ec965a4f38341eb7dbd86e5f (diff)
The ExpressionParser test is now a paramaterized test
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/sevenUnits/utils/ExpressionParserTest.java70
1 files changed, 49 insertions, 21 deletions
diff --git a/src/test/java/sevenUnits/utils/ExpressionParserTest.java b/src/test/java/sevenUnits/utils/ExpressionParserTest.java
index 29648ee..a954b12 100644
--- a/src/test/java/sevenUnits/utils/ExpressionParserTest.java
+++ b/src/test/java/sevenUnits/utils/ExpressionParserTest.java
@@ -18,37 +18,65 @@ package sevenUnits.utils;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.jupiter.api.Test;
+import java.util.List;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
-import sevenUnits.utils.ExpressionParser;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+// TODO add tests for expression-to-RPN and RPN-to-result
/**
- * A test for the {@code ExpressionParser} class. This is NOT part of this program's public API.
+ * A test for the {@code ExpressionParser} class. This is NOT part of this
+ * program's public API.
*
* @author Adrien Hopkins
* @since 2019-03-22
* @since v0.2.0
*/
class ExpressionParserTest {
- private static final ExpressionParser<Integer> 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();
-
+ private static final ExpressionParser<Integer> 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 sevenUnits.utils.ExpressionParser#parseExpression(java.lang.String)}.
+ * The expressions used in the expression parsing tests
*/
- @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);
+ private static final List<String> TEST_EXPRESSIONS = List.of(
+ // test parsing of expressions
+ "1 + 2 ^ 5 * 3", "(1 + 2) ^ 5 * 3",
+ "12 * 5 + (3 ^ (2 * 3) - 72) / (3 + 3 * 2)",
+
+ // ensure it normally goes from left to right
+ "1 + 2 + 3 + 4", "12 - 4 - 3", "12 - (4 - 3)", "1 / 2 + 3");
+
+ /**
+ * The expected results for evaluating these expressions
+ */
+ private static final int[] RESULTS = { 97, 729, 133, 10, 5, 11, 3 };
+
+ /**
+ * @return A stream of objects, where each one is an expression and the
+ * expected result
+ * @since 2021-09-27
+ */
+ private static final Stream<Arguments> testParseExpressionData() {
+ return IntStream.range(0, TEST_EXPRESSIONS.size())
+ .mapToObj(i -> Arguments.of(TEST_EXPRESSIONS.get(i), RESULTS[i]));
+ }
+
+ /**
+ * Test method for
+ * {@link sevenUnits.utils.ExpressionParser#parseExpression(java.lang.String)}.
+ */
+ @ParameterizedTest
+ @MethodSource("testParseExpressionData")
+ public void testParseExpression(String expression, int value) {
+ assertEquals(value, numberParser.parseExpression(expression));
}
-
}