97 lines
2.9 KiB
JavaScript
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'
|
|
});
|
|
});
|
|
});
|
|
});
|