dicetest 0.4.0

Framework for writing tests with randomly generated test data
Documentation
# Stats

Stats can be used to analyze multiple test runs. Use [`stat!`] to reveal the
distribution of generated test data or the probability of branches:

```rust
use dicetest::prelude::*;

#[test]
fn test_foo() {
    Dicetest::repeatedly().run(|mut fate| {
        let x = fate.roll(dice::u8(1..=5));
        stat_debug!(x);

        let y = fate.roll(dice::u8(1..=3));
        if y != x {
            stat!("branch", "if with y = {}", y)
        } else {
            stat!("branch", "else");
        }
    })
}
```

Running the test with the [environment variable] `DICETEST_STATS_ENABLED=true`
produces the following output:

```text
The test withstood 200 passes.

# Config
- seed: 5043079553183914912
- start limit: 0
- end limit: 100
- passes: 200

# Stats
- branch:
    - 29.50% (59): if with y = 1
    - 27.50% (55): if with y = 3
    - 22.50% (45): if with y = 2
    - 20.50% (41): else
- x:
    - 31.50% (63): 1
    - 22.00% (44): 5
    - 17.00% (34): 2
    - 15.50% (31): 4
    - 14.00% (28): 3
```

[`stat!`]: https://docs.rs/dicetest/latest/dicetest/macro.stat.html
[environment variable]: ./environment_variables.md