mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
base v3 tileID and lookup functions [#41]
This commit is contained in:
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user