From c3a6de0cc4911f784e0159cc281a498239bc26ee Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Fri, 30 Oct 2015 10:00:25 +0100 Subject: [PATCH] Added more CXX tests for AQL numeric functions --- js/server/tests/aql-functions-numeric.js | 190 ++++++++++++++++++----- 1 file changed, 149 insertions(+), 41 deletions(-) diff --git a/js/server/tests/aql-functions-numeric.js b/js/server/tests/aql-functions-numeric.js index 0796e57006..253381d2d5 100644 --- a/js/server/tests/aql-functions-numeric.js +++ b/js/server/tests/aql-functions-numeric.js @@ -49,6 +49,12 @@ function ahuacatlNumericFunctionsTestSuite () { var expected = [ -100, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 99 ]; var actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return FLOOR(r)"); assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(FLOOR(r))"); + assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(V8(FLOOR(r)))"); + assertEqual(expected, actual); }, //////////////////////////////////////////////////////////////////////////////// @@ -56,14 +62,28 @@ function ahuacatlNumericFunctionsTestSuite () { //////////////////////////////////////////////////////////////////////////////// testFloorInvalid : function () { - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN FLOOR()"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN FLOOR(1, 2)"); - assertEqual([ 0 ], getQueryResults("RETURN FLOOR(null)")); - assertEqual([ 1 ], getQueryResults("RETURN FLOOR(true)")); - assertEqual([ 0 ], getQueryResults("RETURN FLOOR(\"yes\")")); - assertEqual([ 0 ], getQueryResults("RETURN FLOOR([ ])")); - assertEqual([ 2 ], getQueryResults("RETURN FLOOR([ 2 ])")); - assertEqual([ 0 ], getQueryResults("RETURN FLOOR({ })")); + var buildQuery = function (nr, input) { + switch (nr) { + case 0: + return `RETURN FLOOR(${input})`; + case 1: + return `RETURN NOOPT(FLOOR(${input}))`; + case 2: + return `RETURN NOOPT(V8(FLOOR(${input})))`; + default: + assertTrue(false, "Undefined state"); + } + }; + for (var i = 0; i < 3; ++i) { + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "1, 2")); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "null"))); + assertEqual([ 1 ], getQueryResults(buildQuery(i, "true"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "\"yes\""))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "[ ]"))); + assertEqual([ 2 ], getQueryResults(buildQuery(i, "[ 2 ]"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "{ }"))); + } }, //////////////////////////////////////////////////////////////////////////////// @@ -74,6 +94,12 @@ function ahuacatlNumericFunctionsTestSuite () { var expected = [ -99, -3, -2, -2, -2, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 100 ]; var actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return CEIL(r)"); assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(CEIL(r))"); + assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(V8(CEIL(r)))"); + assertEqual(expected, actual); }, //////////////////////////////////////////////////////////////////////////////// @@ -81,14 +107,28 @@ function ahuacatlNumericFunctionsTestSuite () { //////////////////////////////////////////////////////////////////////////////// testCeilInvalid : function () { - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN CEIL()"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN CEIL(1,2)"); - assertEqual([ 0 ], getQueryResults("RETURN CEIL(null)")); - assertEqual([ 1 ], getQueryResults("RETURN CEIL(true)")); - assertEqual([ 0 ], getQueryResults("RETURN CEIL(\"yes\")")); - assertEqual([ 0 ], getQueryResults("RETURN CEIL([ ])")); - assertEqual([ 2 ], getQueryResults("RETURN CEIL([ 2 ])")); - assertEqual([ 0 ], getQueryResults("RETURN CEIL({ })")); + var buildQuery = function (nr, input) { + switch (nr) { + case 0: + return `RETURN CEIL(${input})`; + case 1: + return `RETURN NOOPT(CEIL(${input}))`; + case 2: + return `RETURN NOOPT(V8(CEIL(${input})))`; + default: + assertTrue(false, "Undefined state"); + } + }; + for (var i = 0; i < 3; ++i) { + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "1, 2")); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "null"))); + assertEqual([ 1 ], getQueryResults(buildQuery(i, "true"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "\"yes\""))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "[ ]"))); + assertEqual([ 2 ], getQueryResults(buildQuery(i, "[ 2 ]"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "{ }"))); + } }, //////////////////////////////////////////////////////////////////////////////// @@ -99,6 +139,12 @@ function ahuacatlNumericFunctionsTestSuite () { var expected = [ 99.999, 3, 2.1, 2.01, 2, 1.99, 1.1, 1.01, 1, 0.9, 0.6, 0.5, 0.4, 0.1, 0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ]; var actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return ABS(r)"); assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(ABS(r))"); + assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(V8(ABS(r)))"); + assertEqual(expected, actual); }, //////////////////////////////////////////////////////////////////////////////// @@ -106,14 +152,28 @@ function ahuacatlNumericFunctionsTestSuite () { //////////////////////////////////////////////////////////////////////////////// testAbsInvalid : function () { - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN ABS()"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN ABS(1,2)"); - assertEqual([ 0 ], getQueryResults("RETURN ABS(null)")); - assertEqual([ 1 ], getQueryResults("RETURN ABS(true)")); - assertEqual([ 0 ], getQueryResults("RETURN ABS(\"yes\")")); - assertEqual([ 0 ], getQueryResults("RETURN ABS([ ])")); - assertEqual([ 37 ], getQueryResults("RETURN ABS([ -37 ])")); - assertEqual([ 0 ], getQueryResults("RETURN ABS({ })")); + var buildQuery = function (nr, input) { + switch (nr) { + case 0: + return `RETURN ABS(${input})`; + case 1: + return `RETURN NOOPT(ABS(${input}))`; + case 2: + return `RETURN NOOPT(V8(ABS(${input})))`; + default: + assertTrue(false, "Undefined state"); + } + }; + for (var i = 0; i < 3; ++i) { + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "1,2")); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "null"))); + assertEqual([ 1 ], getQueryResults(buildQuery(i, "true"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "\"yes\""))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "[ ]"))); + assertEqual([ 37 ], getQueryResults(buildQuery(i, "[ -37 ]"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "{ }"))); + } }, //////////////////////////////////////////////////////////////////////////////// @@ -124,6 +184,12 @@ function ahuacatlNumericFunctionsTestSuite () { var expected = [ -100, -3, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 100 ]; var actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return ROUND(r)"); assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(ROUND(r))"); + assertEqual(expected, actual); + + actual = getQueryResults("FOR r IN [ -99.999, -3, -2.1, -2.01, -2, -1.99, -1.1, -1.01, -1, -0.9, -0.6, -0.5, -0.4, -0.1, -0.01, 0, 0.01, 0.1, 0.4, 0.5, 0.6, 0.9, 1, 1.01, 1.1, 1.99, 2, 2.01, 2.1, 3, 99.999 ] return NOOPT(V8(ROUND(r)))"); + assertEqual(expected, actual); }, //////////////////////////////////////////////////////////////////////////////// @@ -131,14 +197,29 @@ function ahuacatlNumericFunctionsTestSuite () { //////////////////////////////////////////////////////////////////////////////// testRoundInvalid : function () { - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN ROUND()"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN ROUND(1,2)"); - assertEqual([ 0 ], getQueryResults("RETURN ROUND(null)")); - assertEqual([ 1 ], getQueryResults("RETURN ROUND(true)")); - assertEqual([ 0 ], getQueryResults("RETURN ROUND(\"yes\")")); - assertEqual([ 0 ], getQueryResults("RETURN ROUND([ ])")); - assertEqual([ -37 ], getQueryResults("RETURN ROUND([ -37 ])")); - assertEqual([ 0 ], getQueryResults("RETURN ROUND({ })")); + var buildQuery = function (nr, input) { + switch (nr) { + case 0: + return `RETURN ROUND(${input})`; + case 1: + return `RETURN NOOPT(ROUND(${input}))`; + case 2: + return `RETURN NOOPT(V8(ROUND(${input})))`; + default: + assertTrue(false, "Undefined state"); + } + + }; + for (var i = 0; i < 3; ++i) { + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "1,2")); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "null"))); + assertEqual([ 1 ], getQueryResults(buildQuery(i, "true"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "\"yes\""))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "[ ]"))); + assertEqual([ -37 ], getQueryResults(buildQuery(i, "[ -37 ]"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "{ }"))); + } }, //////////////////////////////////////////////////////////////////////////////// @@ -239,6 +320,20 @@ function ahuacatlNumericFunctionsTestSuite () { else { assertEqual(value[1].toFixed(4), actual[0].toFixed(4)); } + actual = getQueryResults("RETURN NOOPT(SQRT(" + JSON.stringify(value[0]) + "))"); + if (value[1] === null) { + assertNull(actual[0]); + } + else { + assertEqual(value[1].toFixed(4), actual[0].toFixed(4)); + } + actual = getQueryResults("RETURN NOOPT(V8(SQRT(" + JSON.stringify(value[0]) + ")))"); + if (value[1] === null) { + assertNull(actual[0]); + } + else { + assertEqual(value[1].toFixed(4), actual[0].toFixed(4)); + } }); }, @@ -247,16 +342,29 @@ function ahuacatlNumericFunctionsTestSuite () { //////////////////////////////////////////////////////////////////////////////// testSqrtInvalid : function () { - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN SQRT()"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN SQRT(2, 2)"); - assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN SQRT(2, 2, 3)"); - assertEqual([ 0 ], getQueryResults("RETURN SQRT(false)")); - assertEqual([ 1 ], getQueryResults("RETURN SQRT(true)")); - assertEqual([ 0 ], getQueryResults("RETURN SQRT('foo')")); - assertEqual([ 0 ], getQueryResults("RETURN SQRT([ ])")); - assertEqual([ 0 ], getQueryResults("RETURN SQRT({ })")); + var buildQuery = function (nr, input) { + switch (nr) { + case 0: + return `RETURN SQRT(${input})`; + case 1: + return `RETURN NOOPT(SQRT(${input}))`; + case 2: + return `RETURN NOOPT(V8(SQRT(${input})))`; + default: + assertTrue(false, "Undefined state"); + } + }; + for (var i = 0; i < 3; ++i) { + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "2, 2")); + assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, buildQuery(i, "2, 2, 3")); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "false"))); + assertEqual([ 1 ], getQueryResults(buildQuery(i, "true"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "'foo'"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "[ ]"))); + assertEqual([ 0 ], getQueryResults(buildQuery(i, "{ }"))); + } } - }; }