-- test-list.hs -- example program, testing Data.List using LeanCheck -- -- Copyright (c) 2017-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test.LeanCheck import Test.LeanCheck.Instances import Data.Char import Data.Text as T import Prelude as P hiding (lines, unlines, words, unwords) main :: IO () main = do -- wrong: append is clearly not commutative check $ \t1 t2 -> t1 `append` t2 == t2 `append` t1 -- wrong: lines and unlines do not form an identity check $ \ts -> lines (unlines ts) == ts check $ \t -> unlines (lines t) == t -- correct: lines and unlines form an identity under certain conditions check $ \ts -> P.all (T.all isAlphaNum) ts ==> lines (unlines ts) == ts check $ \ts -> unlines (lines (unlines ts)) == unlines ts check $ \ts -> lines (unlines (lines ts)) == lines ts -- wrong: words and unwords do not form an identity check $ \ts -> words (unwords ts) == ts check $ \t -> unwords (words t) == t -- correct: words and unwords form an identity under certain conditions check $ \ts -> words (unwords (words ts)) == words ts