malwoden
Version:
   
147 lines • 5.28 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var calc_1 = require("../calc");
var range_finder_1 = require("./range-finder");
describe("range-finder", function () {
it("can create a new RangeFinder", function () {
var distanceFunc = function () { return 1.5; };
var rf = new range_finder_1.RangeFinder({
topology: "four",
getTerrainCallback: distanceFunc,
});
expect(rf).not.toBeUndefined();
expect(rf["getTerrain"]).toBe(distanceFunc);
});
it("can get a range of 0", function () {
var rf = new range_finder_1.RangeFinder({
topology: "eight",
});
var range = rf.compute({
start: { x: 0, y: 0 },
maxRange: 0,
});
expect(range).toEqual([{ x: 0, y: 0, r: 0 }]);
});
it("can get a range of (1,2) - topology four", function () {
var rf = new range_finder_1.RangeFinder({
topology: "four",
});
var range = rf.compute({
start: { x: 0, y: 0 },
maxRange: 2,
minRange: 1,
});
expect(range).toHaveLength(12);
expect(range).toEqual([
// gen 1
{ x: 1, y: 0, r: 1 },
{ x: 0, y: -1, r: 1 },
{ x: -1, y: 0, r: 1 },
{ x: 0, y: 1, r: 1 },
// gen 2
{ x: 2, y: 0, r: 2 },
{ x: 1, y: -1, r: 2 },
{ x: 1, y: 1, r: 2 },
{ x: 0, y: -2, r: 2 },
{ x: -1, y: -1, r: 2 },
{ x: -2, y: 0, r: 2 },
{ x: -1, y: 1, r: 2 },
{ x: 0, y: 2, r: 2 },
]);
});
it("can get a range of (1,2) - topology eight", function () {
var rf = new range_finder_1.RangeFinder({
topology: "eight",
});
var range = rf.compute({
start: { x: 0, y: 0 },
maxRange: 2,
minRange: 1,
});
expect(range).toHaveLength(24);
expect(range).toEqual([
// gen 1
{ r: 1, x: 1, y: 0 },
{ r: 1, x: 0, y: -1 },
{ r: 1, x: -1, y: 0 },
{ r: 1, x: 0, y: 1 },
{ r: 1, x: 1, y: -1 },
{ r: 1, x: -1, y: -1 },
{ r: 1, x: -1, y: 1 },
{ r: 1, x: 1, y: 1 },
// gen 2
{ r: 2, x: 2, y: 0 },
{ r: 2, x: 2, y: -1 },
{ r: 2, x: 2, y: 1 },
{ r: 2, x: 0, y: -2 },
{ r: 2, x: 1, y: -2 },
{ r: 2, x: -1, y: -2 },
{ r: 2, x: -2, y: 0 },
{ r: 2, x: -2, y: -1 },
{ r: 2, x: -2, y: 1 },
{ r: 2, x: 0, y: 2 },
{ r: 2, x: -1, y: 2 },
{ r: 2, x: 1, y: 2 },
{ r: 2, x: 2, y: -2 },
{ r: 2, x: -2, y: -2 },
{ r: 2, x: -2, y: 2 },
{ r: 2, x: 2, y: 2 },
]);
});
it("can work with a distance function - topology four", function () {
var wall = { x: 1, y: 0 };
var fs = new range_finder_1.RangeFinder({
topology: "four",
getTerrainCallback: function (_, to) { return (calc_1.Vector.areEqual(to, wall) ? 5 : 1); },
});
var range = fs.compute({
start: { x: 0, y: 0 },
maxRange: 4,
});
// Don't expect us to use the wall
for (var _i = 0, range_1 = range; _i < range_1.length; _i++) {
var r = range_1[_i];
expect(calc_1.Vector.areEqual(r, wall)).toBeFalsy();
}
// Expect us to have gone around the wall
expect(range.some(function (v) { return calc_1.Vector.areEqual(v, { x: 2, y: 0 }); })).toBeTruthy();
});
it("can work with a distance function - topology eight", function () {
var wall = { x: 1, y: 0 };
var fs = new range_finder_1.RangeFinder({
topology: "eight",
getTerrainCallback: function (_, to) { return (calc_1.Vector.areEqual(to, wall) ? 5 : 1); },
});
var range = fs.compute({
start: { x: 0, y: 0 },
maxRange: 4,
});
// Don't expect us to use the wall
for (var _i = 0, range_2 = range; _i < range_2.length; _i++) {
var r = range_2[_i];
expect(calc_1.Vector.areEqual(r, wall)).toBeFalsy();
}
// Expect us to have gone around the wall
expect(range.some(function (v) { return calc_1.Vector.areEqual(v, { x: 2, y: 0 }); })).toBeTruthy();
});
it("will change if it found a shorter path", function () {
var fs = new range_finder_1.RangeFinder({
topology: "four",
getTerrainCallback: function (from, to) {
if (calc_1.Vector.areEqual(from, { x: 0, y: -1 })) {
return 0.5;
}
else {
return 1;
}
},
});
var range = fs.compute({
start: { x: 0, y: 0 },
minRange: 0,
maxRange: 2,
});
expect(range.some(function (rv) { return calc_1.Vector.areEqual(rv, { x: 1, y: -1 }) && rv.r === 1.5; })).toBeTruthy();
});
});
//# sourceMappingURL=range-finder.spec.js.map