Работая над некоторыми обновлениями моего модуля List :: Gen , я решил добавить -> pick (num)
, который вернет список случайных элементов размером num
из своего источника. Чтобы проверить это, я использовал srand
для заполнения генератора случайных чисел, и провел несколько тестов вида:
srand 1234;
is $src->pick(5)->str, '3 6 1 7 9';
И все это хорошо работало на машине Windows, на которой я был в то время. Однако, когда я перенес проект на рабочую станцию Mac, все тесты случайности не прошли, поскольку, несмотря на то же самое случайное начальное число, rand
давал разные результаты. Я так понимаю, это из различных базовых реализаций C rand ()
.
Итак, вопрос в том, каков наилучший кроссплатформенный способ тестирования этих функций? Стоит ли перегрузить функцию rand
своей собственной? Следует ли мне встроить перехватчики в функции, использующие rand
, чтобы включить режим «тестирования», который дает предсказуемый результат? Существуют ли другие методы?
Я бы предпочел ответы, включающие основные методы Perl, так как я стараюсь, чтобы дерево зависимостей модуля было небольшим.
Test :: Random и Test :: MockRandom кажутся предложениями CPAN, есть ли у кого-нибудь опыт работы с этими модулями?