malwoden
Version:
   
172 lines • 6.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Calc = require("../calc");
var dijkstra_1 = require("./dijkstra");
describe("dijkstra", function () {
it("recognize as start = end case", function () {
var a = new dijkstra_1.Dijkstra({ topology: "four" });
var path = a.compute({ x: 2, y: 3 }, { x: 2, y: 3 });
expect(path).toEqual([{ x: 2, y: 3, r: 0 }]);
});
it("recognizes immediate neighbors - 4", function () {
var a = new dijkstra_1.Dijkstra({ topology: "four" });
var tests = [
[
{ x: 5, y: 5, r: 0 },
{ x: 6, y: 5, r: 1 },
],
[
{ x: 5, y: 5, r: 0 },
{ x: 5, y: 4, r: 1 },
],
[
{ x: 5, y: 5, r: 0 },
{ x: 4, y: 5, r: 1 },
],
[
{ x: 5, y: 5, r: 0 },
{ x: 5, y: 6, r: 1 },
],
];
for (var _i = 0, tests_1 = tests; _i < tests_1.length; _i++) {
var _a = tests_1[_i], v1 = _a[0], v2 = _a[1];
var path = a.compute(v1, v2);
expect(path).toEqual([v1, v2]);
}
});
it("recognizes basic paths - 4", function () {
var a = new dijkstra_1.Dijkstra({ topology: "four" });
var path = a.compute({ x: 0, y: 0 }, { x: 5, y: 5 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 1, y: 0, r: 1 },
{ x: 2, y: 0, r: 2 },
{ x: 3, y: 0, r: 3 },
{ x: 4, y: 0, r: 4 },
{ x: 5, y: 0, r: 5 },
{ x: 5, y: 1, r: 6 },
{ x: 5, y: 2, r: 7 },
{ x: 5, y: 3, r: 8 },
{ x: 5, y: 4, r: 9 },
{ x: 5, y: 5, r: 10 },
]);
});
it("recognizes basic paths - 8", function () {
var a = new dijkstra_1.Dijkstra({
topology: "eight",
});
var path = a.compute({ x: 0, y: 0 }, { x: 4, y: 0 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 1, y: 0, r: 1 },
{ x: 2, y: 0, r: 2 },
{ x: 3, y: 0, r: 3 },
{ x: 4, y: 0, r: 4 },
]);
});
it("recognizes blocked paths - 4", function () {
var a = new dijkstra_1.Dijkstra({
topology: "four",
isBlockedCallback: function (v) {
return Calc.Vector.areEqual(v, { x: 1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: -1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: 0, y: 1 }) ||
Calc.Vector.areEqual(v, { x: 0, y: -1 });
},
});
var path = a.compute({ x: 0, y: 0 }, { x: 5, y: 5 });
expect(path).toEqual(undefined);
});
it("recognizes blocked paths - 8", function () {
var a = new dijkstra_1.Dijkstra({
topology: "eight",
isBlockedCallback: function (v) {
return Calc.Vector.areEqual(v, { x: 1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: -1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: 0, y: 1 }) ||
Calc.Vector.areEqual(v, { x: 0, y: -1 }) ||
Calc.Vector.areEqual(v, { x: 1, y: -1 }) ||
Calc.Vector.areEqual(v, { x: -1, y: -1 }) ||
Calc.Vector.areEqual(v, { x: -1, y: 1 }) ||
Calc.Vector.areEqual(v, { x: 1, y: 1 });
},
});
var path = a.compute({ x: 0, y: 0 }, { x: 5, y: 5 });
expect(path).toEqual(undefined);
});
it("recognizes basic obstacles - 4", function () {
var a = new dijkstra_1.Dijkstra({
topology: "four",
isBlockedCallback: function (v) {
return Calc.Vector.areEqual(v, { x: 1, y: -1 }) ||
Calc.Vector.areEqual(v, { x: 1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: 1, y: 1 });
},
});
var path = a.compute({ x: 0, y: 0 }, { x: 2, y: 0 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 0, y: -1, r: 1 },
{ x: 0, y: -2, r: 2 },
{ x: 1, y: -2, r: 3 },
{ x: 2, y: -2, r: 4 },
{ x: 2, y: -1, r: 5 },
{ x: 2, y: 0, r: 6 },
]);
});
it("recognizes basic obstacles - 8", function () {
var a = new dijkstra_1.Dijkstra({
topology: "eight",
isBlockedCallback: function (v) {
return Calc.Vector.areEqual(v, { x: 1, y: -1 }) ||
Calc.Vector.areEqual(v, { x: 1, y: 0 }) ||
Calc.Vector.areEqual(v, { x: 1, y: 1 });
},
});
var path = a.compute({ x: 0, y: 0 }, { x: 2, y: 0 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 0, y: -1, r: 1 },
{ x: 1, y: -2, r: 2 },
{ x: 2, y: -1, r: 3 },
{ x: 2, y: 0, r: 4 },
]);
});
it("recognizes basic terrain", function () {
var a = new dijkstra_1.Dijkstra({
topology: "four",
getTerrainCallback: function () { return 0.5; },
});
var path = a.compute({ x: 0, y: 0 }, { x: 5, y: 5 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 1, y: 0, r: 0.5 },
{ x: 2, y: 0, r: 1 },
{ x: 3, y: 0, r: 1.5 },
{ x: 4, y: 0, r: 2 },
{ x: 5, y: 0, r: 2.5 },
{ x: 5, y: 1, r: 3 },
{ x: 5, y: 2, r: 3.5 },
{ x: 5, y: 3, r: 4 },
{ x: 5, y: 4, r: 4.5 },
{ x: 5, y: 5, r: 5 },
]);
});
it("recognizes terrain obstacles", function () {
var a = new dijkstra_1.Dijkstra({
topology: "four",
getTerrainCallback: function (_, to) {
return Calc.Vector.areEqual(to, { x: 1, y: 0 }) ? 2 : 0.5;
},
});
var path = a.compute({ x: 0, y: 0 }, { x: 2, y: 0 });
expect(path).toEqual([
{ x: 0, y: 0, r: 0 },
{ x: 0, y: -1, r: 0.5 },
{ x: 1, y: -1, r: 1 },
{ x: 2, y: -1, r: 1.5 },
{ x: 2, y: 0, r: 2 },
]);
});
});
//# sourceMappingURL=dijkstra.spec.js.map