Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/SelfTest/UsageTests/ToStringWhich.tests.cpp
diff options
context:
space:
mode:
authorMartin Hořeňovský2022-05-17 21:49:17 +0200
committerMartin Hořeňovský2022-05-17 21:49:26 +0200
commitdcafc605f3232f5109e3f86ac8d8281e6ed611d2 (patch)
treeaa998474e9c8b1ef7b613e26b0d6dcd578e57da5 /tests/SelfTest/UsageTests/ToStringWhich.tests.cpp
parent7a2a6c632feb7d6e438671b8520beb80efd60ad2 (diff)
downloadcatch3-dcafc605f3232f5109e3f86ac8d8281e6ed611d2.tar.gz
Only reseed the internal RNG when a test is first entered
This fixes multiple issues with random generators, with the most important one being that multiple nested generators could return values from the same sequence, due to internal implementation details of `GENERATE`, and how they interact with test case paths. The cost of doing this is that given this simple `TEST_CASE`, ```cpp TEST_CASE("foo") { auto i = GENERATE(take(10, random(0, 100)); SECTION("A") { auto j = GENERATE(take(10, random(0, 100)); } SECTION("B") { auto k = GENERATE(take(10, random(0, 100)); } } ``` `k` will have different values between running the test as a whole, e.g. with `./tests "foo"`, and running only the "B" section with `./tests "foo" -c "B"`. I consider this an acceptable cost, because the only alternative would be very messy to implement, and add a lot of brittle and complex code for relatively little benefit. If this calculation changes, we will need to instead walk the current tracker tree whenever a random generator is being constructed, check for random generators on the path to root, and take a seed from them.
Diffstat (limited to 'tests/SelfTest/UsageTests/ToStringWhich.tests.cpp')
0 files changed, 0 insertions, 0 deletions