const assert = require('node:assert/strict') const fs = require('node:fs') const snake = require('../src/common/snake.js') let seed=83971 const rand=()=>{seed=(Math.imul(seed,1664525)+1013904223)>>>0;return seed/4294967296} const dirs=[{x:1,y:0},{x:0,y:1},{x:-1,y:0},{x:0,y:-1}] let moves=0, seams=0 for(const board of [16,snake.ARENA]) for(const mode of ['classic','wrap']) for(let game=0;game<1000;game++) { let cells=snake.initialSnake(),dir=dirs[0] for(let tick=0;tick<100;tick++) { dir=snake.turn(dir,dirs[Math.floor(rand()*4)]) const h=cells[0] const food=rand()<0.3?snake.step([h],dir,null,board,'wrap').snake[0]:null const r=snake.step(cells,dir,food,board,mode) if(!r.alive)break if(Math.abs(r.snake[0].x-h.x)>1||Math.abs(r.snake[0].y-h.y)>1)seams++ cells=r.snake assert.equal(new Set(cells.map(c=>c.x+','+c.y)).size,cells.length) for(const c of cells)assert.ok(board===16 ? c.x>=0&&c.x<16&&c.y>=0&&c.y<16 : snake.ARENA.rows[c.y].includes(c.x)) for(const name of snake.renderPieces(cells,dir,board))assert.ok(fs.existsSync(require('node:path').join(__dirname,'../src/common/tex',name+'.png')),name) moves++ } } console.log(JSON.stringify({randomizedValidMoves:moves,edgeCrossings:seams}))