| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TOOLS_IPC_FUZZER_MUTATE_RAND_UTIL_H_ |
| #define TOOLS_IPC_FUZZER_MUTATE_RAND_UTIL_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <random> |
| |
| namespace ipc_fuzzer { |
| |
| extern std::mt19937* g_mersenne_twister; |
| |
| void InitRand(); |
| |
| inline uint32_t RandU32() { |
| return (*g_mersenne_twister)(); |
| } |
| |
| inline uint64_t RandU64() { |
| return (static_cast<uint64_t>(RandU32()) << 32) | RandU32(); |
| } |
| |
| inline double RandDouble() { |
| uint64_t rand_u64 = RandU64(); |
| return *reinterpret_cast<double*>(&rand_u64); |
| } |
| |
| inline uint32_t RandInRange(uint32_t range) { |
| return RandU32() % range; |
| } |
| |
| inline bool RandEvent(uint32_t frequency) { |
| return RandInRange(frequency) == 0; |
| } |
| |
| inline size_t RandElementCount() { |
| return RandU32() % 10; |
| } |
| |
| } // namespace ipc_fuzzer |
| |
| #endif // TOOLS_IPC_FUZZER_MUTATE_RAND_UTIL_H_ |