Idris2/tests/racket/conditions007/Main.idr
Guillaume Allais 1a1b5fcc63 [ fix #3103, #3104 ] Disable broken tests
Racket does not have FFI bindings for these primitives.
2023-11-29 17:01:26 +00:00

40 lines
1020 B
Idris

-- Disabled for now: no working
-- conditionWaitTimeout
-- for racket
-- Idris2
import System
import System.Concurrency
-- Test `conditionWaitTimeout` times out m of n threads for 1 main and n child
-- threads
main : IO ()
main =
let
n = 5
m = 3
in
do cvMutex <- makeMutex
cv <- makeCondition
-- spawn n-m inifinitely patient children
waiting <- for [1..(n - m)] $ \_ => fork $
do mutexAcquire cvMutex
conditionWait cv cvMutex
putStrLn "Woke up despite no timeout (SHOULDN'T HAPPEN)"
mutexRelease cvMutex
-- spawn m impatient children
impatients <- for [1..m] $ \_ => fork $
do mutexAcquire cvMutex
conditionWaitTimeout cv cvMutex 1000000
putStrLn "Where are you mother?"
mutexRelease cvMutex
sleep m
putStrLn "Sorry I'm late children! Weren't there more of you?..."
for_ impatients $ \t => threadWait t
sleep 1