Мне кажется, здесь есть по крайней мере три вещи, которые вы хотите проверить:
- Правильность процедуры, которая генерирует вывод с использованием случайного источника
- Чтораспределение случайного источника - это то, что вы ожидаете
- что распределение выхода - это то, что вы ожидаете
1 должно быть детерминированным, и вы можете протестировать его, предоставив выбранный наборизвестные «случайные» значения и входы и проверка того, что он выдает известные правильные выходы.Это было бы проще, если бы вы структурировали код так, чтобы случайный источник передавался в качестве аргумента, а не встраивался в код.
2 и 3 не могут быть проверены абсолютно.Вы можете выполнить тестирование до некоторого выбранного уровня достоверности, но вы должны быть готовы к тому, что такие тесты не пройдут в некоторых случаях.Вероятно, вы действительно хотите обратить внимание на то, что тест 3 проваливается гораздо чаще, чем тест 2, поскольку это может указывать на неправильность вашего алгоритма.
Применяемые тесты будут зависеть от ожидаемого распределения.Для 2 вы, скорее всего, ожидаете, что случайный источник будет равномерно распределен.Существуют различные тесты для этого, в зависимости от того, насколько вы хотите быть вовлечены, см., Например, Тесты для генераторов псевдослучайных чисел на этой странице .
Ожидаемое распределение для 3 будет зависеть оченьмногое на том, что вы производите.Простой случай 50-50 в вопросе в точности эквивалентен тестированию на честную монету , но, очевидно, другие случаи будут более сложными.Если вы можете определить, каким должно быть распределение, может помочь критерий хи-квадрат против него.