TestU01 — это программная библиотека , реализованная на языке ANSI C , которая предлагает набор утилит для эмпирического тестирования случайности генераторов случайных чисел (ГСЧ). [1] Библиотека была впервые представлена в 2007 году Пьером Л'Экюйером и Ричардом Симаром из Монреальского университета . [2]
Библиотека реализует несколько типов генераторов случайных чисел, включая некоторые из предложенных в литературе и некоторые из широко используемых программных продуктов. Она предоставляет общие реализации классических статистических тестов для генераторов случайных чисел, а также несколько других, предложенных в литературе, и некоторые оригинальные. Эти тесты могут быть применены к генераторам, предопределенным в библиотеке, генераторам, определенным пользователем, и потокам случайных чисел, сохраненных в файлах. Также доступны специальные наборы тестов для последовательностей равномерных случайных чисел в [0,1] или битовых последовательностей. Также предоставляются основные инструменты для построения векторов точек, созданных генераторами.
Первоначальный набор тестов на случайность для ГСЧ был предложен в первом издании « Искусства программирования» Дональда Кнута в 1969 году . Тесты Кнута затем были вытеснены тестами Diehard Джорджа Марсальи (1996), состоящими из пятнадцати различных тестов. Невозможность изменять параметры теста или добавлять новые тесты привела к разработке библиотеки TestU01.
TestU01 предлагает четыре группы модулей для анализа ГСЧ:
Когда определенный тест применяется к выборке размера n, созданной ГСЧ, p -значение теста обычно остается разумным по мере увеличения размера выборки, пока размер выборки не достигнет n 0 , скажем. После этого p -значение расходится к 0 или 1 с экспоненциальной скоростью. Модуль 4 позволяет исследователю изучать взаимодействие между определенным тестом и структурой точечных множеств, созданных данным семейством ГСЧ. Этот метод можно использовать для определения того, насколько большим должен быть размер выборки в зависимости от длины периода генератора, прежде чем генератор начнет систематически проваливать тест.
TESTU01 предлагает несколько батарей тестов, включая «Small Crush» (состоящий из 10 тестов), «Crush» (96 тестов) и «Big Crush» (106 тестов). Конкретные тесты, применяемые каждой батареей, подробно описаны в руководстве пользователя. [3] На 1,7 ГГц Pentium 4 под управлением Red Hat Linux 9.0 для простого ГСЧ Small Crush занимает около 2 минут. Crush занимает около 1,7 часа. Big Crush занимает около 4 часов. Для более сложного ГСЧ все эти времена увеличиваются в два раза или более. Для сравнения, тесты Diehard выполняются около 15 секунд.
TestU01 принимает только 32-битные входные данные и интерпретирует их как значения в диапазоне [0, 1]. Это делает его более чувствительным к дефектам в старших битах, чем в младших. Важно тестировать универсальные генераторы в бит-реверсивной форме, чтобы проверить их пригодность для приложений, использующих младшие биты. [4] : 4
Генераторы, которые выдают 64 бита выходных данных, дополнительно требуют отдельных тестов для своих высоких и низких половин. [5] : 51