|
4 | 4 | * Created Date: Thursday, November 21st 2024 |
5 | 5 | * Author: Paul Tsouchlos (DeveloperPaul123) ([email protected]) |
6 | 6 | * ----- |
7 | | - * Last Modified: Thu Apr 24 2025 |
| 7 | + * Last Modified: Tue Apr 29 2025 |
8 | 8 | * ----- |
9 | 9 | * Copyright (c) 2024 Paul Tsouchlos (DeveloperPaul123) |
10 | 10 | * GNU General Public License v3.0 or later |
@@ -705,6 +705,21 @@ mod tests { |
705 | 705 |
|
706 | 706 | use super::LargeScoreType; |
707 | 707 |
|
| 708 | + fn run_search_tests(test_pairs: &[(&str, &str)], config: SearchParameters) { |
| 709 | + let mut ttable = TranspositionTable::default(); |
| 710 | + let mut history_table = Default::default(); |
| 711 | + let mut search = Search::new(&config, &mut ttable, &mut history_table); |
| 712 | + |
| 713 | + for (fen, expected_move) in test_pairs { |
| 714 | + let mut board = Board::from_fen(fen).unwrap(); |
| 715 | + let result = search.search(&mut board, None); |
| 716 | + assert_eq!( |
| 717 | + result.best_move.unwrap().to_long_algebraic(), |
| 718 | + *expected_move |
| 719 | + ); |
| 720 | + } |
| 721 | + } |
| 722 | + |
708 | 723 | #[test] |
709 | 724 | fn white_mate_in_1() { |
710 | 725 | let fen = "k7/8/KQ6/8/8/8/8/8 w - - 0 1"; |
@@ -742,6 +757,45 @@ mod tests { |
742 | 757 | assert_eq!(res.best_move.unwrap().to_long_algebraic(), "b8a8") |
743 | 758 | } |
744 | 759 |
|
| 760 | + #[test] |
| 761 | + fn mate_in_one() { |
| 762 | + // taken from Toad: https://github.com/dannyhammer/toad/blob/a84ea4c01c8bb036a132ff0e0f3d283029854289/src/search.rs#L1820 |
| 763 | + let tests = [ |
| 764 | + ("6k1/R7/6K1/8/8/8/8/8 w - - 0 1", "a7a8"), |
| 765 | + ("8/8/8/8/8/6k1/r7/6K1 b - - 0 1", "a2a1"), |
| 766 | + ("6k1/4R3/6K1/q7/8/8/8/8 w - - 0 1", "e7e8"), |
| 767 | + ("8/8/8/8/Q7/6k1/4r3/6K1 b - - 0 1", "e2e1"), |
| 768 | + ("6k1/8/6K1/q3R3/8/8/8/8 w - - 0 1", "e5e8"), |
| 769 | + ("8/8/8/8/Q3r3/6k1/8/6K1 b - - 0 1", "e4e1"), |
| 770 | + ("k7/6R1/5R1P/8/8/8/8/K7 w - - 0 1", "f6f8"), |
| 771 | + ("k7/8/8/8/8/5r1p/6r1/K7 b - - 0 1", "f3f1"), |
| 772 | + ]; |
| 773 | + |
| 774 | + let params = SearchParameters { |
| 775 | + max_depth: 3, |
| 776 | + ..Default::default() |
| 777 | + }; |
| 778 | + run_search_tests(&tests, params); |
| 779 | + } |
| 780 | + |
| 781 | + #[test] |
| 782 | + fn obvious_captures() { |
| 783 | + let tests = [ |
| 784 | + ("5k2/8/8/b7/2N5/r7/8/5K2 w - - 0 1", "c4a3"), |
| 785 | + ("5k2/8/8/B7/2n5/R7/8/5K2 b - - 0 1", "c4a3"), |
| 786 | + ("5k2/8/8/b7/2N5/r7/8/5K2 w - - 0 1", "c4a3"), |
| 787 | + ("5k2/8/8/B7/2n5/R7/8/5K2 b - - 0 1", "c4a3"), |
| 788 | + ("4k3/8/8/1n1p4/2P5/8/8/4K3 w - - 0 1", "c4b5"), |
| 789 | + ("4k3/8/8/2p5/1N1P4/8/8/4K3 b - - 0 1", "c5b4"), |
| 790 | + ]; |
| 791 | + |
| 792 | + let params = SearchParameters { |
| 793 | + max_depth: 3, |
| 794 | + ..Default::default() |
| 795 | + }; |
| 796 | + run_search_tests(&tests, params); |
| 797 | + } |
| 798 | + |
745 | 799 | #[test] |
746 | 800 | fn stalemate() { |
747 | 801 | let fen = "k7/8/KQ6/8/8/8/8/8 b - - 0 1"; |
|
0 commit comments