mirror of https://gitee.com/bigwinds/arangodb
Adapted existing shortest path tests to new version. Breaking API Change. Has to be documented.
This commit is contained in:
parent
2d69425b39
commit
e1813327b5
|
@ -5599,9 +5599,6 @@ function AQL_SHORTEST_PATH (vertexCollection,
|
|||
}
|
||||
if (params.hasOwnProperty("includeData")) {
|
||||
opts.includeData = params.includeData;
|
||||
} else {
|
||||
// Default has to include the data for backwards compatibility
|
||||
opts.includeData = true;
|
||||
}
|
||||
if (params.hasOwnProperty("followEdges")) {
|
||||
opts.followEdges = params.followEdges;
|
||||
|
@ -5627,35 +5624,13 @@ function AQL_SHORTEST_PATH (vertexCollection,
|
|||
}
|
||||
}
|
||||
|
||||
var newRes = CPP_SHORTEST_PATH(vertexCollections, edgeCollections,
|
||||
// newRes has the format: { vertices: [Doc], edges: [Doc], distance: Number}
|
||||
// oldResult had the format: [ {vertex: Doc} ]
|
||||
return CPP_SHORTEST_PATH(vertexCollections, edgeCollections,
|
||||
TO_ID(startVertex, vertexCollection),
|
||||
TO_ID(endVertex, vertexCollection),
|
||||
opts
|
||||
);
|
||||
// newRes has the format: { vertices: [Doc], edges: [Doc], distance: Number}
|
||||
// legacyResult has the format: [ {vertex: Doc} ]
|
||||
var legacyResult = [];
|
||||
if (newRes === null) {
|
||||
return legacyResult;
|
||||
}
|
||||
|
||||
if (params.paths) {
|
||||
// Prints all sub paths in form of {vertex: target, vertices: [verticesOnPath], edges: [edgesOnPath]}
|
||||
for (i = 0; i < newRes.vertices.length; ++i) {
|
||||
legacyResult.push({
|
||||
vertex: newRes.vertices[i],
|
||||
path: {
|
||||
vertices: newRes.vertices.slice(0, i + 1),
|
||||
edges: newRes.edges.slice(0, i)
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < newRes.vertices.length; ++i) {
|
||||
legacyResult.push({vertex: newRes.vertices[i]});
|
||||
}
|
||||
}
|
||||
return legacyResult;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*jshint globalstrict:false, strict:false, sub: true, maxlen: 500 */
|
||||
/*global assertEqual */
|
||||
/*global assertEqual, assertTrue */
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief tests for query language, graph functions
|
||||
|
@ -736,26 +736,65 @@ function ahuacatlQueryShortestPathTestSuite () {
|
|||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief shortest path using dijkstra
|
||||
/// @brief shortest path using dijkstra default config
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testShortestPathDijkstraOutbound : function () {
|
||||
var config = {
|
||||
paths: true,
|
||||
_sort: true
|
||||
};
|
||||
|
||||
var actual = getQueryResults("FOR p IN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/H', 'outbound', " + JSON.stringify(config) + ") RETURN [ p.vertex._key, p.path.vertices[*]._key, p.path.edges[*]._key ]", { "@v" : vn, "@e" : en });
|
||||
var actual = getQueryResults("RETURN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/H', 'outbound', " + JSON.stringify(config) + ")", { "@v" : vn, "@e" : en });
|
||||
|
||||
assertEqual([
|
||||
[ "A", [ "A" ], [ ] ],
|
||||
[ "D", [ "A", "D" ], [ "AD" ] ],
|
||||
[ "E", [ "A", "D", "E" ], [ "AD", "DE" ] ],
|
||||
[ "G", [ "A", "D", "E", "G" ], [ "AD", "DE", "EG" ] ],
|
||||
[ "H", [ "A", "D", "E", "G", "H" ], [ "AD", "DE", "EG", "GH" ] ]
|
||||
assertEqual([
|
||||
{
|
||||
vertices: [
|
||||
vn + "/A",
|
||||
vn + "/D",
|
||||
vn + "/E",
|
||||
vn + "/G",
|
||||
vn + "/H"
|
||||
],
|
||||
edges: [
|
||||
en + "/AD",
|
||||
en + "/DE",
|
||||
en + "/EG",
|
||||
en + "/GH"
|
||||
],
|
||||
distance: 4
|
||||
}
|
||||
], actual);
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief shortest path using dijkstra with includeData: true
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testShortestPathDijkstraOutboundIncludeData : function () {
|
||||
var config = {
|
||||
_sort: true,
|
||||
includeData: true
|
||||
};
|
||||
|
||||
var actual = getQueryResults("RETURN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/H', 'outbound', " + JSON.stringify(config) + ")", { "@v" : vn, "@e" : en });
|
||||
|
||||
assertEqual(actual.length, 1);
|
||||
assertTrue(actual[0].hasOwnProperty("vertices"));
|
||||
assertTrue(actual[0].hasOwnProperty("edges"));
|
||||
var vertices = actual[0].vertices;
|
||||
var edges = actual[0].edges;
|
||||
assertEqual(vertices.length, edges.length + 1);
|
||||
var correct = ["A", "D", "E", "G", "H"];
|
||||
for (var i = 0; i < edges.length; ++i) {
|
||||
assertEqual(vertices[i]._key, correct[i]);
|
||||
assertEqual(vertices[i].name, correct[i]);
|
||||
assertEqual(vertices[i + 1].name, correct[i + 1]);
|
||||
assertEqual(edges[i]._key, correct[i] + correct[i + 1]);
|
||||
assertEqual(edges[i].what, correct[i] + "->" + correct[i + 1]);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief shortest path using dijkstra
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -765,9 +804,9 @@ function ahuacatlQueryShortestPathTestSuite () {
|
|||
_sort: true
|
||||
};
|
||||
|
||||
var actual = getQueryResults("FOR p IN SHORTEST_PATH(@@v, @@e, '" + vn + "/H', '" + vn + "/A', 'inbound', " + JSON.stringify(config) + ") RETURN p.vertex._key", { "@v" : vn, "@e" : en });
|
||||
var actual = getQueryResults("RETURN SHORTEST_PATH(@@v, @@e, '" + vn + "/H', '" + vn + "/A', 'inbound', " + JSON.stringify(config) + ").vertices", { "@v" : vn, "@e" : en });
|
||||
|
||||
assertEqual([ "H", "G", "E", "D", "A" ], actual);
|
||||
assertEqual([[ vn + "/H", vn + "/G", vn + "/E", vn + "/D", vn + "/A" ]], actual);
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -860,18 +899,27 @@ function ahuacatlQueryShortestPathTestSuite () {
|
|||
});
|
||||
|
||||
var config = {
|
||||
paths: true,
|
||||
_sort: true
|
||||
};
|
||||
|
||||
var actual = getQueryResults("FOR p IN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/H', 'outbound', " + JSON.stringify(config) + ") RETURN [ p.vertex._key, p.path.vertices[*]._key, p.path.edges[*]._key ]", { "@v" : vn, "@e" : en });
|
||||
|
||||
assertEqual([
|
||||
[ "A", [ "A" ], [ ] ],
|
||||
[ "D", [ "A", "D" ], [ "AD" ] ],
|
||||
[ "E", [ "A", "D", "E" ], [ "AD", "DE" ] ],
|
||||
[ "G", [ "A", "D", "E", "G" ], [ "AD", "DE", "EG" ] ],
|
||||
[ "H", [ "A", "D", "E", "G", "H" ], [ "AD", "DE", "EG", "GH" ] ]
|
||||
var actual = getQueryResults("RETURN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/H', 'outbound', " + JSON.stringify(config) + ")", { "@v" : vn, "@e" : en });
|
||||
assertEqual([
|
||||
{
|
||||
vertices: [
|
||||
vn + "/A",
|
||||
vn + "/D",
|
||||
vn + "/E",
|
||||
vn + "/G",
|
||||
vn + "/H"
|
||||
],
|
||||
edges: [
|
||||
en + "/AD",
|
||||
en + "/DE",
|
||||
en + "/EG",
|
||||
en + "/GH"
|
||||
],
|
||||
distance: 4
|
||||
}
|
||||
], actual);
|
||||
},
|
||||
|
||||
|
@ -884,13 +932,12 @@ function ahuacatlQueryShortestPathTestSuite () {
|
|||
vertexCollection.save({ _key: "J", name: "J" });
|
||||
|
||||
var config = {
|
||||
paths: true,
|
||||
_sort: true
|
||||
};
|
||||
|
||||
var actual = getQueryResults("FOR p IN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/J', 'outbound', " + JSON.stringify(config) + ") RETURN p.vertex._key", { "@v" : vn, "@e" : en });
|
||||
var actual = getQueryResults("RETURN SHORTEST_PATH(@@v, @@e, '" + vn + "/A', '" + vn + "/J', 'outbound', " + JSON.stringify(config) + ")", { "@v" : vn, "@e" : en });
|
||||
|
||||
assertEqual([ ], actual);
|
||||
assertEqual([ null ], actual);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue