Crates.io | game_of_life_kata |
lib.rs | game_of_life_kata |
version | 0.1.1 |
source | src |
created_at | 2023-03-04 19:06:35.191002 |
updated_at | 2023-03-04 20:40:57.053814 |
description | A Conway's Game of Life kata in Rust |
homepage | |
repository | https://github.com/josecelano/game-of-life |
max_upload_size | |
id | 800760 |
size | 609,940 |
A Conway's Game of Live kata in Rust.
The universe of the Game of Life is an infinite, two-dimensional orthogonal grid of square cells, each of which is in one of two possible states, live or dead (or populated and unpopulated, respectively). Every cell interacts with its eight neighbours, which are the cells that are horizontally, vertically, or diagonally adjacent.
From: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
At each step in time, the following transitions occur:
These rules, which compare the behaviour of the automaton to real life, can be condensed into the following:
The initial pattern constitutes the seed of the system. The first generation is created by applying the above rules simultaneously to every cell in the seed, live or dead; births and deaths occur simultaneously, and the discrete moment at which this happens is sometimes called a tick. The simultaneity means that when each cell counts the number of live neighbors around it, it uses its neighbors' old states before the update, not their new states after the update. If the cells are instead updated in reading order, so that each cell uses the old states of the cells to its right and below it but the new states of the cells to its left and above it, different cellular automaton results, which is known as NaiveLife because it is a common beginners' mistake among people attempting to program Conway's Game of Life.
Each generation is a pure function of the preceding one. The rules continue to be applied repeatedly to create further generations.
cargo run
The app will show you the available options, for example:
cargo run ./patterns/glider.txt 30 60 1000 1
That command will run the glider
pattern in a 30
x60
background grid for 1000
generations with a generation lifetime of 1
second.
cargo test
cargo clippy --all-targets -- -D clippy::pedantic
Text report:
cargo cov
cargo llvm-cov --lib <- Exclude integration tests
It generates a text coverage report like this:
Filename Regions Missed Regions Cover Functions Missed Functions Executed Lines Missed Lines Cover Branches Missed Branches Cover
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
application/app.rs 3 0 100.00% 3 0 100.00% 22 0 100.00% 0 0 -
domain/cell/coordinates.rs 24 2 91.67% 15 2 86.67% 67 2 97.01% 0 0 -
domain/cell/mod.rs 39 1 97.44% 24 1 95.83% 71 1 98.59% 0 0 -
domain/cell/row.rs 53 2 96.23% 31 2 93.55% 96 4 95.83% 0 0 -
domain/cell/state.rs 34 5 85.29% 19 4 78.95% 48 6 87.50% 0 0 -
domain/game.rs 5 0 100.00% 1 0 100.00% 27 0 100.00% 0 0 -
domain/grid/functions/next_generation.rs 39 0 100.00% 14 0 100.00% 139 0 100.00% 0 0 -
domain/grid/functions/overlap.rs 62 1 98.39% 26 0 100.00% 219 1 99.54% 0 0 -
domain/grid/mod.rs 208 5 97.60% 96 5 94.79% 619 7 98.87% 0 0 -
domain/grid/size.rs 12 1 91.67% 8 1 87.50% 27 1 96.30% 0 0 -
domain/grid/traverser.rs 24 0 100.00% 8 0 100.00% 45 0 100.00% 0 0 -
domain/output/logger.rs 11 1 90.91% 9 1 88.89% 33 3 90.91% 0 0 -
infrastructure/console.rs 4 1 75.00% 4 1 75.00% 12 3 75.00% 0 0 -
infrastructure/thread.rs 2 0 100.00% 2 0 100.00% 4 0 100.00% 0 0 -
lib.rs 1 0 100.00% 1 0 100.00% 1 0 100.00% 0 0 -
main.rs 2 1 50.00% 2 1 50.00% 5 4 20.00% 0 0 -
ui/console.rs 13 6 53.85% 7 3 57.14% 55 29 47.27% 0 0 -
ui/help.rs 1 1 0.00% 1 1 0.00% 28 28 0.00% 0 0 -
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL 537 27 94.97% 271 22 91.88% 1518 89 94.14% 0 0 -
Generate profiling data in ./coverage/lcov.info
:
cargo cov-lcov
It's used to generate the data needed by the Coverage Gutters Visual Studio Code plugin.
Generate a HTML coverage report ./target/llvm-cov/html
:
cargo cov-html
grid_expand
could be used to expand a pattern grid. It could be implemented internally with grip_overlap
. It expands from the grid center.See todo
labels in the code.
GNU GENERAL PUBLIC LICENSE. Version 3