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