Протестируйте функцию mt_rand с помощью PHPUnit - PullRequest
6 голосов
/ 06 февраля 2011

Я бы создал несколько тестов с PhpUnit.Но файл php, который я хотел бы проверить, использует функцию mt_rand ().Так как же создать тест, который знает, что значение mt_rand () возвращает в последний раз?Спасибо за ответ на мой вопрос и извините за мой плохой английский, я из Германии;)

Ответы [ 2 ]

14 голосов
/ 06 февраля 2011

Алгоритм Mersenne Twister является детерминированным алгоритмом.Он начинается с начального числа, а затем генерирует случайные числа на его основе.Таким образом, при условии, что начальное число одинаковое, оно будет генерировать одинаковые случайные числа.

Обычно PHP выполняет начальное заполнение mt_rand с некоторыми данными на основе microtime, но вы можете вручную заполнить его, используя mt_srand.

mt_srand(0);
var_dump(mt_rand());
mt_srand(0);
var_dump(mt_rand());

Обратите внимание, что оба вызова функций дадут вам один и тот же номер 963932192.

Так что все, что вам в основном нужно сделать, это запустить его вручную, и вы будетев состоянии предсказать все числа, которые он генерирует.

0 голосов
/ 06 февраля 2011

Если вы каждый раз заполняете mt_rand одним и тем же начальным значением, вы всегда получите один и тот же ряд значений, возвращаемых mt_rand ().

например:

mt_srand(123456);

for ($i = 0; $i < 10; $i++) {
    echo mt_rand(),'<br />';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...