|
22 | 22 | XIANGQI = "rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1" |
23 | 23 | SHOGUN = "rnb+fkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNB+FKBNR[] w KQkq - 0 1" |
24 | 24 | JANGGI = "rnba1abnr/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RNBA1ABNR w - - 0 1" |
| 25 | +BATTLEKINGS = "8/pppppppp/8/8/8/8/PPPPPPPP/8 w - - 0 1" |
25 | 26 |
|
26 | 27 |
|
27 | 28 | ini_text = """ |
@@ -315,6 +316,7 @@ def test_info(self): |
315 | 316 | def test_variants_loaded(self): |
316 | 317 | variants = sf.variants() |
317 | 318 | self.assertTrue("shogun" in variants) |
| 319 | + self.assertIn("battlekings", variants) |
318 | 320 |
|
319 | 321 | def test_set_option(self): |
320 | 322 | result = sf.set_option("UCI_Variant", "capablanca") |
@@ -344,6 +346,58 @@ def test_start_fen(self): |
344 | 346 | result = sf.start_fen("shogun") |
345 | 347 | self.assertEqual(result, SHOGUN) |
346 | 348 |
|
| 349 | + result = sf.start_fen("battlekings") |
| 350 | + self.assertEqual(result, BATTLEKINGS) |
| 351 | + |
| 352 | + def test_battlekings_gating_sequence(self): |
| 353 | + start = sf.start_fen("battlekings") |
| 354 | + |
| 355 | + initial_moves = sf.legal_moves("battlekings", start, []) |
| 356 | + self.assertIn("e2e4", initial_moves) |
| 357 | + self.assertNotIn("e2e4n", initial_moves) |
| 358 | + |
| 359 | + knight_sequence = ["e2e4", "h7h6"] |
| 360 | + knight_moves = sf.legal_moves("battlekings", start, knight_sequence) |
| 361 | + self.assertIn("e2c3", knight_moves) |
| 362 | + self.assertNotIn("e2c3b", knight_moves) |
| 363 | + |
| 364 | + bishop_sequence = knight_sequence + ["e2c3", "a7a5"] |
| 365 | + bishop_moves = sf.legal_moves("battlekings", start, bishop_sequence) |
| 366 | + self.assertIn("e2g4", bishop_moves) |
| 367 | + self.assertNotIn("e2g4r", bishop_moves) |
| 368 | + |
| 369 | + rook_sequence = bishop_sequence + ["e2g4", "e7e5"] |
| 370 | + rook_moves = sf.legal_moves("battlekings", start, rook_sequence) |
| 371 | + self.assertIn("e2e3", rook_moves) |
| 372 | + self.assertNotIn("e2e3q", rook_moves) |
| 373 | + |
| 374 | + queen_sequence = rook_sequence + ["e2e3", "d7d5"] |
| 375 | + queen_moves = sf.legal_moves("battlekings", start, queen_sequence) |
| 376 | + self.assertIn("e2e1", queen_moves) |
| 377 | + self.assertNotIn("e2e1k", queen_moves) |
| 378 | + |
| 379 | + fen_after_queen = sf.get_fen("battlekings", start, queen_sequence) |
| 380 | + board_after_queen = fen_after_queen.split()[0] |
| 381 | + self.assertIn("Q", board_after_queen) |
| 382 | + |
| 383 | + king_sequence = queen_sequence + ["e2e1"] |
| 384 | + fen_after_king = sf.get_fen("battlekings", start, king_sequence) |
| 385 | + board_after_king = fen_after_king.split()[0] |
| 386 | + self.assertIn("K", board_after_king) |
| 387 | + |
| 388 | + post_king_moves = sf.legal_moves("battlekings", start, king_sequence + ["a5a4"]) |
| 389 | + self.assertIn("e1d1", post_king_moves) |
| 390 | + self.assertNotIn("e1d1k", post_king_moves) |
| 391 | + |
| 392 | + def test_battlekings_king_spawn_blocked(self): |
| 393 | + fen = "8/8/8/8/8/3p4/4Q3/8 w - - 0 1" |
| 394 | + moves = sf.legal_moves("battlekings", fen, []) |
| 395 | + self.assertFalse(moves) |
| 396 | + |
| 397 | + def test_battlekings_capture_first_commoner_wins(self): |
| 398 | + fen = "8/4k1k1/8/8/8/8/4Q3/8 w - - 0 1" |
| 399 | + self._check_immediate_game_end("battlekings", fen, ["e2e7"], True, -sf.VALUE_MATE) |
| 400 | + |
347 | 401 | def test_legal_moves(self): |
348 | 402 | fen = "10/10/10/10/10/k9/10/K9 w - - 0 1" |
349 | 403 | result = sf.legal_moves("capablanca", fen, []) |
|
0 commit comments