random.h raw
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 inline CAmount RandMoney(Rng&& rng)
36 {
37 return CAmount{rng.randrange(MAX_MONEY + 1)};
38 }
39
40 #endif // BITCOIN_TEST_UTIL_RANDOM_H
41