import Test.Tasty import Test.Tasty.HUnit import MockQueue main :: IO () main = defaultMain tests tests :: TestTree tests = testGroup "Immortal Queue Tests" [ testCase "All Succeed" allSuccess , testCase "Error Handling" errorHandling , testCase "Close Waits For Workers" closeWaits , testCase "Kill Stops Workers Immediately" killExitsEarly , testCase "Pop Failure Continues Processing" popFailureContinues ] where allSuccess :: Assertion allSuccess = do (successes, failures, popFailures) <- runPool [Log 1 100, Log 2 200, Log 3 300, Log 4 400, Log 5 500] successes @?= [1, 2, 3, 4, 5] failures @?= [] popFailures @?= [] errorHandling :: Assertion errorHandling = do (successes, failures, popFailures) <- runPool [Log 1 0, Fail "hello", Log 2 0, Fail "world", Fail "9001"] successes @?= [1, 2] failures @?= ["hello", "world", "9001"] popFailures @?= [] closeWaits :: Assertion closeWaits = do (successes, failures, popFailures) <- runPool_ True (Just 500) [Log 1 0, Log 2 200, Log 3 2000] successes @?= [1, 2, 3] failures @?= [] popFailures @?= [] killExitsEarly :: Assertion killExitsEarly = do (successes, failures, popFailures) <- runPool_ False (Just 500) [Log 1 0, Log 2 200, Log 3 3000] successes @?= [1, 2] failures @?= [] popFailures @?= [] popFailureContinues :: Assertion popFailureContinues = do (successes, failures, popFailures) <- runPool_ True (Just 800) [Log 1 10, PopFail "died", Log 2 70, Log 3 100, PopFail "again", Log 4 200, Log 5 300, Log 6 400] successes @?= [1, 2, 3, 4, 5, 6] failures @?= [] popFailures @?= [PopE "died", PopE "again"]