module Main ( main ) where import Data.List import Test.Framework (defaultMain, testGroup) import Test.Framework.Providers.HUnit import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.QuickCheck import Test.HUnit import Control.Concurrent import Control.Concurrent.STM import Data.Conduit import Data.Conduit.List import Data.Conduit.TMChan main = defaultMain tests tests = [ testGroup "Behaves to spec" [ testCase "simpleList" test_simpleList ], testGroup "Bug fixes" [ testCase "multipleWriters" test_multipleWriters ] ] test_simpleList = do chan <- atomically $ newTMChan forkIO . runResourceT $ sourceList testList $$ sinkTMChan chan lst' <- runResourceT $ sourceTMChan chan $$ consume assertEqual "for the numbers [1..10000]," testList lst' closed <- atomically $ isClosedTMChan chan assertBool "channel is closed after running" closed where testList = [1..10000] test_multipleWriters = do ms <- runResourceT $ mergeSources [ sourceList [1..10] , sourceList [11..20] ] 3 xs <- runResourceT $ ms $$ consume assertEqual "for the numbers [1..10] and [11..20]," [1..20] $ sort xs