Line data Source code
1 : // Copyright (c) 2023-present The Bitcoin Core developers
2 : // Distributed under the MIT software license, see the accompanying
3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 :
5 : #ifndef BITCOIN_TEST_UTIL_RANDOM_H
6 : #define BITCOIN_TEST_UTIL_RANDOM_H
7 :
8 : #include <consensus/amount.h>
9 : #include <random.h>
10 : #include <uint256.h>
11 :
12 : #include <atomic>
13 : #include <cstdint>
14 :
15 : enum class SeedRand {
16 : /**
17 : * Seed with a compile time constant of zeros.
18 : */
19 : ZEROS,
20 : /**
21 : * Seed with a fixed value that never changes over the lifetime of this
22 : * process. The seed is read from the RANDOM_CTX_SEED environment variable
23 : * if set, otherwise generated randomly once, saved, and reused.
24 : */
25 : FIXED_SEED,
26 : };
27 :
28 : /** Seed the global RNG state for testing and log the seed value. This affects all randomness, except GetStrongRandBytes(). */
29 : void SeedRandomStateForTest(SeedRand seed);
30 :
31 : extern std::atomic<bool> g_seeded_g_prng_zero;
32 : extern std::atomic<bool> g_used_g_prng;
33 :
34 : template <RandomNumberGenerator Rng>
35 174110 : inline CAmount RandMoney(Rng&& rng)
36 : {
37 348220 : return CAmount{rng.randrange(MAX_MONEY + 1)};
38 : }
39 :
40 : #endif // BITCOIN_TEST_UTIL_RANDOM_H
|