1
1
mirror of https://github.com/barrucadu/dejafu.git synced 2024-12-23 13:34:15 +03:00
dejafu/dejafu.cabal
Michael Walker 8944ea97a5 Use schedule bounding as the primary SCT approach.
This allows results to be naturally reported as lazy trees, rather
than as lists representing a tree traversal. This in turn means
that the actual bound can be moved outwards to the testing code, and
not used at all in the runner. Trees let us do nice things with
shrinking and short-circuiting, if we make the (fairly reasonable)
assumption that the children of a buggy result will exhibit the same
bug.

Storing results as trees does complicate the predicate helper
functions somewhat, but I think the clarity gained in the actual
SCT code is well worth it.
2015-06-19 16:50:51 +01:00

101 lines
3.5 KiB
Plaintext
Executable File

-- Initial monad-conc.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: dejafu
version: 0.0.0.0
synopsis: Overloadable primitives for testable, potentially non-deterministic, concurrency.
description:
Concurrency is nice, deadlocks and race conditions not so much. The
@Par@ monad family, as defined in
<https://hackage.haskell.org/package/abstract-par/docs/Control-Monad-Par-Class.html abstract-par>
provides deterministic parallelism, but sometimes we can tolerate a
bit of nondeterminism.
.
This package provides a class of monads for potentially
nondeterministic concurrency, with an interface very much in the
spirit of @Par@, but slightly more relaxed. Specifically,
@MonadConc@'s @IVar@ equivalent, @CVar@s, can be written to multiple
times.
.
== @MonadConc@ with 'IO':
.
The intention of the @MonadConc@ class is to provide concurrency
where any apparent nondeterminism arises purely from the scheduling
behaviour. To put it another way, a given computation, parametrised
with a fixed set of scheduling decisions, is deterministic. This
assumption is used by the testing functionality provided by
Test.DejaFu.
.
Whilst this assumption may not hold in general when 'IO' is
involved, you should strive to produce test cases where it does.
.
See the <https://github.com/barrucadu/dejafu README> for more
details.
homepage: https://github.com/barrucadu/dejafu
license: MIT
license-file: LICENSE
author: Michael Walker
maintainer: mike@barrucadu.co.uk
-- copyright:
category: Concurrency
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
source-repository head
type: git
location: https://github.com/barrucadu/dejafu.git
-- source-repository this
-- type: git
-- location: https://github.com/barrucadu/dejafu.git
-- tag:
library
exposed-modules: Control.Monad.Conc.Class
, Control.Monad.STM.Class
, Control.Concurrent.CVar
, Control.Concurrent.CVar.Strict
, Control.Concurrent.STM.CTVar
, Control.Concurrent.STM.CTMVar
, Test.DejaFu
, Test.DejaFu.Deterministic
, Test.DejaFu.Deterministic.IO
, Test.DejaFu.Deterministic.Schedule
, Test.DejaFu.SCT
, Test.DejaFu.STM
other-modules: Test.DejaFu.Deterministic.Internal
, Test.DejaFu.Deterministic.Internal.Common
, Test.DejaFu.Deterministic.Internal.CVar
, Test.DejaFu.Deterministic.Internal.Threading
, Test.DejaFu.STM.Internal
, Control.State
, Data.List.Extra
-- other-extensions:
build-depends: base >=4.5 && <5
, containers
, deepseq
, exceptions >=0.7
, monad-loops
, mtl
, random
, stm
, transformers
-- hs-source-dirs:
default-language: Haskell2010
ghc-options: -Wall
test-suite tests
hs-source-dirs: tests
type: exitcode-stdio-1.0
main-is: Tests.hs
build-depends: dejafu, base
default-language: Haskell2010