abstract-deque-0.1.7: Abstract, parameterized interface to mutable Deques.

Safe HaskellNone




This module contains a battery of simple tests for queues implementing the interface defined in ` Data.Concurrent.Deque.Class`.


Tests for simple FIFOs.

test_fifo_filldrain :: DequeClass d => d Int -> IO ()Source

This test serially fills up a queue and then drains it.

test_fifo_OneBottleneck :: DequeClass d => Bool -> Int -> d Int -> 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).

test_fifo :: DequeClass d => (forall elt. IO (d elt)) -> TestSource

This creates an HUnit test list to perform all the tests above.

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.

test_wsqueue :: PopL d => (forall elt. IO (d elt)) -> TestSource

Aggregate tests for work stealing queues.

All deque tests, aggregated.

test_all :: PopL d => (forall elt. IO (d elt)) -> TestSource

Testing parameters

numAgents :: IntSource

How many communicating agents are there? By default one per thread used by the RTS.

producerRatio :: DoubleSource

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).