map/archive/generated-history/FIX_ADDITIONAL_GENERATION_VALIDATION.mjs
2026-08-08 17:41:30 +09:00

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