123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- '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'
- });
- });
- });
- });
|