Тестирование генератора случайных чисел с использованием QuickCheck
Я написал генератор случайных чисел для создания доски тральщика. Он возвращает Gen Board, где Board - мой собственный определенный тип данных. Я хочу проверить, что он делает то, что должен. Поскольку это генератор, я не могу использовать функции, к которым я привык, которые возвращают Bool или Property. Есть ли хороший способ проверить генераторы с помощью quickCheck?
1 ответ
Решение
Предполагая, что у вас есть
genBoard :: Gen Board
isValidBoard :: Board -> Bool
Вы можете проверить, что генератор действителен с forAll
комбинатор,
prop_genBoardMakesValidBoards :: Property
prop_genBoardMakesValidBoards = forAll genBoard isValidBoard
Сложнее проверить, что генератор достаточно случайный, например, он не всегда возвращает тривиальную плату.