From 83ecee65096bdd3f97ec9b683c70b7f0b692c1cc Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Fri, 21 Jul 2023 18:09:17 +0200 Subject: [PATCH] add growing benchmark --- Cargo.toml | 2 +- benches/large_grid.rs | 17 ----------------- benches/main.rs | 33 +++++++++++++++++++++++++++++++++ src/region.rs | 4 ++++ src/tile.rs | 11 +++++++++++ 5 files changed, 49 insertions(+), 18 deletions(-) delete mode 100644 benches/large_grid.rs create mode 100644 benches/main.rs diff --git a/Cargo.toml b/Cargo.toml index f4ed9ac..b28847f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" rand = "0.8.5" [[bench]] -name = "large_grid" +name = "main" harness = false [dev-dependencies] diff --git a/benches/large_grid.rs b/benches/large_grid.rs deleted file mode 100644 index 60a771d..0000000 --- a/benches/large_grid.rs +++ /dev/null @@ -1,17 +0,0 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use gol_bitwise::region::Region; - -fn large_grid(c: &mut Criterion) { - const SIZE: usize = 2048 / gol_bitwise::tile::WIDTH; // same number of cells regardless of tile size - let mut region = black_box(Region::new(SIZE, SIZE)); - region.randomise(); - - c.bench_function("large grid", |b| { - b.iter(|| { - region.step(); - }) - }); -} - -criterion_group!(benches, large_grid); -criterion_main!(benches); diff --git a/benches/main.rs b/benches/main.rs new file mode 100644 index 0000000..8ae3c42 --- /dev/null +++ b/benches/main.rs @@ -0,0 +1,33 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use gol_bitwise::{ + region::Region, + tile::{self, Tile}, +}; + +fn large_grid(c: &mut Criterion) { + const SIZE: usize = 2048 / tile::WIDTH; // same number of cells regardless of tile size + let mut region = black_box(Region::new(SIZE, SIZE)); + region.randomise(); + + c.bench_function("large grid", |b| { + b.iter(|| { + region.step(); + }) + }); +} + +fn growing(c: &mut Criterion) { + c.bench_function("growing", |b| { + b.iter(|| { + let mut region = black_box(Region::new(1, 1)); + region.set_tile(Tile::gliders(), 0, 0); + for _ in 0..1024 { + region.step(); + region.auto_grow(); + } + }) + }); +} + +criterion_group!(benches, large_grid, growing); +criterion_main!(benches); diff --git a/src/region.rs b/src/region.rs index d793c9d..619da53 100644 --- a/src/region.rs +++ b/src/region.rs @@ -19,6 +19,10 @@ impl Region { } } + pub fn set_tile(&mut self, tile: Tile, x: usize, y: usize) { + self.tiles[y][x] = tile; + } + pub fn height(&self) -> usize { self.tiles.len() } diff --git a/src/tile.rs b/src/tile.rs index ed6f5c6..3f5ad5b 100644 --- a/src/tile.rs +++ b/src/tile.rs @@ -27,6 +27,17 @@ impl Tile { Self::EMPTY } + pub fn gliders() -> Self { + let mut t = Self::EMPTY; + t.rows[1] = 0b1110000; + t.rows[2] = 0b1000000; + t.rows[3] = 0b0100000; + t.rows[WIDTH - 4] = 0b0100; + t.rows[WIDTH - 3] = 0b0010; + t.rows[WIDTH - 2] = 0b1110; + t + } + pub fn edge_east(&self) -> Row { let mut edge = 0; for n in 0..WIDTH {