grid/benches/benches.rs

182 lines
5.2 KiB
Rust
Raw Permalink Normal View History

2020-04-04 11:28:18 +00:00
use criterion::{criterion_group, criterion_main, Criterion};
use grid::grid;
2020-04-01 20:17:54 +00:00
use grid::Grid;
2020-04-04 11:28:18 +00:00
use rand::Rng;
2020-04-01 20:17:54 +00:00
2022-08-13 12:24:07 +00:00
const SIZE: usize = 1_000;
2020-04-04 11:28:18 +00:00
2022-08-13 12:24:07 +00:00
fn init_vec_vec() -> Vec<Vec<u8>> {
2020-04-04 11:28:18 +00:00
vec![vec![0; SIZE]; SIZE]
2020-04-01 20:17:54 +00:00
}
2022-08-13 12:24:07 +00:00
fn init_grid() -> Grid<u8> {
2022-08-11 12:27:19 +00:00
Grid::init(SIZE, SIZE, 0)
2020-04-01 20:17:54 +00:00
}
fn criterion_benchmark(c: &mut Criterion) {
2020-04-04 11:28:18 +00:00
let mut rng = rand::thread_rng();
2022-08-06 09:38:36 +00:00
let mut rand = || rng.gen_range(0..SIZE);
2020-04-04 11:28:18 +00:00
// Init macro
c.bench_function("vecvec_init_macro", |b| {
2020-04-04 11:28:18 +00:00
b.iter(|| {
vec![
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
]
})
2020-04-01 21:29:06 +00:00
});
c.bench_function("grid_init_macro", |b| {
2020-04-04 11:28:18 +00:00
b.iter(|| {
grid![[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9]]
})
});
2022-08-11 12:27:19 +00:00
c.bench_function("grid_from_vec", |b| {
b.iter(|| {
let vec = vec![
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
];
Grid::from_vec(vec, 10)
})
});
2020-04-04 11:28:18 +00:00
2022-08-11 12:27:19 +00:00
// Constructor
c.bench_function("vecvec_init", |b| b.iter(|| vec![vec![0; SIZE]; SIZE]));
c.bench_function("grid_init", |b| b.iter(|| Grid::init(SIZE, SIZE, 0)));
2020-04-01 20:17:54 +00:00
2022-08-11 12:27:19 +00:00
// Index
c.bench_function("vecvec_idx", |b| {
2020-04-04 11:28:18 +00:00
let vec_vec = init_vec_vec();
2022-08-11 12:27:19 +00:00
b.iter_batched(
|| (rand(), rand()),
|(x, y)| {
2022-08-13 09:07:39 +00:00
let _v = vec_vec[x][y];
2022-08-11 12:27:19 +00:00
},
criterion::BatchSize::SmallInput,
)
2020-04-01 20:17:54 +00:00
});
c.bench_function("grid_idx", |b| {
2020-04-04 11:28:18 +00:00
let grid = init_grid();
2022-08-11 12:27:19 +00:00
b.iter_batched(
|| (rand(), rand()),
2022-08-13 09:07:39 +00:00
|(x, y)| grid[x][y],
2022-08-11 12:27:19 +00:00
criterion::BatchSize::SmallInput,
)
2020-04-01 20:17:54 +00:00
});
2022-08-11 12:27:19 +00:00
c.bench_function("vecvec_get", |b| {
2020-04-04 11:28:18 +00:00
let vec_vec = init_vec_vec();
2022-08-11 12:27:19 +00:00
b.iter_batched(
|| (rand(), rand()),
|(x, y)| {
2022-08-13 12:24:07 +00:00
let _v = vec_vec.get(x).unwrap().get(y).unwrap();
2022-08-11 12:27:19 +00:00
},
criterion::BatchSize::SmallInput,
)
2020-04-01 20:17:54 +00:00
});
2022-08-11 12:27:19 +00:00
c.bench_function("grid_get", |b| {
2020-04-04 11:28:18 +00:00
let grid = init_grid();
2022-08-11 12:27:19 +00:00
b.iter_batched(
|| (rand(), rand()),
|(x, y)| {
2022-08-13 12:24:07 +00:00
let _v = grid.get(x, y).unwrap();
2022-08-11 12:27:19 +00:00
},
criterion::BatchSize::SmallInput,
)
2020-04-01 21:29:06 +00:00
});
//Set
c.bench_function("vecvec_set", |b| {
2020-04-04 11:28:18 +00:00
let mut vec_vec = init_vec_vec();
2022-08-13 12:24:07 +00:00
b.iter_batched(
|| (rand(), rand()),
|(x, y)| vec_vec[x][y] = 42,
criterion::BatchSize::SmallInput,
)
2020-04-01 21:29:06 +00:00
});
2022-08-13 12:24:07 +00:00
c.bench_function("grid_set", |b| {
let mut g = init_grid();
b.iter_batched(
|| (rand(), rand()),
|(x, y)| g[x][y] = 42,
criterion::BatchSize::SmallInput,
)
2020-04-01 21:29:06 +00:00
});
2020-04-06 18:30:23 +00:00
// Push
c.bench_function("grid_push_row", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.push_row(vec![0; SIZE]),
criterion::BatchSize::SmallInput,
)
2020-04-06 18:30:23 +00:00
});
c.bench_function("grid_push_col", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.push_col(vec![0; SIZE]),
criterion::BatchSize::SmallInput,
)
});
// Pop
c.bench_function("grid_pop_row", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.pop_row(),
criterion::BatchSize::SmallInput,
)
});
c.bench_function("grid_pop_col", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.pop_col(),
criterion::BatchSize::SmallInput,
)
2020-04-06 18:30:23 +00:00
});
2023-04-30 21:10:09 +00:00
2023-04-30 20:51:45 +00:00
// Remove
c.bench_function("grid_remove_row", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.remove_row(2),
criterion::BatchSize::SmallInput,
)
});
c.bench_function("grid_remove_col", |b| {
let grid = init_grid();
b.iter_batched(
|| grid.clone(),
|mut g| g.remove_col(2),
criterion::BatchSize::SmallInput,
)
});
2020-04-01 20:17:54 +00:00
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);