packages feed

polysemy-conc-0.14.1.0: test/Main.hs

module Main where

import Polysemy.Conc.Test.EventsTest (test_events)
import Polysemy.Conc.Test.LockTest (test_lock)
import Polysemy.Conc.Test.MaskTest (test_mask)
import Polysemy.Conc.Test.MonitorTest (test_monitorBasic, test_monitorClockSkew)
import Polysemy.Conc.Test.QueueTest (
  test_queueBlockTB,
  test_queueBlockTBM,
  test_queuePeekTBM,
  test_queueTB,
  test_queueTBM,
  test_queueTimeoutTBM,
  )
import Polysemy.Conc.Test.Run (unitTestTimes)
import Polysemy.Conc.Test.SyncTest (test_sync, test_syncLock)
import Test.Tasty (TestTree, Timeout (NoTimeout), adjustOption, defaultMain, mkTimeout, testGroup)

defaultTimeout :: Timeout -> Timeout
defaultTimeout = \case
  NoTimeout -> mkTimeout 60_000_000
  t -> t

tests :: TestTree
tests =
  adjustOption defaultTimeout $
  testGroup "main" [
    testGroup "queue" [
      unitTestTimes 100 "TBM success" test_queueTBM,
      unitTestTimes 100 "TBM timeout" test_queueTimeoutTBM,
      unitTestTimes 100 "TBM peek" test_queuePeekTBM,
      unitTestTimes 10 "TBM block" test_queueBlockTBM,
      unitTestTimes 100 "TB success" test_queueTB,
      unitTestTimes 10 "TB block" test_queueBlockTB
    ],
    testGroup "events" [
      unitTestTimes 100 "events" test_events
    ],
    testGroup "sync" [
      unitTestTimes 100 "sync" test_sync,
      unitTestTimes 10 "lock" test_syncLock
    ],
    test_lock,
    testGroup "mask" [
      unitTestTimes 10 "mask" test_mask
    ],
    testGroup "monitor" [
      unitTestTimes 100 "basic" test_monitorBasic,
      unitTestTimes 1000 "clock skew" test_monitorClockSkew
    ]
  ]

main :: IO ()
main = defaultMain tests