avocado/packages/topdown/test/tiles.js
2021-03-20 13:26:51 -05:00

116 lines
3.0 KiB
JavaScript

require('source-map-support').install();
import {Latus} from '@latus/core';
import {expect} from 'chai';
describe('Tiles', () => {
let latus;
beforeEach(async () => {
latus = Latus.mock({
'@avocado/resource': require('@avocado/resource'),
'@avocado/topdown': require('../src'),
});
await Promise.all(latus.invokeFlat('@latus/core/starting'));
});
it("has sane defaults", async () => {
const {Tiles} = latus.get('%resources');
const tiles = new Tiles();
expect(tiles.size).to.deep.equal([0, 0]);
expect(tiles.data.length).to.equal(0);
});
it("gets and sets tile data", async () => {
const {Tiles} = latus.get('%resources');
const tiles = new Tiles({data: [0, 1, 2, 3], size: [2, 2]});
expect(tiles.tileAt([0, 0])).to.equal(0);
expect(tiles.tileAt([1, 0])).to.equal(1);
expect(tiles.tileAt([0, 1])).to.equal(2);
expect(tiles.tileAt([1, 1])).to.equal(3);
tiles.setTileAt([0, 0], 69);
tiles.setTileAt([1, 0], 420);
tiles.setTileAt([0, 1], 311);
tiles.setTileAt([1, 1], 42);
expect(tiles.data).to.deep.equal([69, 420, 311, 42]);
});
it("can get a data slice", async () => {
const {Tiles} = latus.get('%resources');
const tiles = new Tiles(
{
data: [
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15,
],
size: [4, 4],
},
);
expect(tiles.slice([1, 1, 2, 2])).to.deep.equal([5, 6, 9, 10]);
expect(tiles.slice([1, 0, 3, 3])).to.deep.equal([1, 2, 3, 5, 6, 7, 9, 10, 11]);
expect(tiles.slice([-1, -1, 5, 5])).to.deep.equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
expect(tiles.slice([1, 1, 1, 1])).to.deep.equal([5]);
expect(tiles.slice([1, 1, 0, 0])).to.deep.equal([]);
});
it("can get convex hulls around indices", () => {
const {Tiles} = latus.get('%resources');
const hulls = [
[
[2, 0],
[3, 0],
[3, 3],
[1, 3],
[1, 1],
],
[
[4, 2],
[6, 2],
[7, 3],
[7, 4],
[4, 4],
],
];
const tiles = new Tiles(
{
data: [
0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 1, 1, 1, 0,
],
size: [8, 4],
},
);
expect(tiles.indexHulls(1)).to.deep.equal(hulls);
});
it("can stamp at", async () => {
const {Tiles} = latus.get('%resources');
const tiles = new Tiles(
{
data: [
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
],
size: [4, 4],
},
);
tiles.stampAt([0, 0, 2, 3], [1, 1, 1, 1, 1, 1])
expect(tiles.data).to.deep.equal([
1, 1, 0, 0,
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
]);
expect(tiles.packetsFor()).to.deep.equal([
[
'TilesUpdate',
{
position: [0, 0],
size: [2, 3],
tiles: [1, 1, 1, 1, 1, 1],
},
],
]);
});
});