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