diff --git a/lab4/test/Spec.hs b/lab4/test/Spec.hs index ab58924..274b9d3 100644 --- a/lab4/test/Spec.hs +++ b/lab4/test/Spec.hs @@ -1,27 +1,33 @@ import Test.QuickCheck import Lib +-- Если два числа равны по модулю, то их разность делится на модуль propCongruentDifference :: Int -> Int -> Int -> Property propCongruentDifference a b m = m /= 0 ==> isCongruent a b m == ((a - b) `mod` m == 0) +-- Равенство по модулю является симметричным propCongruentSymmetric :: Int -> Int -> Int -> Property propCongruentSymmetric a b m = m /= 0 ==> isCongruent a b m == isCongruent b a m +-- Если одно число равно другому, то они равны по любому модулю propCongruentEqualNumbers :: Int -> Int -> Property propCongruentEqualNumbers a m = m /= 0 ==> isCongruent a a m == True +-- Все элементы результата удовлетворяют предикату propFilterByPredicateSatisfiesPredicate :: Fun Int Bool -> [Int] -> Bool propFilterByPredicateSatisfiesPredicate (Fun _ predicate) xs = all predicate (filterByPredicate predicate xs) +-- Длина результата не превышает длину исходного списка propFilterByPredicateLength :: Fun Int Bool -> [Int] -> Bool propFilterByPredicateLength (Fun _ predicate) xs = length (filterByPredicate predicate xs) <= length xs +-- Если предикат всегда возвращает True, то результат совпадает с исходным списком propFilterByPredicateAlwaysTrue :: [Int] -> Bool propFilterByPredicateAlwaysTrue xs = filterByPredicate (\_ -> True) xs == xs