1
0
Fork 0

added tests for LEFT(), RIGHT()

This commit is contained in:
Jan Steemann 2013-02-28 09:38:03 +01:00
parent a3b7c25177
commit 14c3863a17
4 changed files with 352 additions and 29 deletions

View File

@ -1,9 +1,14 @@
v1.3 (XXXX-XX-XX)
-----------------
* added AQL functions VARIANCE_POPULATION(), VARIANCE_SAMPLE(), STDDEV_POPULATION(),
STDDEV_SAMPLE(), AVERAGE(), MEDIAN() to calculate stastical values for lists
* added AQL LEFT() and RIGHT() string functions
* fixed issue #436: GET /_api/document on edge
* make AQL REVERSE() function work on strings, too
* make AQL REVERSE() and LENGTH() functions work on strings, too
* disabled DOT generation in `make doxygen`. this speeds up docs generation

View File

@ -599,6 +599,8 @@ TRI_associative_pointer_t* TRI_InitialiseFunctionsAql (void) {
REGISTER_FUNCTION("SUBSTRING", "STRING_SUBSTRING", true, false, "s,n|n", NULL);
REGISTER_FUNCTION("CONTAINS", "STRING_CONTAINS", true, false, "s,s|b", NULL);
REGISTER_FUNCTION("LIKE", "STRING_LIKE", true, false, "s,r|b", NULL);
REGISTER_FUNCTION("LEFT", "STRING_LEFT", true, false, "s,n", NULL);
REGISTER_FUNCTION("RIGHT", "STRING_RIGHT", true, false, "s,n", NULL);
// numeric functions
REGISTER_FUNCTION("FLOOR", "NUMBER_FLOOR", true, false, "n", NULL);
@ -606,13 +608,20 @@ TRI_associative_pointer_t* TRI_InitialiseFunctionsAql (void) {
REGISTER_FUNCTION("ROUND", "NUMBER_ROUND", true, false, "n", NULL);
REGISTER_FUNCTION("ABS", "NUMBER_ABS", true, false, "n", NULL);
REGISTER_FUNCTION("RAND", "NUMBER_RAND", false, false, "", NULL);
REGISTER_FUNCTION("SQRT", "NUMBER_SQRT", true, false, "n", NULL);
// list functions
REGISTER_FUNCTION("UNION", "UNION", true, false, "l,l|+", NULL);
REGISTER_FUNCTION("LENGTH", "LENGTH", true, true, "la", NULL);
REGISTER_FUNCTION("LENGTH", "LENGTH", true, true, "las", NULL);
REGISTER_FUNCTION("MIN", "MIN", true, true, "l", NULL);
REGISTER_FUNCTION("MAX", "MAX", true, true, "l", NULL);
REGISTER_FUNCTION("SUM", "SUM", true, true, "l", NULL);
REGISTER_FUNCTION("MEDIAN", "MEDIAN", true, true, "l", NULL);
REGISTER_FUNCTION("AVERAGE", "AVERAGE", true, true, "l", NULL);
REGISTER_FUNCTION("VARIANCE_SAMPLE", "VARIANCE_SAMPLE", true, true, "l", NULL);
REGISTER_FUNCTION("VARIANCE_POPULATION", "VARIANCE_POPULATION", true, true, "l", NULL);
REGISTER_FUNCTION("STDDEV_SAMPLE", "STDDEV_SAMPLE", true, true, "l", NULL);
REGISTER_FUNCTION("STDDEV_POPULATION", "STDDEV_POPULATION", true, true, "l", NULL);
REGISTER_FUNCTION("UNIQUE", "UNIQUE", true, false, "l", NULL);
// note: REVERSE() can be applied on strings, too
REGISTER_FUNCTION("REVERSE", "REVERSE", true, false, "ls", NULL);

View File

@ -28,6 +28,8 @@
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
"use strict";
var INTERNAL = require("internal");
var TRAVERSAL = require("org/arangodb/graph/traversal");
var ArangoError = require("org/arangodb/arango-error").ArangoError;
@ -256,6 +258,7 @@ function COMPILE_REGEX (regex, modifiers) {
var i, n = regex.length;
var escaped = false;
var pattern = '';
var specialChar = /^([.*+?\^=!:${}()|\[\]\/\\])$/;
ARG_CHECK(regex, TYPEWEIGHT_STRING, "LIKE");
@ -290,7 +293,7 @@ function COMPILE_REGEX (regex, modifiers) {
pattern += '.';
}
}
else if (c.match(/^([.*+?\^=!:${}()|\[\]\/\\])$/)) {
else if (c.match(specialChar)) {
// character with special meaning in a regex
pattern += '\\' + c;
}
@ -1627,6 +1630,50 @@ function STRING_LIKE (value, regex, caseInsensitive) {
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief returns the leftmost parts of a string
////////////////////////////////////////////////////////////////////////////////
function STRING_LEFT (value, length) {
ARG_CHECK(value, TYPEWEIGHT_STRING, "LEFT");
ARG_CHECK(length, TYPEWEIGHT_NUMBER, "LEFT");
if (length < 0) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "LEFT");
ARG_CHECK(length, TYPEWEIGHT_NUMBER, "LEFT");
}
length = parseInt(length, 10);
if (length === 0) {
return "";
}
return value.substr(0, length);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief returns the rightmost parts of a string
////////////////////////////////////////////////////////////////////////////////
function STRING_RIGHT (value, length) {
ARG_CHECK(value, TYPEWEIGHT_STRING, "RIGHT");
ARG_CHECK(length, TYPEWEIGHT_NUMBER, "RIGHT");
if (length < 0) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "RIGHT");
ARG_CHECK(length, TYPEWEIGHT_NUMBER, "RIGHT");
}
length = parseInt(length, 10);
if (length === 0) {
return "";
}
var len = value.length;
if (length > len) {
length = len;
}
return value.substr(value.length - length, length);
}
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
@ -1822,7 +1869,7 @@ function NUMBER_FLOOR (value) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "FLOOR");
}
return Math.floor(value);
return NUMERIC_VALUE(Math.floor(value));
}
////////////////////////////////////////////////////////////////////////////////
@ -1834,7 +1881,7 @@ function NUMBER_CEIL (value) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "CEIL");
}
return Math.ceil(value);
return NUMERIC_VALUE(Math.ceil(value));
}
////////////////////////////////////////////////////////////////////////////////
@ -1846,7 +1893,7 @@ function NUMBER_ROUND (value) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "ROUND");
}
return Math.round(value);
return NUMERIC_VALUE(Math.round(value));
}
////////////////////////////////////////////////////////////////////////////////
@ -1858,7 +1905,7 @@ function NUMBER_ABS (value) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "ABS");
}
return Math.abs(value);
return NUMERIC_VALUE(Math.abs(value));
}
////////////////////////////////////////////////////////////////////////////////
@ -1869,6 +1916,22 @@ function NUMBER_RAND () {
return Math.random();
}
////////////////////////////////////////////////////////////////////////////////
/// @brief square root
////////////////////////////////////////////////////////////////////////////////
function NUMBER_SQRT (value) {
if (TYPEWEIGHT(value) === TYPEWEIGHT_NULL) {
return null;
}
if (! IS_NUMBER(value)) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "SQRT");
}
return NUMERIC_VALUE(Math.sqrt(value));
}
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
@ -1970,16 +2033,16 @@ function LIMIT (value, offset, count) {
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief get the length of a list
/// @brief get the length of a list, document or string
////////////////////////////////////////////////////////////////////////////////
function LENGTH (value) {
var result;
var result, typeWeight = TYPEWEIGHT(value);
if (TYPEWEIGHT(value) === TYPEWEIGHT_LIST) {
if (typeWeight === TYPEWEIGHT_LIST || typeWeight === TYPEWEIGHT_STRING) {
result = value.length;
}
else if (TYPEWEIGHT(value) === TYPEWEIGHT_DOCUMENT) {
else if (typeWeight === TYPEWEIGHT_DOCUMENT) {
result = KEYS(value, false).length;
}
else {
@ -2044,6 +2107,7 @@ function UNIQUE (values) {
var normalized = NORMALIZE(value);
keys[JSON.stringify(normalized)] = normalized;
});
for (a in keys) {
if (keys.hasOwnProperty(a)) {
result.push(keys[a]);
@ -2084,17 +2148,19 @@ function UNION () {
////////////////////////////////////////////////////////////////////////////////
function MAX (values) {
var result = null;
LIST(values);
values.forEach(function (value) {
var value, result = null;
var i, n;
for (i = 0, n = values.length; i < n; ++i) {
value = values[i];
if (TYPEWEIGHT(value) !== TYPEWEIGHT_NULL) {
if (result === null || RELATIONAL_GREATER(value, result)) {
result = value;
}
}
});
}
return result;
}
@ -2104,17 +2170,19 @@ function MAX (values) {
////////////////////////////////////////////////////////////////////////////////
function MIN (values) {
var result = null;
LIST(values);
values.forEach(function (value) {
var value, result = null;
var i, n;
for (i = 0, n = values.length; i < n; ++i) {
value = values[i];
if (TYPEWEIGHT(value) !== TYPEWEIGHT_NULL) {
if (result === null || RELATIONAL_LESS(value, result)) {
result = value;
}
}
});
}
return result;
}
@ -2124,13 +2192,17 @@ function MIN (values) {
////////////////////////////////////////////////////////////////////////////////
function SUM (values) {
var result = null;
LIST(values);
values.forEach(function (value) {
if (TYPEWEIGHT(value) !== TYPEWEIGHT_NULL) {
if (TYPEWEIGHT(value) !== TYPEWEIGHT_NUMBER) {
var i, n;
var value, typeWeight, result = null;
for (i = 0, n = values.length; i < n; ++i) {
value = values[i];
typeWeight = TYPEWEIGHT(value);
if (typeWeight !== TYPEWEIGHT_NULL) {
if (typeWeight !== TYPEWEIGHT_NUMBER) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "SUM");
}
@ -2141,11 +2213,166 @@ function SUM (values) {
result += value;
}
}
});
}
return NUMERIC_VALUE(result);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief average of all values
////////////////////////////////////////////////////////////////////////////////
function AVERAGE (values) {
LIST(values);
var current, typeWeight, sum = 0;
var i, j, n;
for (i = 0, j = 0, n = values.length; i < n; ++i) {
current = values[i];
typeWeight = TYPEWEIGHT(current);
if (typeWeight !== TYPEWEIGHT_NULL) {
if (typeWeight !== TYPEWEIGHT_NUMBER) {
THROW(INTERNAL.errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE);
}
sum += current;
j++;
}
}
if (j === 0) {
return null;
}
return NUMERIC_VALUE(sum / j);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief median of all values
////////////////////////////////////////////////////////////////////////////////
function MEDIAN (values) {
LIST(values);
var copy = [ ], current, typeWeight;
var i, n;
for (i = 0, n = values.length; i < n; ++i) {
current = values[i];
typeWeight = TYPEWEIGHT(current);
if (typeWeight !== TYPEWEIGHT_NULL) {
if (typeWeight !== TYPEWEIGHT_NUMBER) {
THROW(INTERNAL.errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE);
}
copy.push(current);
}
}
if (copy.length === 0) {
return null;
}
copy.sort(RELATIONAL_CMP);
var midpoint = copy.length / 2;
if (copy.length % 2 === 0) {
return NUMERIC_VALUE((copy[midpoint - 1] + copy[midpoint]) / 2);
}
return NUMERIC_VALUE(copy[Math.floor(midpoint)]);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief variance of all values
////////////////////////////////////////////////////////////////////////////////
function VARIANCE (values) {
LIST(values);
var mean = 0, m2 = 0, current, typeWeight, delta;
var i, j, n;
for (i = 0, j = 0, n = values.length; i < n; ++i) {
current = values[i];
typeWeight = TYPEWEIGHT(current);
if (typeWeight !== TYPEWEIGHT_NULL) {
if (typeWeight !== TYPEWEIGHT_NUMBER) {
THROW(INTERNAL.errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE);
}
delta = current - mean;
mean += delta / ++j;
m2 += delta * (current - mean);
}
}
return {
n: j,
value: m2
};
}
////////////////////////////////////////////////////////////////////////////////
/// @brief sample variance of all values
////////////////////////////////////////////////////////////////////////////////
function VARIANCE_SAMPLE (values) {
var result = VARIANCE(values);
if (result.n < 2) {
return null;
}
return NUMERIC_VALUE(result.value / (result.n - 1));
}
////////////////////////////////////////////////////////////////////////////////
/// @brief population variance of all values
////////////////////////////////////////////////////////////////////////////////
function VARIANCE_POPULATION (values) {
var result = VARIANCE(values);
if (result.n < 1) {
return null;
}
return NUMERIC_VALUE(result.value / result.n);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief standard deviation of all values
////////////////////////////////////////////////////////////////////////////////
function STDDEV_SAMPLE (values) {
var result = VARIANCE(values);
if (result.n < 2) {
return null;
}
return NUMERIC_VALUE(Math.sqrt(result.value / (result.n - 1)));
}
////////////////////////////////////////////////////////////////////////////////
/// @brief standard deviation of all values
////////////////////////////////////////////////////////////////////////////////
function STDDEV_POPULATION (values) {
var result = VARIANCE(values);
if (result.n < 1) {
return null;
}
return NUMERIC_VALUE(Math.sqrt(result.value / result.n));
}
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
@ -3021,6 +3248,8 @@ exports.STRING_UPPER = STRING_UPPER;
exports.STRING_SUBSTRING = STRING_SUBSTRING;
exports.STRING_CONTAINS = STRING_CONTAINS;
exports.STRING_LIKE = STRING_LIKE;
exports.STRING_LEFT = STRING_LEFT;
exports.STRING_RIGHT = STRING_RIGHT;
exports.CAST_BOOL = CAST_BOOL;
exports.CAST_NUMBER = CAST_NUMBER;
exports.CAST_STRING = CAST_STRING;
@ -3036,6 +3265,7 @@ exports.NUMBER_CEIL = NUMBER_CEIL;
exports.NUMBER_ROUND = NUMBER_ROUND;
exports.NUMBER_ABS = NUMBER_ABS;
exports.NUMBER_RAND = NUMBER_RAND;
exports.NUMBER_SQRT = NUMBER_SQRT;
exports.SORT = SORT;
exports.GROUP = GROUP;
exports.LIMIT = LIMIT;
@ -3048,6 +3278,12 @@ exports.UNION = UNION;
exports.MAX = MAX;
exports.MIN = MIN;
exports.SUM = SUM;
exports.AVERAGE = AVERAGE;
exports.MEDIAN = MEDIAN;
exports.VARIANCE_SAMPLE = VARIANCE_SAMPLE;
exports.VARIANCE_POPULATION = VARIANCE_POPULATION;
exports.STDDEV_SAMPLE = STDDEV_SAMPLE;
exports.STDDEV_POPULATION = STDDEV_POPULATION;
exports.GEO_NEAR = GEO_NEAR;
exports.GEO_WITHIN = GEO_WITHIN;
exports.FULLTEXT = FULLTEXT;

View File

@ -493,6 +493,70 @@ function ahuacatlFunctionsTestSuite () {
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN UNIQUE({ })"); } ));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test left function
////////////////////////////////////////////////////////////////////////////////
testLeft : function () {
var expected = [ 'fo', 'f', '', 'foo', 'foo', '', '', '', 'mö', 'mötö' ];
var actual = getQueryResults("FOR t IN [ [ 'foo', 2 ], [ 'foo', 1 ], [ 'foo', 0 ], [ 'foo', 4 ], [ 'foo', 999999999 ], [ '', 0 ], [ '', 1 ], [ '', 2 ], [ 'mötör', 2 ], [ 'mötör', 4 ] ] RETURN LEFT(t[0], t[1])", true);
assertEqual(expected, actual);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test left function
////////////////////////////////////////////////////////////////////////////////
testLeftInvalid : function () {
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT()"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo')"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', 2, 3)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT(null, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT(true, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT(4, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT([ ], 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT({ }, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', null)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', true)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', 'bar')"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', [ ])"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', { })"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', -1)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LEFT('foo', -1.5)"); } ));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test right function
////////////////////////////////////////////////////////////////////////////////
testRight : function () {
var expected = [ 'oo', 'o', '', 'foo', 'foo', '', '', '', 'ör', 'ötör' ];
var actual = getQueryResults("FOR t IN [ [ 'foo', 2 ], [ 'foo', 1 ], [ 'foo', 0 ], [ 'foo', 4 ], [ 'foo', 999999999 ], [ '', 0 ], [ '', 1 ], [ '', 2 ], [ 'mötör', 2 ], [ 'mötör', 4 ] ] RETURN RIGHT(t[0], t[1])", true);
assertEqual(expected, actual);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test left function
////////////////////////////////////////////////////////////////////////////////
testRightInvalid : function () {
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT()"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo')"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', 2, 3)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT(null, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT(true, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT(4, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT([ ], 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT({ }, 2)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', null)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', true)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', 'bar')"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', [ ])"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', { })"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', -1)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN RIGHT('foo', -1.5)"); } ));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test length function
////////////////////////////////////////////////////////////////////////////////
@ -523,6 +587,16 @@ function ahuacatlFunctionsTestSuite () {
assertEqual(expected, actual);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test length function for strings
////////////////////////////////////////////////////////////////////////////////
testLength4 : function () {
var expected = [ 0, 1, 3, 3, 4, 5 ];
var actual = getQueryResults("FOR test IN [ '', ' ', 'foo', 'bar', 'meow', 'mötör' ] RETURN LENGTH(test)", true);
assertEqual(expected, actual);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test length function
////////////////////////////////////////////////////////////////////////////////
@ -533,7 +607,6 @@ function ahuacatlFunctionsTestSuite () {
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LENGTH(null)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LENGTH(true)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LENGTH(4)"); } ));
assertEqual(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, getErrorCode(function() { QUERY("RETURN LENGTH(\"yes\")"); } ));
},
////////////////////////////////////////////////////////////////////////////////