diff --git a/src/main/antlr4/imports/COMMAND_EVAL_SUBMODE_BASE.g4 b/src/main/antlr4/imports/COMMAND_EVAL_SUBMODE_BASE.g4 index f61e3b4..e8e0cc5 100644 --- a/src/main/antlr4/imports/COMMAND_EVAL_SUBMODE_BASE.g4 +++ b/src/main/antlr4/imports/COMMAND_EVAL_SUBMODE_BASE.g4 @@ -104,6 +104,7 @@ COMMAND_EVAL_SUBMODE_BASE_ASINH: 'asinh' -> type(EVAL_LANGUAGE_MODE_ASINH); COMMAND_EVAL_SUBMODE_BASE_ATAN: 'atan' -> type(EVAL_LANGUAGE_MODE_ATAN); COMMAND_EVAL_SUBMODE_BASE_ATAN2: 'atan2' -> type(EVAL_LANGUAGE_MODE_ATAN2); COMMAND_EVAL_SUBMODE_BASE_ATANH: 'atanh' -> type(EVAL_LANGUAGE_MODE_ATANH); +COMMAND_EVAL_SUBMODE_BASE_AVG: 'avg' -> type(EVAL_LANGUAGE_MODE_AVG); COMMAND_EVAL_SUBMODE_BASE_CASE: 'case' -> type(EVAL_LANGUAGE_MODE_CASE); COMMAND_EVAL_SUBMODE_BASE_CEILING: ('ceil'|'ceiling') -> type(EVAL_LANGUAGE_MODE_CEILING); COMMAND_EVAL_SUBMODE_BASE_CIDRMATCH: 'cidrmatch' -> type(EVAL_LANGUAGE_MODE_CIDRMATCH); diff --git a/src/main/antlr4/imports/DPLParserEvals.g4 b/src/main/antlr4/imports/DPLParserEvals.g4 index 9ec5df3..efb3574 100644 --- a/src/main/antlr4/imports/DPLParserEvals.g4 +++ b/src/main/antlr4/imports/DPLParserEvals.g4 @@ -117,6 +117,7 @@ evalFunctionStatement | evalMethodAtan // NumericFunction | evalMethodAtan2 // NumericFunction | evalMethodAtanh // NumericFunction + | evalMethodAvg // NumericFunction | evalMethodCeiling // NumericFunction | evalMethodCos // NumericFunction | evalMethodCosh // NumericFunction @@ -213,6 +214,10 @@ evalMethodAtanh : EVAL_LANGUAGE_MODE_ATANH EVAL_LANGUAGE_MODE_PARENTHESIS_L evalStatement EVAL_LANGUAGE_MODE_PARENTHESIS_R ; +evalMethodAvg + : EVAL_LANGUAGE_MODE_AVG EVAL_LANGUAGE_MODE_PARENTHESIS_L evalStatement (EVAL_LANGUAGE_MODE_COMMA evalStatement)+ EVAL_LANGUAGE_MODE_PARENTHESIS_R + ; + evalMethodCase : EVAL_LANGUAGE_MODE_CASE EVAL_LANGUAGE_MODE_PARENTHESIS_L evalStatement (EVAL_LANGUAGE_MODE_COMMA evalStatement)+ EVAL_LANGUAGE_MODE_PARENTHESIS_R ; diff --git a/src/main/antlr4/imports/EVAL_LANGUAGE_MODE.g4 b/src/main/antlr4/imports/EVAL_LANGUAGE_MODE.g4 index 3971c7c..9e296cc 100644 --- a/src/main/antlr4/imports/EVAL_LANGUAGE_MODE.g4 +++ b/src/main/antlr4/imports/EVAL_LANGUAGE_MODE.g4 @@ -111,6 +111,7 @@ EVAL_LANGUAGE_MODE_ASINH: 'asinh'; EVAL_LANGUAGE_MODE_ATAN: 'atan'; EVAL_LANGUAGE_MODE_ATAN2: 'atan2'; EVAL_LANGUAGE_MODE_ATANH: 'atanh'; +EVAL_LANGUAGE_MODE_AVG: 'avg'; EVAL_LANGUAGE_MODE_CASE: 'case'; EVAL_LANGUAGE_MODE_CEILING: ('ceil'|'ceiling'); EVAL_LANGUAGE_MODE_CIDRMATCH: 'cidrmatch'; diff --git a/src/test/java/com/teragrep/pth_03/tests/EvalSyntaxTests.java b/src/test/java/com/teragrep/pth_03/tests/EvalSyntaxTests.java index 9309d77..6ce7975 100644 --- a/src/test/java/com/teragrep/pth_03/tests/EvalSyntaxTests.java +++ b/src/test/java/com/teragrep/pth_03/tests/EvalSyntaxTests.java @@ -77,7 +77,8 @@ public class EvalSyntaxTests { "eval_sum", "eval_multiple_statements", "eval_multiple_statements_with_functions", - "eval_validate" + "eval_validate", + "eval_avg" }) public void evalSyntaxParseTest(String arg) { String fileName = "src/test/resources/antlr4/commands/eval/" + arg + ".txt"; @@ -434,6 +435,36 @@ void xpathTest25(String arg) { assertEquals(1, nodesA.getLength()); } + @ParameterizedTest + @ValueSource(strings = { + "eval_avg" + }) + void avgTest(String arg) { + ParserStructureTestingUtility pstu = new ParserStructureTestingUtility(); + String fileName = "src/test/resources/antlr4/commands/eval/" + arg + ".txt"; + + String avgMethod = "/root/transformStatement/evalTransformation/t_eval_evalParameter/evalStatement/evalFunctionStatement/evalMethodAvg"; + String parameters = "/root/transformStatement/evalTransformation/t_eval_evalParameter/evalStatement/evalFunctionStatement/evalMethodAvg/evalStatement"; + String fieldParam = "/root/transformStatement/evalTransformation/t_eval_evalParameter/evalStatement/evalFunctionStatement/evalMethodAvg/evalStatement[1]/evalFieldType"; + String numberParam = "/root/transformStatement/evalTransformation/t_eval_evalParameter/evalStatement/evalFunctionStatement/evalMethodAvg/evalStatement[2]/evalNumberType"; + String stringParam = "/root/transformStatement/evalTransformation/t_eval_evalParameter/evalStatement/evalFunctionStatement/evalMethodAvg/evalStatement[3]/evalStringType"; + + NodeList avgNode = Assertions.assertDoesNotThrow(() -> (NodeList) pstu.xpathQueryFile(fileName, avgMethod, false)); + assertEquals(1, avgNode.getLength()); + + NodeList evalStmts = Assertions.assertDoesNotThrow(() -> (NodeList) pstu.xpathQueryFile(fileName, parameters, false)); + assertEquals(3, evalStmts.getLength()); + + NodeList fieldNode = Assertions.assertDoesNotThrow(() -> (NodeList) pstu.xpathQueryFile(fileName, fieldParam, false)); + assertEquals(1, fieldNode.getLength()); + + NodeList numberNode = Assertions.assertDoesNotThrow(() -> (NodeList) pstu.xpathQueryFile(fileName, numberParam, false)); + assertEquals(1, numberNode.getLength()); + + NodeList stringNode = Assertions.assertDoesNotThrow(() -> (NodeList) pstu.xpathQueryFile(fileName, stringParam, false)); + assertEquals(1, stringNode.getLength()); + } + @ParameterizedTest @ValueSource(strings = { "eval_sum" diff --git a/src/test/resources/antlr4/commands/eval/eval_avg.txt b/src/test/resources/antlr4/commands/eval/eval_avg.txt new file mode 100644 index 0000000..c8d696c --- /dev/null +++ b/src/test/resources/antlr4/commands/eval/eval_avg.txt @@ -0,0 +1,46 @@ + + | eval a = avg(offset, 1, "1") \ No newline at end of file