base v3 tileID and lookup functions [#41]

This commit is contained in:
Brandon Liu
2022-09-19 20:41:08 -07:00
parent 407db08d73
commit 07eaf102a9
2 changed files with 178 additions and 0 deletions

View File

@@ -11,6 +11,8 @@ import {
createDirectory,
} from "./index";
import { Entry as EntryV3, zxyToTileId, tileIdToZxy, findTile } from "./v3";
test("stub data", (assertion) => {
let dataview = createDirectory([
{ z: 5, x: 1000, y: 2000, offset: 1000, length: 2000, is_dir: false },
@@ -145,3 +147,78 @@ test("convert spec v1 directory to spec v2 directory", (assertion) => {
entry = parseEntry(view, 2);
assertion.ok(entry!.offset === 3);
});
test("zxy to tile id", (assertion) => {
assertion.eq(zxyToTileId(0, 0, 0), 0);
assertion.eq(zxyToTileId(1, 0, 0), 1);
assertion.eq(zxyToTileId(1, 0, 1), 2);
assertion.eq(zxyToTileId(1, 1, 1), 3);
assertion.eq(zxyToTileId(1, 1, 0), 4);
assertion.eq(zxyToTileId(2, 0, 0), 5);
});
test("tile id to zxy", (assertion) => {
assertion.eq(tileIdToZxy(0), [0, 0, 0]);
assertion.eq(tileIdToZxy(1), [1, 0, 0]);
assertion.eq(tileIdToZxy(2), [1, 0, 1]);
assertion.eq(tileIdToZxy(3), [1, 1, 1]);
assertion.eq(tileIdToZxy(4), [1, 1, 0]);
assertion.eq(tileIdToZxy(5), [2, 0, 0]);
});
test("a lot of tiles", (assertion) => {
for (var z = 0; z < 9; z++) {
for (var x = 0; x < 1 << z; x++) {
for (var y = 0; y < 1 << z; y++) {
let result = tileIdToZxy(zxyToTileId(z, x, y));
if (result[0] !== z || result[1] !== x || result[2] !== y) {
assertion.fail("roundtrip failed");
}
}
}
}
});
test("tile search for first entry == id", (assertion) => {
let entries: EntryV3[] = [];
assertion.eq(findTile(entries, 101), null);
});
test("tile search for first entry == id", (assertion) => {
let entries: EntryV3[] = [{ tileId: 100, offset: 1, length: 1, runLength: 1 }];
let entry = findTile(entries, 100)!;
assertion.eq(entry.offset, 1);
assertion.eq(entry.length, 1);
assertion.eq(findTile(entries, 101), null);
});
test("tile search for first entry == id", (assertion) => {
let entries: EntryV3[] = [{ tileId: 100, offset: 1, length: 1, runLength: 2 }];
let entry = findTile(entries, 101)!;
assertion.eq(entry.offset, 1);
assertion.eq(entry.length, 1);
entries = [
{ tileId: 100, offset: 1, length: 1, runLength: 1 },
{ tileId: 150, offset: 2, length: 2, runLength: 2 },
];
entry = findTile(entries, 151)!;
assertion.eq(entry.offset, 2);
assertion.eq(entry.length, 2);
entries = [
{ tileId: 50, offset: 1, length: 1, runLength: 2 },
{ tileId: 100, offset: 2, length: 2, runLength: 1 },
{ tileId: 150, offset: 3, length: 3, runLength: 1 },
];
entry = findTile(entries, 51)!;
assertion.eq(entry.offset, 1);
assertion.eq(entry.length, 1);
});
test("leaf search", (assertion) => {
let entries: EntryV3[] = [{ tileId: 100, offset: 1, length: 1, runLength: 0 }];
let entry = findTile(entries, 150);
assertion.eq(entry!.offset, 1);
assertion.eq(entry!.length, 1);
});