mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
test: show a capped overview no longer holds repeat tiles
Adds a case that fails before de-duplication (a 24-slot overview held repeats and reported itself truncated) and says why the date-line halves overlap.
This commit is contained in:
1 parent
c07b71a443
commit
84714030c8
2 files changed
+13
-1
No files matched your search
@@ -20,3 +20,12 @@ test('reachable polar dateline coverage ranks 24 distinct tiles before overview
|
|||||||
);
|
);
|
||||||
assert.equal(overview.truncated, true);
|
assert.equal(overview.truncated, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('a limit that fits every distinct tile is not spent on repeats', () => {
|
||||||
|
// Before de-duplication this box yielded 27 entries for 24 tiles, so a
|
||||||
|
// 24-slot overview held repeats and still reported itself truncated.
|
||||||
|
const result = tilesForBbox([-10, 60, -20, 85], 3, { limit: 24 });
|
||||||
|
const keys = result.tiles.map((tile) => `${tile.x}/${tile.y}/${tile.z}`);
|
||||||
|
assert.equal(new Set(keys).size, 24);
|
||||||
|
assert.equal(result.truncated, false);
|
||||||
|
});
|
||||||
@@ -146,7 +146,10 @@ export function tilesForBbox(bbox, z, { limit = Infinity, focus = null } = {}) {
|
|||||||
const dx = Math.abs(tile.x - centre.x);
|
const dx = Math.abs(tile.x - centre.x);
|
||||||
return Math.min(dx, n - dx) ** 2 + (tile.y - centre.y) ** 2;
|
return Math.min(dx, n - dx) ** 2 + (tile.y - centre.y) ** 2;
|
||||||
};
|
};
|
||||||
// Each tile's distance is computed once; ties keep their row order.
|
// The date-line halves share a column when the gap between east and west is
|
||||||
|
// narrower than a tile; count that column once so a capped overview does not
|
||||||
|
// spend its slots on repeats. Each tile's distance is computed once; ties keep
|
||||||
|
// their row order.
|
||||||
const unique = [
|
const unique = [
|
||||||
...new Map(
|
...new Map(
|
||||||
tiles.map((tile) => [`${tile.x}/${tile.y}/${tile.z}`, tile]),
|
tiles.map((tile) => [`${tile.x}/${tile.y}/${tile.z}`, tile]),
|
||||||
|
|||||||
Reference in new issue
Block a user