11188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker//===- FuzzerRandom.h - Internal header for the Fuzzer ----------*- C++ -* ===// 21188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// 31188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// The LLVM Compiler Infrastructure 41188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// 51188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// This file is distributed under the University of Illinois Open Source 61188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// License. See LICENSE.TXT for details. 71188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// 81188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker//===----------------------------------------------------------------------===// 91188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker// fuzzer::Random 101188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker//===----------------------------------------------------------------------===// 111188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker 121188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifndef LLVM_FUZZER_RANDOM_H 131188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#define LLVM_FUZZER_RANDOM_H 141188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker 151188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#include <random> 161188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker 171188dcf30923cb444143ffa4b83dc951037e76agitbuildkickernamespace fuzzer { 181188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerclass Random { 191188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker public: 201188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker Random(unsigned int seed) : R(seed) {} 211188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker size_t Rand() { return R(); } 221188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker size_t RandBool() { return Rand() % 2; } 231188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker size_t operator()(size_t n) { return n ? Rand() % n : 0; } 241188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker intptr_t operator()(intptr_t From, intptr_t To) { 251188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker assert(From < To); 261188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker intptr_t RangeSize = To - From + 1; 271188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker return operator()(RangeSize) + From; 281188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker } 291188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker std::mt19937 &Get_mt19937() { return R; } 301188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker private: 311188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker std::mt19937 R; 321188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}; 331188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker 341188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker} // namespace fuzzer 351188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker 361188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif // LLVM_FUZZER_RANDOM_H 37