1
0
Fork 0

some tests for traversal

This commit is contained in:
Jan Steemann 2013-01-13 23:40:27 +01:00
parent b42212e559
commit ad14130aa0
4 changed files with 125 additions and 3 deletions

View File

@ -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;
}
};

View File

@ -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
////////////////////////////////////////////////////////////////////////////////

View File

@ -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, {

View File

@ -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();