Skip to content

Commit f223a04

Browse files
Dean SoferDean Sofer
authored andcommitted
Trying to fix move labels
1 parent 0183ff8 commit f223a04

File tree

2 files changed

+43
-55
lines changed

2 files changed

+43
-55
lines changed

src/Utils.test.ts

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -120,28 +120,16 @@ describe('Utils', () => {
120120
});
121121

122122
describe('indexToPoint', () => {
123-
it('should convert white indices correctly for top board (0-11)', () => {
124-
expect(indexToPoint(Color.White, 0)).toBe(12);
125-
expect(indexToPoint(Color.White, 5)).toBe(7);
126-
expect(indexToPoint(Color.White, 11)).toBe(1);
127-
});
128-
129-
it('should convert white indices correctly for bottom board (12-23)', () => {
130-
expect(indexToPoint(Color.White, 12)).toBe(13);
131-
expect(indexToPoint(Color.White, 18)).toBe(19);
132-
expect(indexToPoint(Color.White, 23)).toBe(24);
133-
});
134-
135-
it('should convert black indices correctly for top board (0-11)', () => {
136-
expect(indexToPoint(Color.Black, 0)).toBe(13);
137-
expect(indexToPoint(Color.Black, 5)).toBe(18);
138-
expect(indexToPoint(Color.Black, 11)).toBe(24);
139-
});
140-
141-
it('should convert black indices correctly for bottom board (12-23)', () => {
142-
expect(indexToPoint(Color.Black, 12)).toBe(12);
143-
expect(indexToPoint(Color.Black, 18)).toBe(6);
144-
expect(indexToPoint(Color.Black, 23)).toBe(1);
123+
it.each([
124+
[0, 13, 12],
125+
[6, 19, 6],
126+
[11, 24, 1],
127+
[12, 12, 13],
128+
[18, 6, 19],
129+
[23, 1, 24],
130+
])('should convert indices correctly', (index, white, black) => {
131+
expect(indexToPoint(Color.White, index)).toBe(white);
132+
expect(indexToPoint(Color.Black, index)).toBe(black);
145133
});
146134
});
147135

@@ -361,7 +349,7 @@ describe('Utils', () => {
361349

362350
it('should not include prison entry if all entry points are blocked', () => {
363351
game.prison = {white: 1, black: 0};
364-
// Block all possible entry points for white from bar (points 8, 9 for dice 3,4)
352+
// Block all possible entry points for white from bar (points 21, 22 for dice 3,4)
365353
game.board = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
366354
const moves = nextMoves(game);
367355
expect(moves.has(-1)).toBe(false);
@@ -451,7 +439,7 @@ describe('Utils', () => {
451439
const result = calculate(game, 12, 15);
452440
expect(result.state?.board[12]).toBe(4);
453441
expect(result.state?.board[15]).toBe(1);
454-
expect(result.moveLabel).toBe('13/16');
442+
expect(result.moveLabel).toBe('12/9');
455443
});
456444

457445
it('should handle white hitting black piece', () => {
@@ -460,33 +448,33 @@ describe('Utils', () => {
460448
expect(result.state?.board[12]).toBe(4);
461449
expect(result.state?.board[15]).toBe(1);
462450
expect(result.state?.prison.black).toBe(1);
463-
expect(result.moveLabel).toBe('13/16*');
451+
expect(result.moveLabel).toBe('12/9*');
464452
});
465453

466454
it('should handle white bearing off', () => {
467455
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0] as Game['board'];
468456
const result = calculate(game, 20, -1);
469457
expect(result.state?.board[20]).toBe(4);
470458
expect(result.state?.home.white).toBe(1);
471-
expect(result.moveLabel).toBe('21/off');
459+
expect(result.moveLabel).toBe('4/off');
472460
});
473461

474462
it('should handle white re-entering from bar', () => {
475463
game.prison = {white: 1, black: 0};
476464
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
477-
const result = calculate(game, Color.White, 20);
465+
const result = calculate(game, Color.White, 8);
478466
expect(result.state?.prison.white).toBe(0);
479-
expect(result.state?.board[20]).toBe(1);
467+
expect(result.state?.board[8]).toBe(1);
480468
expect(result.moveLabel).toBe('bar/21');
481469
});
482470

483471
it('should handle white re-entering from bar and hitting', () => {
484472
game.prison = {white: 1, black: 0};
485-
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0] as Game['board'];
486-
const result = calculate(game, Color.White, 20);
473+
game.board = [0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
474+
const result = calculate(game, Color.White, 8);
487475
expect(result.state?.prison.white).toBe(0);
488476
expect(result.state?.prison.black).toBe(1);
489-
expect(result.state?.board[20]).toBe(1);
477+
expect(result.state?.board[8]).toBe(1);
490478
expect(result.moveLabel).toBe('bar/21*');
491479
});
492480

@@ -503,7 +491,7 @@ describe('Utils', () => {
503491
const result = calculate(game, 6, 9);
504492
expect(result.state?.board[6]).toBe(-4);
505493
expect(result.state?.board[9]).toBe(-1);
506-
expect(result.moveLabel).toBe('19/22');
494+
expect(result.moveLabel).toBe('6/3');
507495
});
508496

509497
it('should handle black hitting white piece', () => {
@@ -513,7 +501,7 @@ describe('Utils', () => {
513501
expect(result.state?.board[6]).toBe(-4);
514502
expect(result.state?.board[9]).toBe(-1);
515503
expect(result.state?.prison.white).toBe(1);
516-
expect(result.moveLabel).toBe('19/22*');
504+
expect(result.moveLabel).toBe('6/3*');
517505
});
518506

519507
it('should handle black bearing off', () => {
@@ -522,7 +510,7 @@ describe('Utils', () => {
522510
const result = calculate(game, 6, -1);
523511
expect(result.state?.board[6]).toBe(-4);
524512
expect(result.state?.home.black).toBe(1);
525-
expect(result.moveLabel).toBe('19/off');
513+
expect(result.moveLabel).toBe('6/off');
526514
});
527515

528516
it('should set game status to GameOver when player bears off all pieces', () => {
@@ -549,9 +537,9 @@ describe('Utils', () => {
549537
it('should automatically use prison as from when pieces are in prison', () => {
550538
game.prison = {white: 1, black: 0};
551539
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
552-
const result = calculate(game, null, 20);
540+
const result = calculate(game, null, 8);
553541
expect(result.state?.prison.white).toBe(0);
554-
expect(result.state?.board[20]).toBe(1);
542+
expect(result.state?.board[8]).toBe(1);
555543
expect(result.moveLabel).toBe('bar/21');
556544
});
557545

@@ -568,28 +556,28 @@ describe('Utils', () => {
568556
game.color = Color.Black;
569557
game.prison = {white: 0, black: 1};
570558
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
571-
const result = calculate(game, Color.Black, 9);
559+
const result = calculate(game, Color.Black, 21);
572560
expect(result.state?.prison.black).toBe(0);
573-
expect(result.state?.board[9]).toBe(-1);
561+
expect(result.state?.board[21]).toBe(-1);
574562
expect(result.moveLabel).toBe('bar/22');
575563
});
576564

577565
it('should handle black re-entering from bar and hitting', () => {
578566
game.color = Color.Black;
579567
game.prison = {white: 0, black: 1};
580-
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
581-
const result = calculate(game, Color.Black, 9);
568+
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0] as Game['board'];
569+
const result = calculate(game, Color.Black, 21);
582570
expect(result.state?.prison.black).toBe(0);
583571
expect(result.state?.prison.white).toBe(1);
584-
expect(result.state?.board[9]).toBe(-1);
572+
expect(result.state?.board[21]).toBe(-1);
585573
expect(result.moveLabel).toBe('bar/22*');
586574
});
587575

588576
it('should block black re-entering from bar to protected point', () => {
589577
game.color = Color.Black;
590578
game.prison = {white: 0, black: 1};
591-
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] as Game['board'];
592-
const result = calculate(game, Color.Black, 9);
579+
game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0] as Game['board'];
580+
const result = calculate(game, Color.Black, 21);
593581
expect(result.state).toEqual(game);
594582
expect(result.moveLabel).toBeUndefined();
595583
});

src/Utils.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ export const PLAYER_SIGN = {
66
};
77

88
export const DEFAULT_BOARD: Game['board'] = [
9-
// index: 6 11
10-
5, 0, 0, 0, -3, 0, -5, 0, 0, 0, 0, 2,
11-
// index: 18 23
12-
-5, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, -2,
9+
// index: 0 6 11
10+
// white: 13 19 24
11+
// black: 12 6 1
12+
5, 0, 0, 0, -3, 0, -5, 0, 0, 0, 0, 2,
13+
// index: 12 18 23
14+
// white: 12 6 1
15+
// black: 13 19 24
16+
-5, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, -2,
1317
];
1418

1519
const HOME_INDEXES = {
@@ -73,23 +77,19 @@ export const newGame = (oldGame?: Game) => ({
7377
} as Game);
7478

7579

76-
// White: index 0→point 12, index 11→point 1, index 12→point 13, index 23→point 24
77-
// Black: index 0→point 13, index 11→point 24, index 12→point 12, index 23→point 1
7880
export const indexToPoint = (color: Color, index: number) =>
79-
color === Color.White ?
81+
color === Color.Black ?
8082
index > 11 ?
8183
index + 1 : 12 - index
82-
: // black
84+
: // white
8385
index < 12 ?
8486
index + 13 : 24 - index
8587

86-
// White: point 12→index 0, point 1→index 11, point 13→index 12, point 24→index 23
87-
// Black: point 13→index 0, point 24→index 11, point 12→index 12, point 1→index 23
8888
export const pointToIndex = (color: Color, point: number): number =>
89-
color === Color.White ?
89+
color === Color.Black ?
9090
point > 12 ?
9191
point - 1 : 12 - point
92-
: // black
92+
: // white
9393
point > 12 ?
9494
point - 13 : 24 - point
9595

0 commit comments

Comments
 (0)