mirror of
https://github.com/barrucadu/dejafu.git
synced 2024-12-23 13:34:15 +03:00
8944ea97a5
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.
101 lines
3.5 KiB
Plaintext
Executable File
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
|