hexe_core 0.0.5

The core components of the hexe chess engine crate.
Documentation
use super::MultiBoard;
use castle::Right;
use color::Color;
use iter::All;
use square::Square;

use test::{Bencher, black_box};

#[inline(always)]
fn is_attacked(board: &MultiBoard, b: &mut Bencher) {
    let board = black_box(board);
    let color = Color::White;
    b.iter(|| {
        for sq in Square::ALL.map(black_box) {
            let board = black_box(board);
            let color = black_box(color);
            let value = board.is_attacked(sq, color);
            black_box(value);
        }
    });
}

#[bench]
fn is_attacked_worst_case_64(b: &mut Bencher) {
    is_attacked(&MultiBoard::default(), b);
}

#[bench]
fn is_attacked_standard_64(b: &mut Bencher) {
    is_attacked(&MultiBoard::STANDARD, b);
}

#[bench]
fn from_piece_map(b: &mut Bencher) {
    let map = ::board::PieceMap::STANDARD;
    b.iter(|| {
        let board = MultiBoard::from(black_box(&map));
        black_box(&board);
    });
}

#[bench]
fn remove_all_10(b: &mut Bencher) {
    let squares = [
        Square::B1, Square::C2, Square::H8, Square::A7, Square::A1,
        Square::B8, Square::C7, Square::H1, Square::A2, Square::A8,
    ];
    b.iter(|| {
        let mut board = MultiBoard::STANDARD;
        let squares = black_box(&squares[..]);
        for &square in squares {
            black_box(&mut board).remove_all(square);
        }
        black_box(&board);
    });
}

#[bench]
fn len_1000(b: &mut Bencher) {
    let board = MultiBoard::STANDARD;
    b.iter(|| {
        for _ in 0..1000 {
            black_box(black_box(&board).len());
        }
    });
}

#[bench]
fn is_empty_1000(b: &mut Bencher) {
    let board = MultiBoard::default();
    b.iter(|| {
        for _ in 0..1000 {
            black_box(black_box(&board).is_empty());
        }
    });
}

#[bench]
fn eq(b: &mut Bencher) {
    let x = MultiBoard::STANDARD;
    let y = MultiBoard::STANDARD;
    b.iter(|| {
        black_box(black_box(&x) == black_box(&y));
    });
}

#[bench]
fn castle_all(b: &mut Bencher) {
    b.iter(|| {
        let mut board = MultiBoard::default();
        for right in Right::ALL {
            black_box(&mut board).castle(right);
        }
        black_box(&mut board);
    });
}