Spaces:
Sleeping
Sleeping
| /** | |
| * Test case to verify incorrect terminal detection | |
| * | |
| * Scenario: 5x1x1 board | |
| * 1. a y - Black a(0), White y(3) | |
| * 2. b z - Black b(1), White z(4) | |
| * 3. 0 - Black 0(2) captures White {y, z} | |
| * | |
| * After move 3: | |
| * Board: [Black(a), Black(b), Black(0), Empty(y), Empty(z)] | |
| * | |
| * Problem: System declares game finished with "Black: 5, White: 0" | |
| * Reality: White can still play at y or z and potentially capture Black stones | |
| */ | |
| import { TrigoGame } from "../inc/trigo/game.js"; | |
| function testTerminalDetection() { | |
| console.log("================================================================================"); | |
| console.log("Testing Terminal Detection Bug in 5x1x1 Board"); | |
| console.log("================================================================================\n"); | |
| const game = new TrigoGame({ x: 5, y: 1, z: 1 }); | |
| game.startGame(); | |
| console.log("Initial board (5x1x1):"); | |
| console.log("Positions: a(0) - b(1) - 0(2) - y(3) - z(4)\n"); | |
| // Move 1: Black a, White y | |
| console.log("Move 1: Black plays a(0)"); | |
| game.drop({ x: 0, y: 0, z: 0 }); | |
| console.log("Board:", game.getBoard().flat().flat()); | |
| console.log("Territory:", game.getTerritory()); | |
| console.log("\nMove 1b: White plays y(3)"); | |
| game.drop({ x: 3, y: 0, z: 0 }); | |
| console.log("Board:", game.getBoard().flat().flat()); | |
| console.log("Territory:", game.getTerritory()); | |
| // Move 2: Black b, White z | |
| console.log("\nMove 2: Black plays b(1)"); | |
| game.drop({ x: 1, y: 0, z: 0 }); | |
| console.log("Board:", game.getBoard().flat().flat()); | |
| console.log("Territory:", game.getTerritory()); | |
| console.log("\nMove 2b: White plays z(4)"); | |
| game.drop({ x: 4, y: 0, z: 0 }); | |
| console.log("Board:", game.getBoard().flat().flat()); | |
| console.log("Territory:", game.getTerritory()); | |
| // Move 3: Black 0 - should capture White {y, z} | |
| console.log("\nMove 3: Black plays 0(2) - should capture White stones"); | |
| game.drop({ x: 2, y: 0, z: 0 }); | |
| console.log("Board:", game.getBoard().flat().flat()); | |
| console.log("Territory:", game.getTerritory()); | |
| console.log("Game status:", game.getGameStatus()); | |
| // Check valid moves for White | |
| console.log("\n" + "=".repeat(80)); | |
| console.log("Analysis after Move 3:"); | |
| console.log("=".repeat(80)); | |
| const validMoves = game.validMovePositions(); | |
| console.log("\nValid move positions for White:", validMoves); | |
| console.log("Number of valid moves:", validMoves.length); | |
| // Check if White can capture | |
| const whiteCanCapture = game.hasCapturingMove(2); | |
| console.log("\nWhite has capturing move available?", whiteCanCapture); | |
| // Try White playing at y(3) | |
| console.log("\n" + "=".repeat(80)); | |
| console.log("Hypothetical: What if White plays at y(3)?"); | |
| console.log("=".repeat(80)); | |
| const testGame = game.clone(); | |
| try { | |
| testGame.drop({ x: 3, y: 0, z: 0 }); | |
| console.log("Board after White y(3):", testGame.getBoard().flat().flat()); | |
| console.log("Territory:", testGame.getTerritory()); | |
| // Check if any Black stones were captured | |
| const boardAfter = testGame.getBoard().flat().flat(); | |
| const blackStones = boardAfter.filter(s => s === 1).length; | |
| const whiteStones = boardAfter.filter(s => s === 2).length; | |
| console.log(`Stones on board: Black=${blackStones}, White=${whiteStones}`); | |
| if (blackStones < 3) { | |
| console.log("\n⚠️ BLACK STONES WERE CAPTURED!"); | |
| console.log("This proves the game was NOT terminal after move 3!"); | |
| } | |
| } catch (error: any) { | |
| console.log("Error:", error.message); | |
| } | |
| // Conclusion | |
| console.log("\n" + "=".repeat(80)); | |
| console.log("CONCLUSION:"); | |
| console.log("=".repeat(80)); | |
| console.log("The current terminal detection logic is INCORRECT."); | |
| console.log("It only checks hasBlack && hasWhite, which fails when one player"); | |
| console.log("has all their stones captured."); | |
| console.log("\nThe game should continue until no more captures are possible,"); | |
| console.log("not just when neutral territory is zero."); | |
| } | |
| testTerminalDetection(); | |