node-ejs-renderer/node_modules/dijkstrajs/test/dijkstra.test.js
2024-06-09 13:55:01 -04:00

97 lines
2.9 KiB
JavaScript

'use strict';
var expect = require('expect.js');
var dijkstra = require('../dijkstra.js');
var find_path = dijkstra.find_path;
describe('dijkstra.js', function () {
describe('.find_path()', function () {
it('should find the path between two points, all edges have weight 1', function () {
// A B C
// D E F
// G H I
var graph = {
a: {b: 10, d: 1},
b: {a: 1, c: 1, e: 1},
c: {b: 1, f: 1},
d: {a: 1, e: 1, g: 1},
e: {b: 1, d: 1, f: 1, h: 1},
f: {c: 1, e: 1, i: 1},
g: {d: 1, h: 1},
h: {e: 1, g: 1, i: 1},
i: {f: 1, h: 1}
};
var path = find_path(graph, 'a', 'i');
expect(path).to.eql(['a', 'd', 'e', 'f', 'i']);
});
it('should find the path between two points, weighted edges', function () {
var graph = {
a: {b: 10, c: 100, d: 1},
b: {c: 10},
d: {b: 1, e: 1},
e: {f: 1},
f: {c: 1},
g: {b: 1}
};
var path = find_path(graph, 'a', 'c');
expect(path).to.eql(['a', 'd', 'e', 'f', 'c']);
path = find_path(graph, 'd', 'b');
expect(path).to.eql(['d', 'b']);
});
it('should throw on unreachable destination', function () {
var graph = {
a: {b: 10, c: 100, d: 1},
b: {c: 10},
d: {b: 1, e: 1},
e: {f: 1},
f: {c: 1},
g: {b: 1}
};
expect(function () { find_path(graph, 'c', 'a'); }).to.throwException();
expect(function () { find_path(graph, 'a', 'g'); }).to.throwException();
});
it('should throw on non-existent destination', function () {
var graph = {
a: {b: 10, c: 100, d: 1},
b: {c: 10},
d: {b: 1, e: 1},
e: {f: 1},
f: {c: 1},
g: {b: 1}
};
expect(function () { find_path(graph, 'a', 'z'); }).to.throwException();
});
});
describe('.single_source_shortest_paths()', function () {
it('should find all paths from a node', function () {
var graph = {
a: {b: 10, c: 100, d: 1},
b: {c: 10},
d: {b: 1, e: 1},
e: {f: 1},
f: {c: 1},
g: {b: 1}
};
// All paths from 'a'
var paths = dijkstra.single_source_shortest_paths(graph, 'a');
expect(paths).to.eql({
d: 'a',
b: 'd',
e: 'd',
f: 'e',
c: 'f'
});
});
});
});