я использую boost::random::uniform_int_distribution<boost::multiprecision::uint256_t>
генерировать некоторые юнит-тесты. Обратите внимание, что я использую multiprecision
Вот почему мне нужно использовать boost, а не стандартную библиотеку. Для моих периодических тестов мне нужно генерировать детерминированные результаты из недетерминированного семени, но таким образом, чтобы я мог воспроизвести результаты позже в случае неудачи тестов.
Итак, я бы сгенерировал истинное случайное число и использовал бы его как начальное число uniform_int_distribution
, Цель состоит в том, что если это не удастся, я смогу воспроизвести проблему с тем же начальным числом, из-за которого тесты не пройдены.
Поддерживает ли эта часть надстройки генерирование случайных чисел на основе начальных значений в своем интерфейсе? Если нет, есть ли другой способ сделать это?
В настоящее время я генерирую случайные числа:
boost::random::random_device gen;
boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> dist{100, 1000};
auto random_num = dist(gen);
PS: Пожалуйста, имейте в виду, что основным требованием является поддержка multiprecision
, Мне требуются числа в диапазоне от 16 до 512 бит. Это для тестов, поэтому производительность не является обязательным требованием. Я в порядке генерации больших случайных чисел другими способами и преобразования их в boost::multiprecision
,
boost::random::random_device
это Non-deterministic Uniform Random Number Generator
, правда генератор случайных чисел. Если вам не нужны реальные недетерминированные случайные числа, вы можете использовать Pseudo-Random Number Generator
(по крайней мере, в целях тестирования), который можно посеять. Одним из известных генераторов псевдослучайных чисел является мерсенновый твистер boost::random::mt19937
,
Этот генератор обычно засевается реальный случайное число, которое вы можете напечатать для воспроизводимости в своих модульных тестах:
auto seed = boost::random::random_device{}();
std::cout << "Using seed: " << seed << '\n';
boost::random::mt19937 gen{ seed };
boost::random::uniform_int_distribution<boost::multiprecision::uint256_t> dist{100, 1000};
auto random_num = dist(gen);
Других решений пока нет …