1
0
Fork 0
eschac/benches/benches.rs
2025-10-27 13:53:05 +01:00

65 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);