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