UNPKG

node-dijkstra

Version:

A NodeJS implementation of Dijkstra's algorithm

133 lines (102 loc) 3.36 kB
/* eslint-env node, mocha */ /* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */ require("must"); const demand = require("must"); const sinon = require("sinon"); const Queue = require("../libs/PriorityQueue"); describe("PriorityQueue", () => { describe("#constructor", () => { it("starts an empty queue and keys set", () => { const queue = new Queue(); queue.keys.must.be.instanceOf(Set); queue.queue.must.be.an.array(); }); }); describe("#sort()", () => { it("sorts by having the smallest first", () => { const queue = new Queue(); queue.queue = [{ priority: 10 }, { priority: 1 }]; queue.sort(); queue.queue[0].priority.must.equal(1); }); }); describe("#set()", () => { it("only accept numbers as priority values", () => { const queue = new Queue(); demand(queue.set.bind(queue, "key", {})).throw(TypeError, /number/); }); it("adds an unexisting key to the queue and reorders it", () => { const queue = new Queue(); sinon.spy(queue, "sort"); queue.set("ok", 1); sinon.assert.calledOnce(queue.sort); queue.keys.size.must.equal(1); queue.queue.must.have.length(1); queue.queue[0].key.must.equal("ok"); queue.queue[0].priority.must.equal(1); }); it("updates the value of an existing key", () => { const queue = new Queue(); sinon.spy(queue, "sort"); queue.set("ok", 1); queue.set("ok", 5); sinon.assert.calledTwice(queue.sort); queue.keys.size.must.equal(1); queue.queue.must.have.length(1); queue.queue[0].key.must.equal("ok"); queue.queue[0].priority.must.equal(5); }); }); describe("#next()", () => { it("removes the first element in the queue", () => { const queue = new Queue(); queue.set("ok", 10); queue.set("not-ok", 1); queue.next(); queue.queue.must.have.length(1); queue.keys.size.must.equal(1); }); it("return the first element in the queue", () => { const queue = new Queue(); queue.set("ok", 10); queue.set("not-ok", 1); const el = queue.next(); el.must.have.keys(["priority", "key"]); el.priority.must.equal(1); el.key.must.equal("not-ok"); }); }); describe("#isEmpty()", () => { it("returns false when there are elements in the queue", () => { const queue = new Queue(); queue.set("ok", 3); queue.isEmpty().must.be.false(); }); it("returns true when the queue is empty", () => { const queue = new Queue(); queue.isEmpty().must.be.true(); }); }); describe("#has()", () => { it("returns false when the key does not exist", () => { const queue = new Queue(); queue.set("not-ok", 3); queue.has("ok").must.be.false(); }); it("returns false when the key does not exist", () => { const queue = new Queue(); queue.set("not-ok", 3); queue.has("ok").must.be.false(); }); }); describe("#get()", () => { it("gets the entry with the provided key", () => { const queue = new Queue(); queue.set("ok", 3); const res = queue.get("ok"); res.must.have.keys(["key", "priority"]); res.key.must.equal("ok"); res.priority.must.equal(3); }); }); });