/ src / test / util / random.h
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