1
0
Fork 0

Merge branch 'devel' of https://github.com/triAGENS/ArangoDB into devel

This commit is contained in:
Jan Steemann 2013-01-13 14:48:19 +01:00
commit dc9969fb27
4 changed files with 112 additions and 59 deletions

View File

@ -1,10 +1,4 @@
/*jslint indent: 2,
nomen: true,
maxlen: 100,
sloppy: true,
vars: true,
white: true,
plusplus: true */
/*jslint indent: 2, nomen: true, maxlen: 100, sloppy: true, vars: true, white: true, plusplus: true */
/*global require, arango, db, edges, Module */
////////////////////////////////////////////////////////////////////////////////

View File

@ -1,8 +1,4 @@
/*jslint indent: 2,
nomen: true,
maxlen: 100,
sloppy: true,
plusplus: true */
/*jslint indent: 2, nomen: true, maxlen: 100, sloppy: true, plusplus: true */
/*global require, WeakDictionary, exports */
////////////////////////////////////////////////////////////////////////////////

View File

@ -467,6 +467,26 @@ function CollectionInboundExpander (config, vertex, path) {
return connections;
}
///////////////////////////////////////////////////////////////////////////////////////////
/// @brief default expander that expands all edges labeled with one label in config.labels
///////////////////////////////////////////////////////////////////////////////////////////
var ExpandEdgesWithLabels = function (config, vertex, path) {
var result = [ ];
if (!Array.isArray(config.labels)) {
config.labels = [config.labels];
}
var edgesList = edges[vertex._id];
if (edgesList != undefined) {
for (i = 0; i < edgesList.length; ++i) {
if (!!~config.labels.indexOf(edgesList[i].label)) {
result.push({ edge: edgesList[i], vertex: vertices[edgesList[i]._to] });
}
}
}
return result;
};
////////////////////////////////////////////////////////////////////////////////
/// @brief default visitor that just tracks every visit
////////////////////////////////////////////////////////////////////////////////
@ -648,6 +668,7 @@ exports.VisitAllFilter = VisitAllFilter;
exports.TrackingVisitor = TrackingVisitor;
exports.MinDepthFilter = MinDepthFilter;
exports.MaxDepthFilter = MaxDepthFilter;
exports.ExpandEdgesWithLabels = ExpandEdgesWithLabels;
////////////////////////////////////////////////////////////////////////////////
/// @}

View File

