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) {
|
||||
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) {
|
||||
if (path.vertices.length <= config.minDepth) {
|
||||
return "exclude";
|
||||
return ArangoTraverser.EXCLUDE;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1314,7 +1314,7 @@ function CollectionTraversalSuite () {
|
|||
/// @brief test iteration
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testIterateUniqueVertices : function () {
|
||||
testIterateUniqueGlobalVertices : function () {
|
||||
var config = {
|
||||
edgeCollection: internal.db._collection(en),
|
||||
strategy: traversal.Traverser.DEPTH_FIRST,
|
||||
|
@ -1349,6 +1349,49 @@ function CollectionTraversalSuite () {
|
|||
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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -2363,6 +2363,7 @@ function AHUACATL_GRAPH_TRAVERSE () {
|
|||
}),
|
||||
trackPaths: params.paths || false,
|
||||
visitor: AHUACATL_TRAVERSE_VISITOR,
|
||||
maxDepth: params.maxDepth,
|
||||
filter: params.maxDepth != undefined ? traversal.MaxDepthFilter : VisitAllFilter,
|
||||
uniqueness: {
|
||||
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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
jsunity.run(ahuacatlQueryPathsTestSuite);
|
||||
jsunity.run(ahuacatlQueryTraverseTestSuite);
|
||||
|
||||
return jsunity.done();
|
||||
|
||||
|
|
Loading…
Reference in New Issue