36 lines
1.9 KiB
JavaScript
36 lines
1.9 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { generateMap } from './mapGenerator.js';
|
|
import { createWorldMap } from './worldMap.js';
|
|
import { generatePatch } from './mapPatch.js';
|
|
|
|
const appSource = readFileSync(new URL('./app.js', import.meta.url), 'utf8');
|
|
const patchSource = readFileSync(new URL('./mapPatch.js', import.meta.url), 'utf8');
|
|
assert.match(appSource, /acceptBestAvailableQuality:\s*true/);
|
|
assert.match(appSource, /!state\.patchBusy\s*&&\s*options\.allowWorldExpand/);
|
|
assert.match(patchSource, /if \(Number\.isFinite\(p\?\.x\)\) return p\.x \+ \(world\?\.originX \|\| 0\)/);
|
|
assert.match(patchSource, /if \(Number\.isFinite\(p\?\.y\)\) return p\.y \+ \(world\?\.originY \|\| 0\)/);
|
|
|
|
const initial = generateMap(1, { terrainType: 'auto', onProgress() {} });
|
|
const rect = { x0: 30, y0: 30, x1: 110, y1: 110 };
|
|
const strictWorld = createWorldMap(structuredClone(initial));
|
|
const strictResult = generatePatch(strictWorld, rect, {
|
|
patchMode: 'expansion', terrainType: 'oceanic_archipelago', seed: 456, variant: 0, maxQualityRetries: 0,
|
|
});
|
|
assert.equal(strictResult.ok, false);
|
|
assert.equal(strictResult.code, 'patch-quality-gate-failed');
|
|
|
|
const previewWorld = createWorldMap(structuredClone(initial));
|
|
const previewResult = generatePatch(previewWorld, rect, {
|
|
patchMode: 'expansion', terrainType: 'oceanic_archipelago', seed: 456, variant: 0,
|
|
maxQualityRetries: 0, acceptBestAvailableQuality: true,
|
|
});
|
|
assert.equal(previewResult.ok, true);
|
|
assert.equal(previewResult.qualityAcceptedAsBestAvailable, true);
|
|
assert.equal(previewResult.candidateQuality?.acceptedAsBestAvailable, true);
|
|
|
|
console.log(JSON.stringify({
|
|
ok: true,
|
|
strict: { ok: strictResult.ok, code: strictResult.code },
|
|
preview: { ok: previewResult.ok, acceptedAsBestAvailable: previewResult.qualityAcceptedAsBestAvailable, hardPass: previewResult.candidateQuality?.hardPass ?? null },
|
|
}, null, 2));
|