From f903c9faaf727396e00d5bd22a120daaea8dfe19 Mon Sep 17 00:00:00 2001 From: Mads Ravn Date: Sun, 12 Nov 2023 21:28:46 +0100 Subject: [PATCH] Small cleanup --- .../interpreter/evaluator/EvaluatorTest.java | 10 ++++++++-- .../dk/madsravn/interpreter/parser/ParserTest.java | 13 +++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/test/java/dk/madsravn/interpreter/evaluator/EvaluatorTest.java b/src/test/java/dk/madsravn/interpreter/evaluator/EvaluatorTest.java index ed81de0..218dabd 100644 --- a/src/test/java/dk/madsravn/interpreter/evaluator/EvaluatorTest.java +++ b/src/test/java/dk/madsravn/interpreter/evaluator/EvaluatorTest.java @@ -90,6 +90,7 @@ public void testBangOperator() { new EvalBooleanData("!!0", false), new EvalBooleanData("!0", true) ); + for(EvalBooleanData input : inputs) { IObject object = testEval(input.input); testBooleanObject(object, input.value, input.input); @@ -107,6 +108,7 @@ public void testIfElseExpression() { new EvalIntegerData("if (1 > 2) { 10 } else { 20 }", 20), new EvalIntegerData("if (1 < 2) { 10 } else { 20 }", 10) ); + for(EvalIntegerData input : inputs) { IObject object = testEval(input.input); if(input.value != null) { @@ -160,6 +162,7 @@ public void testLetStatements() { new EvalIntegerData("let a = 5; let b = a; b;", 5), new EvalIntegerData("let a = 5; let b = a; let c = a + b + 5; c;", 15) ); + for(EvalIntegerData input : inputs) { IObject object = testEval(input.input); testIntegerObject(object, input.value); @@ -224,6 +227,7 @@ public void testBuiltinFunctionsGood() { new EvalIntegerData("len(\"four\")", 4), new EvalIntegerData("len(\"Hello world\")", 11) ); + for(EvalIntegerData input : inputs) { IObject object = testEval(input.input); testIntegerObject(object, input.value); @@ -236,6 +240,7 @@ public void testBuiltinFunctionsBad() { new EvalStringData("len(1)","argument to `len` not supported, got INTEGER"), new EvalStringData("len(\"one\", \"two\")", "wrong number of arguments. got=2, want=1") ); + for(EvalStringData input : inputs) { IObject object = testEval(input.input); testErrorObject(object, input.value); @@ -294,9 +299,8 @@ public void testArrayBuiltins() { new EvalIntegerArrayData("last([]);", null), new EvalIntegerArrayData("push([2], 3);", Arrays.asList(2, 3)), new EvalIntegerArrayData("first([]);", null) - - ); + for(EvalIntegerArrayData input : inputs) { var evaluated = testEval(input.input); if(input.value != null) { @@ -348,6 +352,7 @@ public void testHashIndexExpressions() { new EvalIntegerData("{true: 5}[true]", 5), new EvalIntegerData("{false: 5}[false]", 5) ); + for(EvalIntegerData input: inputs) { var evaluated = testEval(input.input); if(input.value != null) { @@ -378,6 +383,7 @@ private void testIntegerArrayObject(IObject object, List elements) { assertTrue(object instanceof ArrayObject); ArrayObject arrayObject = (ArrayObject) object; assertEquals(arrayObject.getElementsLength(), elements.size()); + for (int i = 0; i < elements.size(); i++) { assertTrue(arrayObject.getElements().get(i) instanceof IntegerObject); IntegerObject integerObject = (IntegerObject) arrayObject.getElements().get(i); diff --git a/src/test/java/dk/madsravn/interpreter/parser/ParserTest.java b/src/test/java/dk/madsravn/interpreter/parser/ParserTest.java index c84e9ca..e702fb2 100644 --- a/src/test/java/dk/madsravn/interpreter/parser/ParserTest.java +++ b/src/test/java/dk/madsravn/interpreter/parser/ParserTest.java @@ -34,9 +34,9 @@ public void TestLetStatements() { assertEquals(((LetStatement)program.getStatements().get(1)).getName().getValue(), "y", "Second LET identifier expected to be 'x', but was " + ((LetStatement)program.getStatements().get(1)).getName().getValue()); assertEquals(((LetStatement)program.getStatements().get(2)).getName().getValue(), "foobar", "Third LET identifier expected to be 'x', but was " + ((LetStatement)program.getStatements().get(2)).getName().getValue()); - assertEquals(program.getStatements().get(0).tokenLiteral(), "let", "First LET identifier expected to be 'x', but was " + program.getStatements().get(0).tokenLiteral()); - assertEquals(program.getStatements().get(1).tokenLiteral(), "let", "Second LET identifier expected to be 'x', but was " + program.getStatements().get(1).tokenLiteral()); - assertEquals(program.getStatements().get(2).tokenLiteral(), "let", "Third LET identifier expected to be 'x', but was " + program.getStatements().get(2).tokenLiteral()); + assertEquals(program.getStatements().get(0).tokenLiteral(), "let"); + assertEquals(program.getStatements().get(1).tokenLiteral(), "let"); + assertEquals(program.getStatements().get(2).tokenLiteral(), "let"); } @@ -71,7 +71,6 @@ public void TestLetStatementWithErrors() { Lexer lexer = new Lexer(input); Parser parser = new Parser(lexer); - // TODO: Should the errors be on the program or on the parser? Program program = parser.parseProgram(); assertEquals(parser.getErrors().size(), 5); } @@ -82,8 +81,8 @@ public void testStringMethods() { Lexer lexer = new Lexer(input); Parser parser = new Parser(lexer); Program program = parser.parseProgram(); + checkForParseErrors(parser, input); - assertEquals(parser.getErrors().size(), 0); assertEquals(program.string(), "let myVar = 5;"); } @@ -92,9 +91,8 @@ public void testIdentifierExpression() { String input = "foobar;"; Lexer lexer = new Lexer(input); Parser parser = new Parser(lexer); - Program program = parser.parseProgram(); - assertEquals(parser.getErrors().size(), 0); + checkForParseErrors(parser, input); assertEquals(program.getStatementsLength(), 1); IStatement statement = program.getStatements().get(0); @@ -171,7 +169,6 @@ public void testParsingBooleanInfixExpressions() { assertEquals(leftBooleanLiteral.getValue(), infixData.leftValue); assertEquals(leftBooleanLiteral.tokenLiteral(), "" + infixData.leftValue); } - } private record InfixDataInteger(String input, int leftValue, String operator, int rightValue) { }