(Речь не идет о доказательстве теорем о тестировании на практике, как quickCheck
)Proof/тестирование корректности общих функций
Пусть f
некоторых общей функцию
f :: RESTRICTIONS => GENERICS
с некоторыми «желательными» свойствами (т.е. является а не хак, является неизменным, ...) обычно является чистой общей функцией Haskell.
Предположим, что мы хотим, чтобы проверить это, главный вопрос
если мы имеем (а) тестирование этой функции для одного определенного типа (например, Int
), мы можем предположить, что это верно для всех типов? (соответствие ограничений, конечно)
(с «хорошо протестированы» Я имею в виду «все» функция {domain X properties}
была протестирована)
Theorically мы можем быть уверены, но я не уверен, что если каким-то дополнительное свойство, ограничение, ... при создании экземпляра (т.е. компиляция), возможно, имеют влияние.
Спасибо!
Примечание тесты, возможно, использовать специфические свойства определенного типа (например, Int
), но эти свойства не может быть частью испытанных свойств. Например. если Monoid
является ограничением, ассоциативность может быть частью проверенных свойств (но не коммутативность, если это не ограничение).
Пример
пусть f
repeatedHeader :: Eq a => [a] -> Bool
repeatedHeader (x:y:_) = x == y
repeatedHeader _ = False
test1 = repeatedHeader [1,1,2] == True
test2 = repeatedHeader [1,2,3] == False
Хорошие моменты, о которых нужно подумать. Спасибо! – josejuan