From f578051afcc99bc55954ce93781203edb291f413 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 25 Aug 2021 00:49:07 +0200 Subject: [PATCH] Add tests for Awaitable --- test/Quasar/AwaitableSpec.hs | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/Quasar/AwaitableSpec.hs b/test/Quasar/AwaitableSpec.hs index 77c9995..4b19f1e 100644 --- a/test/Quasar/AwaitableSpec.hs +++ b/test/Quasar/AwaitableSpec.hs @@ -11,6 +11,10 @@ import System.Timeout spec :: Spec spec = parallel $ do + describe "Awaitable" $ do + it "can await pure values" $ do + awaitIO $ (pure () :: Awaitable ()) :: IO () + describe "AsyncVar" $ do it "can be created" $ do _ <- newAsyncVar :: IO (AsyncVar ()) @@ -20,6 +24,42 @@ spec = parallel $ do avar <- newAsyncVar :: IO (AsyncVar ()) putAsyncVar_ avar () + it "can be awaited" $ do + avar <- newAsyncVar :: IO (AsyncVar ()) + putAsyncVar_ avar () + + awaitIO avar + + it "can be awaited and completed later" $ do + avar <- newAsyncVar :: IO (AsyncVar ()) + void $ forkIO $ do + threadDelay 100000 + putAsyncVar_ avar () + + awaitIO avar + + + describe "awaitAny" $ do + it "works with completed awaitables" $ do + awaitIO (awaitAny2 (pure () :: Awaitable ()) (pure () :: Awaitable ())) :: IO () + + it "can be completed later" $ do + avar1 <- newAsyncVar :: IO (AsyncVar ()) + avar2 <- newAsyncVar :: IO (AsyncVar ()) + void $ forkIO $ do + threadDelay 100000 + putAsyncVar_ avar1 () + awaitIO (awaitAny2 avar1 avar2) + + it "can be completed later by the second parameter" $ do + avar1 <- newAsyncVar :: IO (AsyncVar ()) + avar2 <- newAsyncVar :: IO (AsyncVar ()) + void $ forkIO $ do + threadDelay 100000 + putAsyncVar_ avar2 () + awaitIO (awaitAny2 avar1 avar2) + + describe "AsyncIO" $ do it "binds pure operations" $ do withDefaultAsyncManager (pure () >>= \() -> pure ()) -- GitLab