import assert from "node:assert/strict"; import { calculateScore } from "./scoring.js"; const square = [ { x: 20, y: 20 }, { x: 40, y: 20 }, { x: 60, y: 20 }, { x: 80, y: 20 }, { x: 80, y: 40 }, { x: 80, y: 60 }, { x: 80, y: 80 }, { x: 60, y: 80 }, { x: 40, y: 80 }, { x: 20, y: 80 }, { x: 20, y: 60 }, { x: 20, y: 40 }, { x: 20, y: 20 }, ]; const shiftedSquare = square.map((point) => ({ x: Math.min(100, point.x + 12), y: point.y, })); const smallSquare = square.map((point) => ({ x: 35 + (point.x - 20) * 0.5, y: 35 + (point.y - 20) * 0.5, })); const secondIsland = [ { x: 5, y: 5 }, { x: 10, y: 5 }, { x: 15, y: 5 }, { x: 15, y: 10 }, { x: 15, y: 15 }, { x: 10, y: 15 }, { x: 5, y: 15 }, { x: 5, y: 10 }, { x: 5, y: 7 }, { x: 5, y: 5 }, { x: 7, y: 5 }, { x: 10, y: 5 }, { x: 5, y: 5 }, ]; const firstIsland = [ { x: 5, y: 70 }, { x: 12, y: 70 }, { x: 20, y: 70 }, { x: 20, y: 77 }, { x: 20, y: 85 }, { x: 12, y: 85 }, { x: 5, y: 85 }, { x: 5, y: 78 }, { x: 5, y: 74 }, { x: 5, y: 70 }, { x: 8, y: 70 }, { x: 12, y: 70 }, { x: 5, y: 70 }, ]; const tinyNoise = [ { x: 90, y: 90 }, { x: 91, y: 90 }, { x: 91, y: 91 }, ]; assert.equal(calculateScore(square, { rings: [square] }), 100); assert.equal(calculateScore([], { rings: [square] }), 0); assert.equal(calculateScore(square.slice(0, 4), { rings: [square] }), 0); assert.ok(calculateScore(shiftedSquare, { rings: [square] }) < 100); assert.ok(calculateScore(smallSquare, { rings: [square] }) < 60); assert.ok(calculateScore(square, { rings: [square, secondIsland] }) >= 95); assert.ok( calculateScore([square, secondIsland], { rings: [square, secondIsland] }) >= 95, ); assert.equal( calculateScore([tinyNoise, square], { rings: [square] }), 100, ); assert.ok( calculateScore([firstIsland, secondIsland], { rings: [firstIsland, secondIsland], }) > 90, ); assert.ok( calculateScore([firstIsland, secondIsland], { rings: [ [ { x: 5, y: 5 }, { x: 20, y: 5 }, { x: 20, y: 85 }, { x: 5, y: 85 }, { x: 5, y: 5 }, ], ], }) < 50, ); console.log("scoring tests passed");