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