Allow chosen Reinforcements reserve costs
Verify and publish checkpoint container / container (push) Successful in 11m11s

This commit is contained in:
Quintine committed 2026-10-29 04:41:26 +11:00
1 parent 9dd386ff7a
commit 1cf90f1328
16 files changed
+419 -44

No files matched your search

+16 -1
View File
@@ -4,7 +4,7 @@ import { baseDeck, leaders, type Card } from '../game/cards';
import { richeseCards } from '../game/richese-cards';
import { ecazTreacheryCards } from '../game/ecaz-cards';
import { BattleResolutionQuoteError, quoteBattleResolution, type BattleResolutionInput } from '../game/battle-resolution-quote';
import { isReinforcements, quoteReinforcements, ReinforcementsError, REINFORCEMENTS_CARD } from '../game/reinforcements';
import { isReinforcements, quoteReinforcements, reinforcementsEliteOptions, ReinforcementsError, REINFORCEMENTS_CARD } from '../game/reinforcements';
const physicalCards = [...baseDeck(), ...richeseCards(), ...ecazTreacheryCards()];
const reinforcement = ecazTreacheryCards().find(c => c.id === REINFORCEMENTS_CARD)!;
@@ -42,6 +42,21 @@ function putCard(g: BattleResolutionInput, side: 'attacker' | 'defender', slot:
g[side].plan[slot] = card.id;
}
void test('Reinforcements permits each available typed mix and retains the legacy default', () => {
assert.deepEqual(reinforcementsEliteOptions(4, 4), [0, 1, 2, 3]);
assert.deepEqual(reinforcementsEliteOptions(2, 2), [1, 2]);
assert.deepEqual(reinforcementsEliteOptions(0, 4), [3]);
assert.deepEqual(reinforcementsEliteOptions(1, 1), []);
for (const elite of [0, 1, 2, 3])
assert.deepEqual(quoteReinforcements(4, 4, elite), { normal: 3 - elite, elite, bonus: 2 });
assert.deepEqual(quoteReinforcements(2, 2), { normal: 2, elite: 1, bonus: 2 });
assert.deepEqual(quoteReinforcements(2, 2, 2), { normal: 1, elite: 2, bonus: 2 });
for (const elite of [-1, 0, 3, 4, 1.5, NaN, Infinity])
assert.throws(() => quoteReinforcements(2, 2, elite), ReinforcementsError);
assert.throws(() => quoteReinforcements(1, 1, 1), ReinforcementsError);
assert.throws(() => reinforcementsEliteOptions(-1, 3), ReinforcementsError);
});
void test('canonical identity and reserve cost boundaries preserve the physical counter types', () => {
assert.equal(isReinforcements(reinforcement), true);
assert.equal(isReinforcements({ ...reinforcement, name: 'Reinforcement' }), false);