Я создал библиотеку, которая создает последовательности, подобные спискам, и из которых реализованы многие функции стиля Prelude. Я хочу написать несколько тестовых примеров для этого, чтобы моя библиотека создавала правильный вывод, и я подумал, что самый простой способ сделать это - написать некоторые функции, преобразовать результаты в списки и сравнить их с результатами Prelude. Допустим, у нас есть это:Написание тестовых примеров в Haskell для разных типов
import qualified MyLibrary as ML
import qualified Prelude as P
Например, я может потребоваться следующее TestCase:
P.take 5 (P.enumFrom 1) == toList (ML.take 5 (ML.enumFrom 1))
Обратите внимание, что ML.enumFrom
не выводит список, он выдает свою собственную тип данных.
Вышеупомянутые работы прекрасно, но обратите внимание, как я «повторяю себя» (TM). Я должен обеспечить, чтобы левая и правая стороны были одинаковыми, иначе мой тестовый сценарий ошибочен.
Есть ли хороший способ написать тестовые примеры, так что мне не нужно повторять себя?
Я не думаю, что вы действительно «повторяетесь», когда ваш тест по определению «повторяется», чтобы сравнить два механизма. –
В идеале все тесты принимают параметр, который определяет, какую функцию использовать, чтобы я мог просто иметь функцию 'doTest', которая похожа на' doTest test = test True == toList (test False) 'или что-то в этом роде, но я не знаю, t нашел способ сделать это без того, чтобы typechecker ненавидел меня. – Clinton
@Clinton: Я думаю, что без создания экземпляра обычного класса или, возможно, с использованием шаблона haskell (с которым у меня нет опыта) вы не можете достичь этого – jakubdaniel