66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
|
|
use eschac::position::Position;
|
||
|
|
|
||
|
|
use gungraun::{main, library_benchmark_group, library_benchmark};
|
||
|
|
use std::hint::black_box;
|
||
|
|
|
||
|
|
static RECORDS: &'static [&'static str] = &[
|
||
|
|
"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq -",
|
||
|
|
"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -",
|
||
|
|
"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -",
|
||
|
|
"r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq -",
|
||
|
|
"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ -",
|
||
|
|
"r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - -",
|
||
|
|
];
|
||
|
|
|
||
|
|
fn position(index: usize) -> Position {
|
||
|
|
Position::from_text_record(RECORDS[index - 1]).unwrap()
|
||
|
|
}
|
||
|
|
fn position_prev(index: usize) -> eschac_prev::position::Position {
|
||
|
|
eschac_prev::position::Position::from_text_record(RECORDS[index - 1]).unwrap()
|
||
|
|
}
|
||
|
|
fn position_shakmaty(index: usize) -> shakmaty::Chess {
|
||
|
|
RECORDS[index - 1].parse::<shakmaty::fen::Fen>().unwrap().into_position(shakmaty::CastlingMode::Standard).unwrap()
|
||
|
|
}
|
||
|
|
|
||
|
|
#[library_benchmark]
|
||
|
|
#[bench::case_1(position(1), 4)]
|
||
|
|
#[bench::case_2(position(2), 4)]
|
||
|
|
#[bench::case_3(position(3), 4)]
|
||
|
|
#[bench::case_4(position(4), 4)]
|
||
|
|
#[bench::case_5(position(5), 4)]
|
||
|
|
#[bench::case_6(position(6), 4)]
|
||
|
|
fn perft(position: Position, depth: usize) -> u128 {
|
||
|
|
black_box(position.perft(depth))
|
||
|
|
}
|
||
|
|
|
||
|
|
#[library_benchmark]
|
||
|
|
#[bench::case_1(position_prev(1), 4)]
|
||
|
|
#[bench::case_2(position_prev(2), 4)]
|
||
|
|
#[bench::case_3(position_prev(3), 4)]
|
||
|
|
#[bench::case_4(position_prev(4), 4)]
|
||
|
|
#[bench::case_5(position_prev(5), 4)]
|
||
|
|
#[bench::case_6(position_prev(6), 4)]
|
||
|
|
fn perft_prev(position: eschac_prev::position::Position, depth: usize) -> u128 {
|
||
|
|
black_box(position.perft(depth))
|
||
|
|
}
|
||
|
|
|
||
|
|
#[library_benchmark]
|
||
|
|
#[bench::case_1(position_shakmaty(1), 4)]
|
||
|
|
#[bench::case_2(position_shakmaty(2), 4)]
|
||
|
|
#[bench::case_3(position_shakmaty(3), 4)]
|
||
|
|
#[bench::case_4(position_shakmaty(4), 4)]
|
||
|
|
#[bench::case_5(position_shakmaty(5), 4)]
|
||
|
|
#[bench::case_6(position_shakmaty(6), 4)]
|
||
|
|
fn perft_shakmaty(position: shakmaty::Chess, depth: usize) -> u128 {
|
||
|
|
black_box(shakmaty::perft(&position, depth as u32) as u128)
|
||
|
|
}
|
||
|
|
|
||
|
|
library_benchmark_group!(
|
||
|
|
name = bench_eschac;
|
||
|
|
compare_by_id = true;
|
||
|
|
// benchmarks = perft_shakmaty, perft_prev, perft
|
||
|
|
benchmarks = perft, perft_prev
|
||
|
|
);
|
||
|
|
|
||
|
|
main!(library_benchmark_groups = bench_eschac);
|