90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
import { expect } from "@esm-bundle/chai";
|
|
import { ContestedFrontierGenerator } from "../../src/generation/ContestedFrontierGenerator.js";
|
|
import { VoxelGrid } from "../../src/grid/VoxelGrid.js";
|
|
|
|
// MOCK Browser APIs if needed (web-test-runner generally runs in browser/headless chrome so OffscreenCanvas should exist)
|
|
// But if running in node via some flag, we might need polyfills.
|
|
// However, package.json says "web-test-runner --node-resolve", which implies browser environment unless configured otherwise.
|
|
// If typical tests run in browser, OffscreenCanvas is available.
|
|
|
|
describe("Generation: ContestedFrontierGenerator", () => {
|
|
let grid;
|
|
let generator;
|
|
|
|
beforeEach(() => {
|
|
grid = new VoxelGrid(30, 10, 30);
|
|
generator = new ContestedFrontierGenerator(grid, 12345);
|
|
});
|
|
|
|
it("should generate a trench map with correct IDs", () => {
|
|
generator.generate();
|
|
|
|
let solidCount = 0;
|
|
let fortifications = 0;
|
|
let trenchWalls = 0;
|
|
let trenchFloors = 0;
|
|
|
|
for (let x = 0; x < grid.size.x; x++) {
|
|
for (let y = 0; y < grid.size.y; y++) {
|
|
for (let z = 0; z < grid.size.z; z++) {
|
|
const id = grid.getCell(x, y, z);
|
|
if (id !== 0) {
|
|
solidCount++;
|
|
if (id === 12) fortifications++;
|
|
if (id >= 120 && id < 200) trenchWalls++;
|
|
if (id >= 220 && id < 300) trenchFloors++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
expect(solidCount).to.be.greaterThan(0, "Should generate solid voxels");
|
|
expect(trenchWalls).to.be.greaterThan(
|
|
0,
|
|
"Should generate trench walls (120+)"
|
|
);
|
|
expect(trenchFloors).to.be.greaterThan(
|
|
0,
|
|
"Should generate trench floors (220+)"
|
|
);
|
|
// Fortifications are probabilistic, but likely with this seed
|
|
// expect(fortifications).to.be.greaterThanOrEqual(0);
|
|
});
|
|
|
|
it("should distribute splotchy textures (muddy, mixed, grassy)", () => {
|
|
// We can inspect ID ranges in the floor area (220-229) to see if we get variation
|
|
generator.generate();
|
|
|
|
const counts = {
|
|
muddy: 0, // 220-222
|
|
mixed: 0, // 223-226
|
|
grassy: 0, // 227-229
|
|
};
|
|
|
|
for (let x = 0; x < grid.size.x; x++) {
|
|
for (let z = 0; z < grid.size.z; z++) {
|
|
// Check surface
|
|
for (let y = grid.size.y - 1; y >= 0; y--) {
|
|
const id = grid.getCell(x, y, z);
|
|
if (id >= 220 && id <= 222) {
|
|
counts.muddy++;
|
|
break;
|
|
}
|
|
if (id >= 223 && id <= 226) {
|
|
counts.mixed++;
|
|
break;
|
|
}
|
|
if (id >= 227 && id <= 229) {
|
|
counts.grassy++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// We expect at least some representation of each, or at least 2 of them given the noise scale
|
|
expect(counts.muddy + counts.mixed + counts.grassy).to.be.greaterThan(0);
|
|
// With current seed 12345, we likely have a mix
|
|
// Just assert that we have *some* floors
|
|
});
|
|
});
|