Files
leggenda-del-regolo/tests/geometry.test.mjs
T
manzoloandClaude Opus 5.5 826f5f99ec Prototipo del motore: scena, camminata, verbi, inventario, dialoghi, salvataggio
Motore guidato dai dati con due scene di prova (Piazza e salita alla Fortezza),
percorsi su area concava, clic intelligente e pressione lunga, test della soluzione
completa in node e nel browser con Playwright. Nel documento la leggenda del nonno.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:08:00 +02:00

39 lines
1.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { inside, visible, nearestInside, concaveVertices, findPath } from '../src/engine/geometry.js';
// Una "L": il passaggio dall'alto a destra deve girare attorno all'angolo interno (100,100).
const L = [[0, 0], [100, 0], [100, 100], [300, 100], [300, 200], [0, 200]];
test('punto dentro, fuori e sul bordo', () => {
assert.ok(inside(L, [50, 50]));
assert.ok(!inside(L, [200, 50]));
assert.ok(inside(L, [100, 50]));
});
test('la visibilità non attraversa i muri', () => {
assert.ok(visible(L, [50, 50], [50, 150]));
assert.ok(!visible(L, [50, 50], [250, 150]));
});
test('un clic fuori finisce sul bordo più vicino', () => {
assert.deepEqual(nearestInside(L, [200, 50]), [200, 100]);
assert.deepEqual(nearestInside(L, [50, -20]), [50, 0]);
});
test('solo l\'angolo interno è concavo', () => {
assert.deepEqual(concaveVertices(L), [[100, 100]]);
assert.deepEqual(concaveVertices([...L].reverse()), [[100, 100]]);
});
test('il percorso gira attorno all\'angolo', () => {
assert.deepEqual(findPath(L, [50, 50], [250, 150]), [[100, 100], [250, 150]]);
assert.deepEqual(findPath(L, [10, 10], [90, 190]), [[90, 190]]);
});
test('una destinazione fuori dall\'area viene avvicinata', () => {
const path = findPath(L, [50, 50], [250, 20]);
assert.deepEqual(path.at(-1), [250, 100]);
for (let i = 1; i < path.length; i++) assert.ok(visible(L, path[i - 1], path[i]));
});