1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// use checkmate::chess::*;
// use checkmate::errors::*;
// #[test]
// fn move_works() {
// let fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1".to_string();
// let next_fen = "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("e4"), Ok("e4".to_string()));
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn checkmate() {
// let fen = "7k/3R4/3p2Q1/6Q1/2N1N3/8/8/3R3K w - - 0 1".to_string();
// let next_fen = "3R3k/8/3p2Q1/6Q1/2N1N3/8/8/3R3K b - - 1 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("Rd8"), Ok("Rd8#".to_string()));
// assert!(chess.is_checkmate());
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn white_en_passant() {
// let fen = "rnbqkbnr/pp3ppp/2pp4/4pP2/4P3/8/PPPP2PP/RNBQKBNR w KQkq e6 0 1".to_string();
// let next_fen = "rnbqkbnr/pp3ppp/2ppP3/8/4P3/8/PPPP2PP/RNBQKBNR b KQkq - 0 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("fxe6"), Ok("fxe6".to_string()));
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn black_en_passant() {
// let fen = "rnbqkbnr/pppp2pp/8/4p3/4Pp2/2PP4/PP3PPP/RNBQKBNR b KQkq e3 0 1".to_string();
// let next_fen = "rnbqkbnr/pppp2pp/8/4p3/8/2PPp3/PP3PPP/RNBQKBNR w KQkq - 0 2".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("fxe3"), Ok("fxe3".to_string()));
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn pinning_disambiguates_notation() {
// let fen = "r2qkbnr/ppp2ppp/2n5/1B2pQ2/4P3/8/PPP2PPP/RNB1K2R b KQkq - 3 7".to_string();
// let next_fen = "r2qkb1r/ppp1nppp/2n5/1B2pQ2/4P3/8/PPP2PPP/RNB1K2R w KQkq - 4 8".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen.clone());
// assert_eq!(chess.move_piece("Ne7"), Ok("Ne7".to_string()));
// assert_eq!(chess.get_fen(), next_fen);
// chess.clear();
// chess.load_fen(fen);
// // Nge7 should be the same as Ne7
// assert_eq!(chess.move_piece("Nge7"), Ok("Nge7".to_string()));
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn illegal_move() {
// let fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("e5"), Err(MoveError::InvalidPieceToMove));
// }
// #[test]
// fn cannot_promote_if_pawn_not_in_correct_position() {
// let fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1".to_string();
// let next_fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("e4=Q"), Err(MoveError::InvalidPromotion));
// assert_eq!(chess.get_fen(), next_fen);
// }
// #[test]
// fn promotion() {
// let fen = "8/1k5P/8/8/8/8/8/1K6 w - - 0 1".to_string();
// let next_fen = "7N/1k6/8/8/8/8/8/1K6 b - - 0 1".to_string();
// let mut chess = Chess::new();
// chess.load_fen(fen);
// assert_eq!(chess.move_piece("h8=N"), Ok("h8=N".to_string()));
// assert!(chess.is_draw());
// assert_eq!(chess.get_fen(), next_fen);
// }