Added BENCH/TEST_PRNG, replacing other ad-hoc sources of randomness
When you add a function to every benchmark suite, you know if should probably be provided by the benchmark runner itself. That being said, randomness in tests/benchmarks is a bit tricky because it needs to be strictly controlled and reproducible. No global state is used, allowing tests/benches to maintain multiple randomness stream which can be useful for checking results during a run. There's an argument for having global prng state in that the prng could be preserved across power-loss, but I have yet to see a use for this, and it would add a significant requirement to any future test/bench runner.
This commit is contained in:
@@ -529,6 +529,19 @@ void bench_trace(const char *fmt, ...) {
|
||||
}
|
||||
|
||||
|
||||
// bench prng
|
||||
uint32_t bench_prng(uint32_t *state) {
|
||||
// A simple xorshift32 generator, easily reproducible. Keep in mind
|
||||
// determinism is much more important than actual randomness here.
|
||||
uint32_t x = *state;
|
||||
x ^= x << 13;
|
||||
x ^= x >> 17;
|
||||
x ^= x << 5;
|
||||
*state = x;
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
// bench recording state
|
||||
static struct lfs_config *bench_cfg = NULL;
|
||||
static lfs_emubd_io_t bench_last_readed = 0;
|
||||
|
||||
Reference in New Issue
Block a user