Files

19 lines
2.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Практическое задание 4. Тестирование в Haskell
№ 12
Создать проект в stack. Функции записать в библиотеку Lib.hs и ограничить доступ к вспомогательным функциям. Тесты записать в Spec.hs.
Функция 1: Напишите функцию проверки равенства по модулю isCongruent :: Int -> Int -> Int -> Bool, которая проверяет, равны ли два числа по модулю третьего числа. Используя QuickCheck, проверьте следующие свойства:
1. Если два числа равны по модулю, то их разность делится на модуль:
isCongruent a b m == (modulus (a - b) m == 0).
2. Равенство по модулю является симметричным:
isCongruent a b m == isCongruent b a m.
3. Если одно число равно другому, то они равны по любому модулю:
если a == b, то isCongruent a b m == True.
Функция 2: Напишите функцию filterByPredicate :: (a -> Bool) -> [a] -> [a], которая фильтрует элементы списка по заданному предикату. Используя QuickCheck, проверьте следующие свойства:
1. Все элементы результата удовлетворяют предикату: для каждого элемента x из результата должно выполняться условие: predicate x == True.
2. Длина результата не превышает длину исходного списка: length (filterByPredicate predicate xs) <= length xs.
3. Если предикат всегда возвращает True, то результат совпадает с исходным списком: если predicate x == True для всех x, то filterByPredicate predicate xs == xs.