Сделайте тест.Быстрая проверка.Пакетное использование типа по умолчанию для тестирования функций списка

StackOverflow https://stackoverflow.com/questions/64197

Вопрос

Я тестирую функцию под названием extractions, которая работает с любым списком.

extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
    where extract [] _ = []
          extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)

Я хочу протестировать это, например, с помощью

import Test.QuickCheck.Batch    
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]

Но это не будет компилироваться;Я должен указать тип либо для run или prop_len, потому что QuickCheck не может генерировать [a], это должно породить что-то конкретное.Поэтому я выбрал Int:

main = runTests "extractions" defOpt [r prop_len]
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult

Есть ли какой-нибудь способ заставить QuickCheck выбрать a для меня вместо того, чтобы указывать это в типе run?

Это было полезно?

Решение

Тот Самый руководство по быстрой проверке говорит "нет".:

Свойства должны иметь мономорфные типы.`Полиморфные" свойства, подобные приведенному выше, должны быть ограничены определенным типом, который будет использоваться для тестирования.Удобно сделать это, указав типы одного или нескольких аргументов в

где типы = (x1 ::t1, x2 ::t2, ...)

оговорка...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top