Добавил задание к 4

This commit is contained in:
2024-11-29 18:13:23 +03:00
parent 9f7e34f7cd
commit 2ad9d5d784
3 changed files with 20 additions and 0 deletions

1
lab4/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
!task.txt

BIN
lab4/task.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

19
lab4/task.txt Normal file
View File

@@ -0,0 +1,19 @@
Практическое задание 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.