@ -47,8 +47,10 @@ var traversal = require("org/arangodb/graph/traversal");
////////////////////////////////////////////////////////////////////////////////
function GraphTreeTraversalSuite () {
var vertices;
var edges;
//var vertices;
//var edges;
var datasourceWorld;
var visitor = traversal.TrackingVisitor;
@ -66,10 +68,10 @@ function GraphTreeTraversalSuite () {
var expander = function (config, vertex, path) {
var r = [ ];
var edgesList = edges[vertex._id];
var edgesList = config.datasource.getOutEdges(vertex._id);
if (edgesList != undefined) {
for (i = 0; i < edgesList.length; ++i) {
r.push({ edge: edgesList[i], vertex: vertices[edgesList[i]._to] });
r.push({ edge: edgesList[i], vertex: config.datasource.vertices[edgesList[i]._to] });
}
}
return r;
@ -109,6 +111,7 @@ function GraphTreeTraversalSuite () {
visitor: visitor,
filter: filter,
expander: expander,
datasource: datasourceWorld,
noVisit: {
"vertices/Antarctica" : true,
@ -127,8 +130,9 @@ function GraphTreeTraversalSuite () {
////////////////////////////////////////////////////////////////////////////////
setUp : function () {
vertices = { };
edges = { };
var worldVertices = { };
var worldInEdges = { };
var worldOutEdges = { };
[ "World", "Nothing",
"Europe", "Asia", "America", "Australia", "Antarctica", "Africa", "Blackhole",
@ -141,10 +145,10 @@ function GraphTreeTraversalSuite () {
_key : key,
name : item
};
vertices[vertex._id] = vertex;
worldVertices[vertex._id] = vertex;
});
var connect = function (from, to) {
var connect = function (from, to, inlist, outlist) {
var key = from + "x" + to;
var edge = {
_id : "edges/" + key,
@ -154,29 +158,52 @@ function GraphTreeTraversalSuite () {
what : from + "->" + to
};
if (edges[edge._from] == undefined) {
edges[edge._from] = [ ];
if (outlist[edge._from] == undefined) {
outlist[edge._from] = [ ];
}
edges[edge._from].push(edge);
outlist[edge._from].push(edge);
if (inlist[edge._to] == undefined) {
inlist[edge._to] = [ ];
}
inlist[edge._to].push(edge);
};
connect("World", "Europe");
connect("World", "Asia");
connect("World", "America");
connect("World", "Australia");
connect("World", "Africa");
connect("World", "Antarctica");
connect("Europe", "DE");
connect("Europe", "FR");
connect("Europe", "GB");
connect("Europe", "IE");
connect("Asia", "CN");
connect("Asia", "JP");
connect("Asia", "TW");
connect("America", "US");
connect("America", "MX");
connect("Australia", "AU");
connect("Antarctica", "AN");
connect("World", "Europe", worldInEdges, worldOutEdges);
connect("World", "Asia", worldInEdges, worldOutEdges);
connect("World", "America", worldInEdges, worldOutEdges);
connect("World", "Australia", worldInEdges, worldOutEdges);
connect("World", "Africa", worldInEdges, worldOutEdges);
connect("World", "Antarctica", worldInEdges, worldOutEdges);
connect("Europe", "DE", worldInEdges, worldOutEdges);
connect("Europe", "FR", worldInEdges, worldOutEdges);
connect("Europe", "GB", worldInEdges, worldOutEdges);
connect("Europe", "IE", worldInEdges, worldOutEdges);
connect("Asia", "CN", worldInEdges, worldOutEdges);
connect("Asia", "JP", worldInEdges, worldOutEdges);
connect("Asia", "TW", worldInEdges, worldOutEdges);
connect("America", "US", worldInEdges, worldOutEdges);
connect("America", "MX", worldInEdges, worldOutEdges);
connect("Australia", "AU", worldInEdges, worldOutEdges);
connect("Antarctica", "AN", worldInEdges, worldOutEdges);
datasourceWorld = {
inEdges: worldInEdges,
outEdges: worldOutEdges,
vertices: worldVertices,
getAllEdges: function (vertexId) {
return this.inEdges[vertexId].concat(outEdges[vertex_id]);
},
getInEdges: function (vertexId) {
return this.inEdges[vertexId];
},
getOutEdges: function (vertexId) {
return this.outEdges[vertexId];
}
};
},
////////////////////////////////////////////////////////////////////////////////
@ -198,7 +225,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -255,7 +282,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -312,7 +339,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/DE",
@ -369,7 +396,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/AN",
@ -426,7 +453,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -483,7 +510,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -540,7 +567,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/DE",
@ -597,7 +624,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/AN",
@ -648,6 +675,7 @@ function GraphTreeTraversalSuite () {
testMinDepthFilterWithDepth0 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MinDepthFilter,
minDepth: 0
@ -655,7 +683,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -711,6 +739,7 @@ function GraphTreeTraversalSuite () {
testMinDepthFilterWithDepth1 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MinDepthFilter,
minDepth: 1
@ -718,7 +747,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/Europe",
@ -774,6 +803,7 @@ function GraphTreeTraversalSuite () {
testMinDepthFilterWithDepth2 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MinDepthFilter,
minDepth: 2
@ -781,7 +811,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/DE",
@ -823,6 +853,7 @@ function GraphTreeTraversalSuite () {
testMaxDepthFilterWithDepth0 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MaxDepthFilter,
maxDepth: 0
@ -830,7 +861,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -852,6 +883,7 @@ function GraphTreeTraversalSuite () {
testMaxDepthFilterWithDepth1 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MaxDepthFilter,
maxDepth: 1
@ -859,7 +891,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -893,6 +925,7 @@ function GraphTreeTraversalSuite () {
testMaxDepthFilterWithDepth2 : function () {
var config = {
datasource: datasourceWorld,
expander: expander,
filter: traversal.MaxDepthFilter,
maxDepth: 2
@ -900,7 +933,7 @@ function GraphTreeTraversalSuite () {
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/World",
@ -993,12 +1026,13 @@ function GraphTreeTraversalSuite () {
exclude2: "AU",
exclude3: "World",
prune1: "Asia",
prune2: "Europe"
prune2: "Europe",
datasource: datasourceWorld
};
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [
"vertices/Asia",
@ -1044,12 +1078,13 @@ function GraphTreeTraversalSuite () {
excludeAndPrune,
traversal.VisitAllFilter
],
excludeAndPrune: "World"
excludeAndPrune: "World",
datasource: datasourceWorld
};
var result = getResult();
var traverser = new traversal.Traverser(config);
traverser.traverse(result, vertices["vertices/World"]);
traverser.traverse(result, config.datasource.vertices["vertices/World"]);
var expectedVisits = [];
@ -1058,6 +1093,13 @@ function GraphTreeTraversalSuite () {
var expectedPaths = [];
assertEqual(expectedPaths, getVisitedPaths(result.visited.paths));
},
testFollowEdgesWithLabels : function () {
var config = {
expander: traversal.ExpandEdgesWithLabels,
edgeLabels: ["likes", "hates"]
}
}
};
}