feat: add v2 queued taps and free board rotation
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { TapQueue } from '../src/tap-queue.js';
|
||||
import { Game, available } from '../src/core.js';
|
||||
import { LEVELS } from '../src/levels.js';
|
||||
test('rapid taps retain order, ignore duplicate/active pieces, and discard stale IDs',()=>{
|
||||
const queue=new TapQueue();
|
||||
assert.equal(queue.add('a','a'),false);
|
||||
queue.add('b');queue.add('gone');queue.add('c');assert.equal(queue.add('b'),false);
|
||||
const tiles=[{id:'c'},{id:'b'}];
|
||||
assert.equal(queue.take(tiles).id,'b');assert.equal(queue.take(tiles).id,'c');assert.equal(queue.take(tiles),null);
|
||||
queue.add('b');queue.clear();assert.equal(queue.take(tiles),null);
|
||||
});
|
||||
test('buffered removals are evaluated in order against the updated game, with undo intact',()=>{
|
||||
const game=new Game(LEVELS[0]),queue=new TapQueue();
|
||||
const free=available(game.level,game.tiles).slice(0,3);assert.ok(free.length>=2);
|
||||
for(const tile of free)queue.add(tile.id);
|
||||
const start=game.moves;
|
||||
while(queue.ids.length){const tile=queue.take(game.tiles);assert.equal(game.tap(tile.id).status,'exit');}
|
||||
assert.equal(game.moves,start-free.length);
|
||||
assert.ok(game.undo());assert.equal(game.moves,start-free.length+1);
|
||||
});
|
||||
Reference in New Issue
Block a user