37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { CURRENT_RULES, createGame, game, resolveRound } from './index';
|
|
|
|
describe('High Card', () => {
|
|
it('scores the highest number named by exactly one seat', () => {
|
|
let s = createGame({ A: 'Ann', B: 'Bo', C: 'Cy' }, 1);
|
|
s = resolveRound(s, { A: { pick: 5 }, B: { pick: 5 }, C: { pick: 2 } });
|
|
expect(s.rounds[0].scorer).toBe('C');
|
|
expect(s.players.C.points).toBe(1);
|
|
});
|
|
|
|
it('ends when a seat reaches the target', () => {
|
|
let s = createGame({ A: 'Ann', B: 'Bo' }, 1);
|
|
for (let i = 0; i < 3; i++) s = resolveRound(s, { A: { pick: 3 }, B: { pick: 1 } });
|
|
expect(s.over?.winner).toBe('A');
|
|
expect(game.needsInput(s, 'A')).toBe(false);
|
|
});
|
|
|
|
it('draws the same bot picks from the same seed, and different ones as rounds pass', () => {
|
|
const a = createGame({ A: 'Ann', B: 'Bo' }, 42);
|
|
const b = createGame({ A: 'Ann', B: 'Bo' }, 42);
|
|
expect(game.botInput(a, 'B')).toEqual(game.botInput(b, 'B'));
|
|
const picks = new Set<number>();
|
|
let s = a;
|
|
for (let i = 0; i < 12; i++) {
|
|
picks.add(game.botInput(s, 'B').pick);
|
|
s = resolveRound(s, { A: { pick: 1 }, B: game.botInput(s, 'B') });
|
|
}
|
|
expect(picks.size).toBeGreaterThan(1);
|
|
});
|
|
|
|
it('stamps the rules revision', () => {
|
|
expect(createGame({ A: 'Ann', B: 'Bo' }).rules).toBe(CURRENT_RULES);
|
|
expect(createGame({ A: 'Ann', B: 'Bo' }, 1, 1).rules).toBe(1);
|
|
});
|
|
});
|