-- Copyright (c) 2015-2018 Rudy Matela.
-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
import System.Exit (exitFailure)
import Data.List (elemIndices)
import qualified Data.Text as T
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import Data.Set (Set)
import Data.Map (Map)
import Data.Sequence (Seq)
import qualified Data.Set as Set
import qualified Data.Map as Map
import qualified Data.Sequence as Seq
import Numeric.Natural
import Test.LeanCheck
import Test.LeanCheck.Instances
main :: IO ()
main =
case elemIndices False (tests 1000) of
[] -> putStrLn "Tests passed!"
is -> putStrLn ("Failed tests:" ++ show is) >> exitFailure
tests :: Int -> [Bool]
tests n =
[ True
, fails n $ \ts -> T.words (T.unwords ts) == ts
, fails n $ \t -> T.unwords (T.words t) == t
, holds n $ \ts -> T.words (T.unwords (T.words ts)) == T.words ts
, holds n $ \x y -> x + y == y + (x :: Natural)
, fails n $ \x y -> x + y == (x :: Natural)
, fails n $ \bs -> BS.reverse bs == bs
, holds n $ \bs -> BS.reverse (BS.reverse bs) == bs
, fails n $ \bs -> BL.reverse bs == bs
, holds n $ \bs -> BL.reverse (BL.reverse bs) == bs
, holds n $ \s -> Seq.reverse (Seq.reverse s :: Seq Int) == s
, fails n $ \s -> Seq.reverse (s :: Seq Int) == s
, holds n $ \a b -> a `Set.union` b == b `Set.union` (a :: Set Int)
, fails n $ \a b -> a `Set.union` b == (a :: Set Int)
, fails n $ \m1 m2 -> m1 `Map.union` m2 == m2 `Map.union` (m1 :: Map Int Int)
, holds n $ \m1 -> m1 `Map.union` m1 == (m1 :: Map Int Int)
]