Safe Haskell | None |
---|
This module contains a battery of simple tests for queues implementing the interface defined in ` Data.Concurrent.Deque.Class`.
- test_fifo_filldrain :: DequeClass d => d Elt -> IO ()
- test_fifo_OneBottleneck :: DequeClass d => Bool -> Int -> d Elt -> IO ()
- tests_fifo :: DequeClass d => (forall elt. IO (d elt)) -> Test
- test_ws_triv1 :: PopL d => d [Char] -> IO ()
- test_ws_triv2 :: PopL d => d [Char] -> IO ()
- tests_wsqueue :: PopL d => (forall elt. IO (d elt)) -> Test
- tests_all :: PopL d => (forall elt. IO (d elt)) -> Test
- numElems :: Int
- getNumAgents :: IO Int
- producerRatio :: Double
- setTestThreads :: Int -> Test -> Test
- stdTestHarness :: IO Test -> IO ()
Tests for simple FIFOs.
test_fifo_filldrain :: DequeClass d => d Elt -> IO ()Source
This test serially fills up a queue and then drains it.
test_fifo_OneBottleneck :: DequeClass d => Bool -> Int -> d Elt -> IO ()Source
This test splits the numAgents
threads into producers and
consumers which all communicate through a SINGLE queue. Each
thread performs its designated operation as fast as possible. The
Int
argument total
designates how many total items should be
communicated (irrespective of numAgents
).
tests_fifo :: DequeClass d => (forall elt. IO (d elt)) -> TestSource
This creates an HUnit test list to perform all the tests that apply to a single-ended (threadsafe) queue. It requires thread safety at both ends.
Tests for Work-stealing queues.
test_ws_triv1 :: PopL d => d [Char] -> IO ()Source
Trivial test: push then pop.
test_ws_triv2 :: PopL d => d [Char] -> IO ()Source
Trivial test: push left, pop left and right.
tests_wsqueue :: PopL d => (forall elt. IO (d elt)) -> TestSource
Aggregate tests for work stealing queues. None of these require thread-safety on the left end. There is some duplication with tests_fifo.
All deque tests, aggregated.
tests_all :: PopL d => (forall elt. IO (d elt)) -> TestSource
This requires double ended queues that are threadsafe on BOTH ends.
Testing parameters
How many communicating agents are there? By default one per thread used by the RTS.
It is possible to have imbalanced concurrency where there is more contention on the producing or consuming side (which corresponds to settings of this parameter less than or greater than 1).
Utility for controlling the number of threads used by generated tests.
setTestThreads :: Int -> Test -> TestSource
Dig through the test constructors to find the leaf IO actions and bracket them with a thread-setting action.
Test initialization, reading common configs
stdTestHarness :: IO Test -> IO ()Source