mirror of https://gitee.com/bigwinds/arangodb
some tests for traversal
This commit is contained in:
parent
b42212e559
commit
ad14130aa0
|
@ -601,7 +601,7 @@ function VisitAllFilter () {
|
||||||
|
|
||||||
function MaxDepthFilter (config, vertex, path) {
|
function MaxDepthFilter (config, vertex, path) {
|
||||||
if (path.vertices.length > config.maxDepth) {
|
if (path.vertices.length > config.maxDepth) {
|
||||||
return "prune";
|
return ArangoTraverser.PRUNE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ function MaxDepthFilter (config, vertex, path) {
|
||||||
|
|
||||||
function MinDepthFilter (config, vertex, path) {
|
function MinDepthFilter (config, vertex, path) {
|
||||||
if (path.vertices.length <= config.minDepth) {
|
if (path.vertices.length <= config.minDepth) {
|
||||||
return "exclude";
|
return ArangoTraverser.EXCLUDE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1314,7 +1314,7 @@ function CollectionTraversalSuite () {
|
||||||
/// @brief test iteration
|
/// @brief test iteration
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
testIterateUniqueVertices : function () {
|
testIterateUniqueGlobalVertices : function () {
|
||||||
var config = {
|
var config = {
|
||||||
edgeCollection: internal.db._collection(en),
|
edgeCollection: internal.db._collection(en),
|
||||||
strategy: traversal.Traverser.DEPTH_FIRST,
|
strategy: traversal.Traverser.DEPTH_FIRST,
|
||||||
|
@ -1349,6 +1349,49 @@ function CollectionTraversalSuite () {
|
||||||
assertEqual(expectedVisits, getIds(result.visited.vertices));
|
assertEqual(expectedVisits, getIds(result.visited.vertices));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test iteration
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testIterateUniquePathVertices : function () {
|
||||||
|
var config = {
|
||||||
|
edgeCollection: internal.db._collection(en),
|
||||||
|
strategy: traversal.Traverser.DEPTH_FIRST,
|
||||||
|
order: traversal.Traverser.PRE_ORDER,
|
||||||
|
itemOrder: traversal.Traverser.FORWARD,
|
||||||
|
uniqueness: {
|
||||||
|
vertices: traversal.Traverser.UNIQUE_PATH,
|
||||||
|
edges: traversal.Traverser.UNIQUE_NONE
|
||||||
|
},
|
||||||
|
filter: traversal.VisitAllFilter,
|
||||||
|
expander: traversal.CollectionOutboundExpander,
|
||||||
|
|
||||||
|
sort: function (l, r) { return l._key < r._key ? -1 : 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
var result = getResult();
|
||||||
|
var traverser = new traversal.Traverser(config);
|
||||||
|
traverser.traverse(result, vertexCollection.document(vn + "/A"));
|
||||||
|
|
||||||
|
var expectedVisits = [
|
||||||
|
vn + "/A",
|
||||||
|
vn + "/B",
|
||||||
|
vn + "/C",
|
||||||
|
vn + "/D",
|
||||||
|
vn + "/E",
|
||||||
|
vn + "/F",
|
||||||
|
vn + "/G",
|
||||||
|
vn + "/H",
|
||||||
|
vn + "/I",
|
||||||
|
vn + "/H",
|
||||||
|
vn + "/D",
|
||||||
|
vn + "/E",
|
||||||
|
vn + "/F"
|
||||||
|
];
|
||||||
|
|
||||||
|
assertEqual(expectedVisits, getIds(result.visited.vertices));
|
||||||
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief test iteration
|
/// @brief test iteration
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -2363,6 +2363,7 @@ function AHUACATL_GRAPH_TRAVERSE () {
|
||||||
}),
|
}),
|
||||||
trackPaths: params.paths || false,
|
trackPaths: params.paths || false,
|
||||||
visitor: AHUACATL_TRAVERSE_VISITOR,
|
visitor: AHUACATL_TRAVERSE_VISITOR,
|
||||||
|
maxDepth: params.maxDepth,
|
||||||
filter: params.maxDepth != undefined ? traversal.MaxDepthFilter : VisitAllFilter,
|
filter: params.maxDepth != undefined ? traversal.MaxDepthFilter : VisitAllFilter,
|
||||||
uniqueness: {
|
uniqueness: {
|
||||||
vertices: validate(params.uniqueness && params.uniqueness.vertices, {
|
vertices: validate(params.uniqueness && params.uniqueness.vertices, {
|
||||||
|
|
|
@ -273,11 +273,89 @@ function ahuacatlQueryPathsTestSuite () {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test suite
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function ahuacatlQueryTraverseTestSuite () {
|
||||||
|
var vn = "UnitTestsTraverseVertices";
|
||||||
|
var en = "UnitTestsTraverseEdges";
|
||||||
|
|
||||||
|
var vertices;
|
||||||
|
var edges;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief execute a given query
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function executeQuery (query, params) {
|
||||||
|
var cursor = AHUACATL_RUN(query, params);
|
||||||
|
if (cursor instanceof ArangoError) {
|
||||||
|
print(query, cursor.errorMessage);
|
||||||
|
}
|
||||||
|
assertFalse(cursor instanceof ArangoError);
|
||||||
|
return cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief set up
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
setUp : function () {
|
||||||
|
db._drop(vn);
|
||||||
|
db._drop(en);
|
||||||
|
|
||||||
|
vertexCollection = db._create(vn);
|
||||||
|
edgeCollection = db._createEdgeCollection(en);
|
||||||
|
|
||||||
|
[ "A", "B", "C", "D" ].forEach(function (item) {
|
||||||
|
vertexCollection.save({ _key: item, name: item });
|
||||||
|
});
|
||||||
|
|
||||||
|
[ [ "A", "B" ], [ "B", "C" ], [ "A", "D" ], [ "D", "C" ], [ "C", "A" ] ].forEach(function (item) {
|
||||||
|
var l = item[0];
|
||||||
|
var r = item[1];
|
||||||
|
edgeCollection.save(vn + "/" + l, vn + "/" + r, { _key: l + r, what : l + "->" + r });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief tear down
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
tearDown : function () {
|
||||||
|
db._drop(vn);
|
||||||
|
db._drop(en);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief tear down
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testTraversalDepthFirst : function () {
|
||||||
|
var config = {
|
||||||
|
strategy: "depthfirst",
|
||||||
|
order: "preorder",
|
||||||
|
itemOrder: "forward",
|
||||||
|
maxDepth: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
var actual = executeQuery("FOR p IN TRAVERSE(@@v, @@e, '" + vn + "/A', 'outbound', " + JSON.stringify(config) + ") RETURN p.vertex._key", { "@v" : vn, "@e" : en }).getRows();
|
||||||
|
|
||||||
|
assertEqual([ "A", "B", "C", "D", "C" ], actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief executes the test suite
|
/// @brief executes the test suite
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
jsunity.run(ahuacatlQueryPathsTestSuite);
|
jsunity.run(ahuacatlQueryPathsTestSuite);
|
||||||
|
jsunity.run(ahuacatlQueryTraverseTestSuite);
|
||||||
|
|
||||||
return jsunity.done();
|
return jsunity.done();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue