aether-shards/test/generation/ContestedFrontierGenerator.test.js

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
});
});