module Main where
import qualified Data.Fold.Common as C
import Data.List
import Test.Tasty
import Test.Tasty.QuickCheck
propIntoList :: TestTree
propIntoList = testProperty "intoList Works"
$ \l -> C.run l C.intoList == (l :: [Int])
propTake :: TestTree
propTake = testProperty "Take Works"
$ \l i -> C.run l (C.take i) == (take i l :: [Int])
propDrop :: TestTree
propDrop = testProperty "Drop Works"
$ \l i -> C.run l (C.drop i) == (drop i l :: [Int])
propIndexOf :: TestTree
propIndexOf = testProperty "IndexOf Works"
$ \l -> C.run l (C.indexOf even) == findIndex even (l :: [Int])
propChunk :: TestTree
propChunk = testProperty "Chunk Works"
$ \l -> C.run l (C.chunk id) == chunk (l :: [Int])
where chunk [] = []
chunk (x : xs) =
(x : takeWhile (== x) xs) : chunk (dropWhile (== x) xs)
propConcat :: TestTree
propConcat = testProperty "Concat Works"
$ \l -> C.run l C.concat == concat (l :: [[Int]])
main :: IO ()
main = defaultMain $ testGroup "Right Folds" [ propIntoList
, propTake
, propDrop
, propIndexOf
, propChunk
, propConcat]