kgames

KGames — free keyboard games for kids
git clone https://www.keyboard.games/code/kgames.git
Log | Files | Refs | README | LICENSE

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