-- Copyright (c) 2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). {-# LANGUAGE CPP #-} import Test.Tasty import Test.Tasty.LeanCheck as LC import Data.List (sort) main :: IO () main = defaultMain tests tests :: TestTree tests = testGroup "Tests (checked by LeanCheck)" [passing] -- tests = testGroup "Tests (checked by LeanCheck)" [passing,failing,erroring] -- tests that pass passing :: TestTree passing = testGroup "Passing tests" [ LC.testProperty "sort . sort == sort" $ \xs -> sort (sort xs :: [Int]) == sort xs , LC.testProperty "Fermat's little theorem" $ \x -> ((x :: Integer)^7 - x) `mod` 7 == 0 , LC.testProperty "divMod" $ \x y -> y /= 0 ==> y * (x `div` y) + x `mod` y == (x :: Int) ] -- tests that fail (and should) failing :: TestTree failing = testGroup "Failing tests" [ LC.testProperty "Fermat's last theorem" $ \x y z n -> (n :: Integer) >= 3 ==> x^n + y^n /= (z^n :: Integer) ] -- tests that err (and should) erroring :: TestTree erroring = testGroup "Erroring tests" [ LC.testProperty "divMod (unguarded)" $ \x y -> y * (x `div` y) + x `mod` y == (x :: Int) ]