module SingleThreadedScheduler where import Control.Eff.Concurrent.Process import Control.Eff.Concurrent.Process.SingleThreadedScheduler as Scheduler import Control.Monad (void) import Test.Tasty import Test.Tasty.HUnit import Data.Dynamic timeoutSeconds :: Integer -> Timeout timeoutSeconds seconds = Timeout (seconds * 1000000) (show seconds ++ "s") test_mainProcessSpawnsAChildAndExitsNormally :: TestTree test_mainProcessSpawnsAChildAndExitsNormally = localOption (timeoutSeconds 2) (testCase "spawn a child and exit normally" (Scheduler.defaultMain (do void (spawn (void (receiveMessage singleThreadedIoScheduler))) void (exitNormally singleThreadedIoScheduler) fail "This should not happen!!" ))) test_mainProcessSpawnsAChildBothExitNormally :: TestTree test_mainProcessSpawnsAChildBothExitNormally = localOption (timeoutSeconds 30) (testCase "spawn a child and let it exit and exit" (Scheduler.defaultMain (do child <- spawn (do void (receiveMessageAs @String singleThreadedIoScheduler) void (exitNormally singleThreadedIoScheduler) error "This should not happen (child)!!" ) True <- sendMessage singleThreadedIoScheduler child (toDyn "test") void (exitNormally singleThreadedIoScheduler) error "This should not happen!!" )))