random number generator to aid in generating random test cases
This commit is contained in:
parent
936363011c
commit
ff01cf3a3c
52
lib_random.h
Normal file
52
lib_random.h
Normal file
@ -0,0 +1,52 @@
|
||||
#ifndef RADII_LIB_RANDOM
|
||||
#define RADII_LIB_RANDOM
|
||||
|
||||
#include <limits>
|
||||
#include <random>
|
||||
|
||||
template <typename T = unsigned long> class random_number_generator {
|
||||
std::random_device seed;
|
||||
std::mt19937_64 generator;
|
||||
std::uniform_int_distribution<T> range;
|
||||
T l = std::numeric_limits<T>::min();
|
||||
T h = std::numeric_limits<T>::max();
|
||||
|
||||
public:
|
||||
random_number_generator(T high = std::numeric_limits<T>::max());
|
||||
random_number_generator(T low, T high);
|
||||
T operator()();
|
||||
T operator()(T h);
|
||||
T operator()(T l, T h);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
random_number_generator<T>::random_number_generator(T high) : h(high) {
|
||||
generator.seed(seed());
|
||||
range = std::uniform_int_distribution<T>(l, h);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
random_number_generator<T>::random_number_generator(T low, T high)
|
||||
: l(low), h(high) {
|
||||
generator.seed(seed());
|
||||
range = std::uniform_int_distribution<T>(l, h);
|
||||
}
|
||||
|
||||
template <typename T> T random_number_generator<T>::operator()() {
|
||||
return range(generator);
|
||||
}
|
||||
|
||||
template <typename T> T random_number_generator<T>::operator()(T high) {
|
||||
h = high;
|
||||
range = std::uniform_int_distribution<T>(l, h);
|
||||
return range(generator);
|
||||
}
|
||||
|
||||
template <typename T> T random_number_generator<T>::operator()(T low, T high) {
|
||||
l = low;
|
||||
h = high;
|
||||
range = std::uniform_int_distribution<T>(l, h);
|
||||
return range(generator);
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user