fire-truck-facade.test.js (1910B)
1 'use strict'; 2 3 const test = require('node:test'); 4 const assert = require('node:assert'); 5 const FT = require('../../games/fire-truck/lib.js'); 6 7 test('buildFacade is deterministic for a given seed', () => { 8 const a = FT.buildFacade(FT.createSeededRng(42), { fireNumber: 1 }); 9 const b = FT.buildFacade(FT.createSeededRng(42), { fireNumber: 1 }); 10 assert.deepStrictEqual(a, b); 11 }); 12 13 test('buildFacade produces a sane window grid', () => { 14 for (let seed = 0; seed < 50; seed++) { 15 const f = FT.buildFacade(FT.createSeededRng(seed), { fireNumber: 0 }); 16 assert.ok(f.cols >= 4 && f.cols <= 6, `cols in range: ${f.cols}`); 17 assert.ok(f.rows >= 3 && f.rows <= 4, `rows in range: ${f.rows}`); 18 } 19 }); 20 21 test('buildFacade fire windows are unique and inside the grid', () => { 22 for (let seed = 0; seed < 50; seed++) { 23 const f = FT.buildFacade(FT.createSeededRng(seed), { fireNumber: 3 }); 24 const seen = new Set(); 25 for (const fire of f.fires) { 26 assert.ok(!seen.has(fire.index), 'no duplicate fire windows'); 27 seen.add(fire.index); 28 assert.ok(fire.col >= 0 && fire.col < f.cols, 'col in grid'); 29 assert.ok(fire.row >= 0 && fire.row < f.rows, 'row in grid'); 30 assert.strictEqual(fire.index, fire.row * f.cols + fire.col, 'index matches col/row'); 31 } 32 } 33 }); 34 35 test('buildFacade fire count ramps with fireNumber but stays ≤ half the windows', () => { 36 for (let seed = 0; seed < 30; seed++) { 37 for (let n = 0; n < 6; n++) { 38 const f = FT.buildFacade(FT.createSeededRng(seed * 7 + 1), { fireNumber: n }); 39 const cap = Math.max(2, Math.floor((f.cols * f.rows) / 2)); 40 assert.strictEqual(f.fires.length, Math.min(3 + n, cap)); 41 } 42 } 43 }); 44 45 test('buildFacade honors explicit cols/rows', () => { 46 const f = FT.buildFacade(FT.createSeededRng(9), { cols: 5, rows: 4, fireNumber: 0 }); 47 assert.strictEqual(f.cols, 5); 48 assert.strictEqual(f.rows, 4); 49 });