Как я могу протестировать функцию более высокого-порядка с помощью QuickCheck?

У меня есть функция более высокого-порядка, которую я хочу протестировать, и одно из свойств, которые я хочу проверить, это то, что она делает с переданными функциями.:

gen :: a -> ([a] -> [a]) -> ([a] -> Bool) -> a

Идея примерно в том, что это пример генератора. Я собираюсь начать с одного a, создать одноэлементный список из [a], затем создать новые списки из [a]до тех пор, пока предикат не скажет мне остановиться. Вызов может выглядеть следующим образом:

gen init next stop

где

init :: a
next :: [a] -> [a]
stop :: [a] -> Bool

Вот свойство, которое я хотел бы протестировать:

При любом вызове gen init next stopgenобещает никогда не передавать пустой список в next.

Могу ли я проверить это свойство с помощью QuickCheck , и если да, то как?

14
задан Norman Ramsey 13 March 2012 в 15:04
поделиться