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 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?{x:(h.x+dir.x+16)%16,y:(h.y+dir.y+16)%16}:{x:0,y:0} const r=snake.step(cells,dir,food,16,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(c.x>=0&&c.x<16&&c.y>=0&&c.y<16) for(const name of snake.renderPieces(cells,dir,16))assert.ok(fs.existsSync(require('node:path').join(__dirname,'../src/common/tex',name+'.png')),name) moves++ } } console.log(JSON.stringify({randomizedValidMoves:moves,edgeCrossings:seams}))