// 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 #include #include 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(RandU32()) << 32) | RandU32(); } inline double RandDouble() { uint64_t rand_u64 = RandU64(); return *reinterpret_cast(&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_