use criterion::{black_box, criterion_group, criterion_main, Criterion}; use model::CheckersBitBoard; use std::collections::hash_map::DefaultHasher; use std::hash::Hash; fn clone(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("clone", |b| b.iter(|| black_box(board.clone()))); } fn hash(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); let mut hasher = DefaultHasher::new(); c.bench_function("hash", |b| b.iter(|| board.hash(black_box(&mut hasher)))); } fn default(c: &mut Criterion) { c.bench_function("default", |b| { b.iter(|| black_box(CheckersBitBoard::default())) }); } fn eq(c: &mut Criterion) { let board1 = CheckersBitBoard::default(); let board2 = CheckersBitBoard::default(); c.bench_function("equal", |b| { b.iter(|| black_box(board1) == black_box(board2)) }); } fn default_const(c: &mut Criterion) { c.bench_function("default (const)", |b| { b.iter(|| black_box(CheckersBitBoard::starting_position())) }); } fn new(c: &mut Criterion) { c.bench_function("new", |b| { b.iter(|| CheckersBitBoard::new(black_box(7328), black_box(174), black_box(27590))) }); } fn piece_at(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("piece", |b| b.iter(|| board.piece_at(black_box(0)))); } fn color_at_unchecked(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("color (unsafe)", |b| { b.iter(|| unsafe { board.color_at_unchecked(black_box(1)) }) }); } fn king_at_unchecked(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("king (unsafe)", |b| { b.iter(|| unsafe { board.king_at_unchecked(black_box(2)) }) }); } fn color_at(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("color (safe - filled)", |b| { b.iter(|| board.color_at(black_box(3))) }); c.bench_function("color (safe - empty)", |b| { b.iter(|| board.color_at(black_box(2))) }); } fn king_at(c: &mut Criterion) { let board = CheckersBitBoard::starting_position(); c.bench_function("king (safe - filled)", |b| { b.iter(|| board.king_at(black_box(4))) }); c.bench_function("king (safe - empty)", |b| { b.iter(|| board.king_at(black_box(9))) }); } criterion_group!( bitboard, clone, hash, eq, default, default_const, new, piece_at, color_at_unchecked, king_at_unchecked, color_at, king_at, ); criterion_main!(bitboard);