message: FastRandom benchmark
  backports bitcoin@663fbae7776b0c238f6f27d73811b4bc627d0b6b
diff: #include "bench.h"
  #include "bloom.h"
  -#include "utiltime.h"
  #include "crypto/ripemd160.h"
  #include "crypto/sha1.h"
  #include "crypto/sha256.h"
  #include "crypto/sha512.h"
  +#include "random.h"
  +#include "utiltime.h"
  /* Number of bytes to hash per iteration */
  static const uint64_t BUFFER_SIZE = 1000*1000;
  @@ -47,7 +48,32 @@ static void SHA512(benchmark::State& state)
  CSHA512().Write(begin_ptr(in), in.size()).Finalize(hash);
  }
  +static void FastRandom_32bit(benchmark::State& state)
  +{
  + FastRandomContext rng(true);
  + uint32_t x;
  + while (state.KeepRunning()) {
  + for (int i = 0; i < 1000000; i++) {
  + x += rng.rand32();
  + }
  + }
  +}
  +
  +static void FastRandom_1bit(benchmark::State& state)
  +{
  + FastRandomContext rng(true);
  + uint32_t x;
  + while (state.KeepRunning()) {
  + for (int i = 0; i < 1000000; i++) {
  + x += rng.randbool();
  + }
  + }
  +}
  +
  BENCHMARK(RIPEMD160);
  BENCHMARK(SHA1);
  BENCHMARK(SHA256);
  BENCHMARK(SHA512);
  +
  +BENCHMARK(FastRandom_32bit);
  +BENCHMARK(FastRandom_1bit);
  