random.h
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