@idealic/poker-engine
Version:
Poker game engine and hand evaluator
104 lines (98 loc) • 2.45 kB
text/typescript
import type { Hand } from '../../../../Hand';
/**
* Base hand fixture for creating consistent Game states
* This represents a typical mid-hand scenario with various player states
*/
export const BASE_HAND: Hand = {
variant: 'NT',
players: ['Alice', 'Bob', 'Charlie', 'David'],
startingStacks: [1000, 1500, 800, 1200],
blindsOrStraddles: [10, 20, 0, 0],
antes: [0, 0, 0, 0],
minBet: 20,
actions: [
'd dh p1 AsKs',
'd dh p2 7h2d',
'd dh p3 QhQc',
'd dh p4 JdTd',
'p3 cbr 60', // Charlie raises to 60
'p4 cc 60', // David calls 60
'p1 f', // Alice folds
'p2 f', // Bob folds
'd db AhKhQd', // Flop
],
seed: 12345,
timeLimit: 30,
rake: 0,
rakePercentage: 0.05,
currency: 'USD',
table: 'test-table-1',
hand: 1,
};
/**
* Hand in showdown state - multiple players after final betting
*/
export const SHOWDOWN_HAND: Hand = {
...BASE_HAND,
actions: [
...BASE_HAND.actions,
'p3 cc', // Charlie checks
'p4 cc', // David checks
'd db Td', // Turn
'p3 cc', // Charlie checks
'p4 cbr 100', // David bets 100
'p3 cc 100', // Charlie calls
'd db 9s', // River
'p3 cc', // Charlie checks
'p4 cc', // David checks
'p3 sm QhQc', // Charlie shows
'p4 sm JdTd', // David shows
// Now in showdown with Charlie and David
],
};
/**
* Completed hand with finishing data
*/
export const COMPLETED_HAND: Hand = {
...SHOWDOWN_HAND,
antes: [0, 0, 0, 0],
blindsOrStraddles: [10, 20, 0, 0],
actions: [...SHOWDOWN_HAND.actions],
finishingStacks: [990, 1480, 1000, 1030],
winnings: [0, 0, 200, 0],
totalPot: 470,
};
/**
* Hand with author perspective set (personalized view)
*/
export const PERSONALIZED_HAND: Hand = {
...BASE_HAND,
author: 'Alice',
antes: [0, 0, 0, 0],
blindsOrStraddles: [10, 20, 0, 0],
actions: [
'd dh p1 AsKs', // Alice can see her cards
'd dh p2 ????', // Hidden from Alice
'd dh p3 ????', // Hidden from Alice
'd dh p4 ????', // Hidden from Alice
'p3 cbr 60',
'p4 cc 60',
'p1 f',
'p2 f',
'd db AhKhQd',
],
seed: undefined, // Removed in personalized view
_venueIds: undefined, // Removed in personalized view
};
/**
* Minimal hand for edge case testing
*/
export const MINIMAL_HAND: Hand = {
variant: 'NT',
players: ['Alice', 'Bob'],
antes: [0, 0],
startingStacks: [1000, 1000],
blindsOrStraddles: [10, 20],
minBet: 20,
actions: [],
};