extern crate pleco;
use pleco::board as board;
use self::board::{Board as Board};
use pleco::core::*;
use pleco::core::piece_move;
use pleco::core::piece_move::*;
use pleco::*;
#[test]
fn test_init_counts() {
let board = Board::start_pos();
assert_eq!(board.count_piece(Player::White, PieceType::P), 8);
assert_eq!(board.count_piece(Player::White, PieceType::N), 2);
assert_eq!(board.count_piece(Player::White, PieceType::B), 2);
assert_eq!(board.count_piece(Player::White, PieceType::R), 2);
assert_eq!(board.count_piece(Player::White, PieceType::K), 1);
assert_eq!(board.count_piece(Player::White, PieceType::Q), 1);
assert_eq!(board.count_piece(Player::Black, PieceType::P), 8);
assert_eq!(board.count_piece(Player::Black, PieceType::N), 2);
assert_eq!(board.count_piece(Player::Black, PieceType::B), 2);
assert_eq!(board.count_piece(Player::Black, PieceType::R), 2);
assert_eq!(board.count_piece(Player::Black, PieceType::K), 1);
assert_eq!(board.count_piece(Player::Black, PieceType::Q), 1);
assert_eq!(board.diagonal_piece_bb(Player::White).0,0b101100);
assert_eq!(board.sliding_piece_bb(Player::White).0,0b10001001);
assert_eq!(board.count_pieces_player(Player::White),board.count_pieces_player(Player::Black));
assert_eq!(board.occupied().0, 0xFFFF00000000FFFF);
assert_eq!(board.count_all_pieces(),32);
}
#[test]
fn basic_move_apply() {
let mut b = Board::start_pos();
let p1 = PreMoveInfo {
src: SQ(12),
dst: SQ(28),
flags: MoveFlag::DoublePawnPush
};
let m = BitMove::init(p1);
b.apply_move(m);
let p2 = PreMoveInfo {
src: SQ(51),
dst: SQ(35),
flags: MoveFlag::DoublePawnPush
};
let m = BitMove::init(p2);
b.apply_move(m);
let p3 = PreMoveInfo {
src: SQ(28),
dst: SQ(35),
flags: MoveFlag::Capture {ep_capture: false}
};
let m = BitMove::init(p3);
b.apply_move(m);
assert_eq!(b.count_piece(Player::Black,PieceType::P),7);
b.undo_move();
assert_eq!(b.count_piece(Player::Black,PieceType::P),8);
assert!(!b.in_check());
}
#[test]
fn move_seq_1() {
let mut b = board::Board::start_pos();
let p = PreMoveInfo {
src: SQ(12),
dst: SQ(28),
flags: MoveFlag::DoublePawnPush
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(51),
dst: SQ(35),
flags: MoveFlag::DoublePawnPush
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(28),
dst: SQ(35),
flags: MoveFlag::Capture {ep_capture: false}
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(59),
dst: SQ(35),
flags: MoveFlag::Capture {ep_capture: false}
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(5),
dst: SQ(12),
flags: MoveFlag::QuietMove,
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(35),
dst: SQ(8),
flags: MoveFlag::Capture {ep_capture: false}
};
let m = BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(6),
dst: SQ(21),
flags: MoveFlag::QuietMove
};
let m = BitMove::init(p);
b.apply_move(m);
let p = piece_move::PreMoveInfo {
src: SQ(60),
dst: SQ(59),
flags: piece_move::MoveFlag::QuietMove
};
let m = piece_move::BitMove::init(p);
b.apply_move(m);
let p = PreMoveInfo {
src: SQ(4),
dst: SQ(7),
flags: MoveFlag::Castle{king_side: true}
};
let m = BitMove::init(p);
b.apply_move(m);
}