30 lines
700 B
C
30 lines
700 B
C
|
#ifndef CONCURRENCPP_RANDOM_H
|
||
|
#define CONCURRENCPP_RANDOM_H
|
||
|
|
||
|
#include <random>
|
||
|
|
||
|
namespace concurrencpp::tests {
|
||
|
class random {
|
||
|
|
||
|
private:
|
||
|
std::random_device rd;
|
||
|
std::mt19937 mt;
|
||
|
std::uniform_int_distribution<intptr_t> dist;
|
||
|
|
||
|
public:
|
||
|
random() noexcept : mt(rd()), dist(-1'000'000, 1'000'000) {}
|
||
|
|
||
|
intptr_t operator()() {
|
||
|
return dist(mt);
|
||
|
}
|
||
|
|
||
|
int64_t operator()(int64_t min, int64_t max) {
|
||
|
const auto r = (*this)();
|
||
|
const auto upper_limit = max - min + 1;
|
||
|
return std::abs(r) % upper_limit + min;
|
||
|
}
|
||
|
};
|
||
|
} // namespace concurrencpp::tests
|
||
|
|
||
|
#endif // CONCURRENCPP_RANDOM_H
|