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:
@@ -545,6 +545,19 @@ void test_trace(const char *fmt, ...) {
|
||||
}
|
||||
|
||||
|
||||
// test prng
|
||||
uint32_t test_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;
|
||||
}
|
||||
|
||||
|
||||
// encode our permutation into a reusable id
|
||||
static void perm_printid(
|
||||
const struct test_suite *suite,
|
||||
|
||||
Reference in New Issue
Block a user