test(world): Bodenplatte mit vielen Löchern messen
Erstes Risiko des Entwurfs: die Fahrbahn wird als Loch aus der Bodenplatte geschnitten, und ShapeUtils.triangulateShape läuft beim Nachladen im Hauptthread. Der Test hält fest, dass 100 Löcher je Chunk unter 50 ms bleiben und keines verschwindet. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a86a4c9601
commit
f301d39ea0
1 file changed
+38
@@ -195,4 +195,42 @@ describe("geometry", () => {
|
|||||||
}
|
}
|
||||||
expect([deckel, aussen, innen]).toEqual([8, 8, 8]);
|
expect([deckel, aussen, innen]).toEqual([8, 8, 8]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Bodenplatte mit vielen Löchern (Risiko aus dem Entwurf, Teil 2)", () => {
|
||||||
|
// 250-m-Chunk mit einem Raster aus 100 rechteckigen Löchern: die Größenordnung, die die
|
||||||
|
// Fahrbahnlöcher im dichtesten Stadtchunk erzeugen. Gemessen wird die Zeit, die
|
||||||
|
// triangulateShape dafür braucht — sie läuft beim Nachladen im Hauptthread.
|
||||||
|
const plateWithHoles = (count) => {
|
||||||
|
const outer = [[0, 0], [250, 0], [250, -250], [0, -250]];
|
||||||
|
const holes = [];
|
||||||
|
const side = Math.ceil(Math.sqrt(count));
|
||||||
|
for (let k = 0; k < count; k++) {
|
||||||
|
const x = 5 + (k % side) * (240 / side), z = -5 - Math.floor(k / side) * (240 / side);
|
||||||
|
const w = 240 / side - 6;
|
||||||
|
holes.push([[x, z], [x + w, z], [x + w, z - w], [x, z - w]]);
|
||||||
|
}
|
||||||
|
return [[outer, ...holes]];
|
||||||
|
};
|
||||||
|
|
||||||
|
it("baut eine Platte mit 100 Löchern in unter 50 ms", () => {
|
||||||
|
const chunk = { chunk: [0, 0], origin: [0, 0], land: plateWithHoles(100),
|
||||||
|
roads: [], centerlines: [], buildings: [], palms: [] };
|
||||||
|
const start = performance.now();
|
||||||
|
const geo = buildChunkGeometry(chunk).ground;
|
||||||
|
const ms = performance.now() - start;
|
||||||
|
console.log(`ZEITMESSUNG: ${ms.toFixed(2)} ms`);
|
||||||
|
expect(geo).not.toBeNull();
|
||||||
|
// Jedes Loch bringt vier Wandvierecke; die Deckfläche kommt dazu.
|
||||||
|
expect(geo.getAttribute("position").count).toBeGreaterThan(100 * 16);
|
||||||
|
expect(ms).toBeLessThan(50);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("lässt kein Loch verschwinden", () => {
|
||||||
|
const chunk = { chunk: [0, 0], origin: [0, 0], land: plateWithHoles(25),
|
||||||
|
roads: [], centerlines: [], buildings: [], palms: [] };
|
||||||
|
const geo = buildChunkGeometry(chunk).ground;
|
||||||
|
// Ohne Löcher hätte die Platte 4 Ringpunkte für die Wände plus 4 für die Decke.
|
||||||
|
expect(geo.getAttribute("position").count).toBeGreaterThan(25 * 16);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Reference in new issue
Block a user