46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use std::hint::black_box;
|
|
|
|
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
|
|
use othello::{
|
|
board::{Board, squares::*},
|
|
game::Game,
|
|
};
|
|
|
|
const PLAYS: [(&str, [Board; 10]); 4] = [
|
|
("game1", [F5, F6, E6, F4, E3, D6, G4, D3, C3, H3]),
|
|
("game2", [F5, D6, C3, D3, C4, F4, F6, F3, E6, E7]),
|
|
("game3", [F5, D6, C4, D3, C3, F4, C5, B3, C2, E3]),
|
|
("game4", [F5, F6, E6, F4, E3, C5, C4, D6, B6, D3]),
|
|
];
|
|
|
|
fn bench_perfect_games(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("perfect games");
|
|
for (id, play) in PLAYS {
|
|
group.bench_with_input(BenchmarkId::new("perfect game", id), &play, |b, p| {
|
|
b.iter(|| {
|
|
let mut game = Game::default();
|
|
for m in p {
|
|
black_box(game.play(*m));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
fn bench_perfect_games_safe_play(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("perfect games with safe play");
|
|
for (id, play) in PLAYS {
|
|
group.bench_with_input(BenchmarkId::new("perfect game", id), &play, |b, p| {
|
|
b.iter(|| {
|
|
let mut game = Game::default();
|
|
for m in p {
|
|
black_box(game.safe_play(*m).unwrap());
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
criterion_group!(benches, bench_perfect_games, bench_perfect_games_safe_play);
|
|
|
|
criterion_main!(benches);
|