Работая над некоторыми обновлениями для моего модуля 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, есть ли у кого-нибудь опыт работы с этими модулями?