37 lines
1.8 KiB
TypeScript
37 lines
1.8 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { DUKE_VIDAL_ID } from '../game/duke-vidal';
|
|
import { nextDukeCaptureUncertainty as next, type DukeCapturePublicSource } from '../game/duke-capture-uncertainty';
|
|
|
|
const known: DukeCapturePublicSource = {
|
|
publicController:'guild', loser:'guild', revealedLeader:'other-leader', publicPlanKnown:true,
|
|
};
|
|
|
|
void test('publicly possible held or just-used Duke makes the capture uncertain', () => {
|
|
assert.equal(next(false, known), true);
|
|
assert.equal(next(false, {...known, publicController:null, revealedLeader:DUKE_VIDAL_ID}), true);
|
|
assert.equal(next(false, {...known, publicController:'ecaz', revealedLeader:'other-leader'}), false);
|
|
assert.equal(next(false, {...known, publicController:null, revealedLeader:null}), false);
|
|
});
|
|
|
|
void test('uncertainty persists and unstamped historical games are not rewritten', () => {
|
|
assert.equal(next(true, {...known, publicController:null}), true);
|
|
assert.equal(next(undefined, known), undefined);
|
|
assert.equal(next(undefined, {...known, publicController:undefined}), undefined);
|
|
});
|
|
|
|
void test('incomplete or invalid public sources cannot prove Duke was excluded', () => {
|
|
for (const source of [
|
|
{...known, publicController:undefined}, {...known, loser:undefined},
|
|
{...known, loser:''}, {...known, revealedLeader:undefined},
|
|
{...known, revealedLeader:''}, {...known, publicPlanKnown:false},
|
|
]) assert.equal(next(false, source), true);
|
|
});
|
|
|
|
void test('publicly equivalent captures stay equivalent regardless of actual selection', () => {
|
|
const dukeSelected = {...known, actualSelected:DUKE_VIDAL_ID, concealed:true};
|
|
const otherSelected = {...known, actualSelected:'other-leader', concealed:false};
|
|
assert.equal(next(false, dukeSelected), next(false, otherSelected));
|
|
assert.equal(next(false, dukeSelected), true);
|
|
});
|