summaryrefslogtreecommitdiff
path: root/model/benches/bitboard.rs
blob: 231f86036c10a2e562bf69b19964f6d9e419986b (plain)
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);