leancheck-0.9.3: test/fun.hs
-- Copyright (c) 2015-2020 Rudy Matela.
-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
import Test
import System.Exit (exitFailure)
import Data.List (elemIndices)
import Test.LeanCheck.Function ()
main :: IO ()
main = do
max <- getMaxTestsFromArgs 200
case elemIndices False (tests max) of
[] -> putStrLn "Tests passed!"
is -> do putStrLn ("Failed tests:" ++ show is)
exitFailure
tests :: Int -> [Bool]
tests n =
[ True
, fails n prop_foldlr
, holds n prop_foldlr'
, fails n prop_mapFilter
, fails n prop_false
, fails n prop_false'
]
type A = Int
prop_foldlr :: (A -> A -> A) -> A -> [A] -> Bool
prop_foldlr f z xs = foldr f z xs == foldl f z xs
-- correct version of the property above
prop_foldlr' :: (A -> A -> A) -> A -> [A] -> Bool
prop_foldlr' f z xs = foldl (flip f) z (reverse xs) == foldr f z xs
prop_mapFilter :: (A -> A) -> (A -> Bool) -> [A] -> Bool
prop_mapFilter f p xs = filter p (map f xs) == map f (filter p xs)
prop_false :: (A -> A) -> (A -> A) -> Bool
prop_false _ _ = False
prop_false' :: (A -> A) -> (A,A) -> Bool
prop_false' _ _ = False