Commit Graph

484 Commits

Author SHA1 Message Date
Michael Walker
ffca3adeb7 Add threadDelay to MonadConc. Must yield, might not delay. 2016-03-19 21:56:43 +00:00
Michael Walker
d864e2b281 Update docs links 2016-03-18 00:59:52 +00:00
Michael Walker
490a77657e Add _concMessage, to record information during execution 2016-03-17 00:53:19 +00:00
Michael Walker
d26785636e Move throw/catch out of MonadConc/MonadSTM 2016-03-12 01:45:07 +00:00
Michael Walker
7e10f9012c Tidy up Control.Monad.Conc.Class a bit 2016-03-12 01:39:42 +00:00
Michael Walker
820e7bc067 Use toException 2016-03-11 21:58:35 +00:00
Michael Walker
44ee33a5aa Fix/ignore all hlint warnings 2016-03-10 23:14:17 +00:00
Michael Walker
92338ff81a Fix all GHC warnings 2016-03-10 23:01:49 +00:00
Michael Walker
50e2868cc2 Drop support for GHC<7.10.
This also drops the use of CPP to avoid import warnings, which was a
horrible practice I should never have adopted anyway.
2016-03-10 22:35:40 +00:00
Michael Walker
11dec5243a Give CTVars names 2016-02-11 20:01:48 +00:00
Michael Walker
293576a245 Record traces for STM transactions. Closes #35. 2016-02-11 19:39:18 +00:00
Michael Walker
bbfa36aadf Add comment about free monads vs continuations. 2016-02-11 14:05:28 +00:00
Michael Walker
83a25fd188 Un-hide Control.Concurrent.CVar.Strict. Oops. 2016-02-11 11:58:14 +00:00
Michael Walker
298a783e46 Handle name conflicts 2016-02-09 19:01:00 +00:00
Michael Walker
4237055938 Make 'lineNum' produce a String. 2016-02-09 18:46:03 +00:00
Michael Walker
5acab89d6d Add support for named threads in testing.
This is such a huge change because I had made a LOT of assumptions
about thread IDs being numbers. I also took the opportunity to do
a bit of refactoring with CRef and CVar identifiers.
2016-02-09 18:37:50 +00:00
Michael Walker
077650920e Add functions to MonadConc and MonadSTM to name things 2016-02-09 17:15:06 +00:00
Michael Walker
00c5b22262 Bump to lts-4 2016-01-30 19:32:47 +00:00
Michael Walker
4ba1e19a53 Remove double traversal of BPOR 2015-12-04 01:12:37 +00:00
Michael Walker
9e21c0546e Fix detection of aborted branches in toDotSmall 2015-12-04 00:00:33 +00:00
Michael Walker
4cef3c60b8 'grow' doesn't need to keep track of the crstate 2015-12-03 22:42:06 +00:00
Michael Walker
c1d4259178 Don't introduce a dependency for blocked actions
This is safe because there's no point pre-empting a block to cause a
context switch, as the context switch will happen immediately after
the block anyway.

This speeds up the Applicative composition test from over 30 minutes
to around 1.
2015-12-03 22:09:09 +00:00
Michael Walker
ef9a89ee9c Simplify "ap (side effects)" test case 2015-12-03 21:36:07 +00:00
Michael Walker
7ebad3dd88 Store the 'CRState' inside 'BacktrackStep'. 2015-12-03 18:44:35 +00:00
Michael Walker
982ad6daae Split up 'findBacktrack' a bit 2015-12-03 18:11:35 +00:00
Michael Walker
5217492c24 Remove _bignore. Sleep sets make it largely irrelevant now. 2015-12-02 17:24:13 +00:00
Michael Walker
b3b275cdb1 Add a 'noBounds' binding for convenience. 2015-12-02 14:40:05 +00:00
Michael Walker
a18a7d2fa5 Support unbounded DPOR (closes #34)
If no bounds are enabled, just backtrack to the point identified.
2015-12-02 14:35:22 +00:00
Michael Walker
c64ecbee94 Factor out common backtracking code 2015-12-02 04:43:19 +00:00
Michael Walker
cae5704ac9 Enable building tests with GHC <7.10 2015-12-01 05:13:47 +00:00
Michael Walker
37a5886c83 Make a separate package for the test suite. Closes #31. 2015-12-01 05:07:56 +00:00
Michael Walker
bd340e6eb3 Fix for pre-FTP GHC 2015-12-01 04:29:46 +00:00
Michael Walker
0ff053eaae Add a Dining Philosophers example 2015-12-01 04:27:58 +00:00
Michael Walker
cdcaebb26c Add aborting predicates 2015-12-01 04:27:47 +00:00
Michael Walker
1e0eb2a172 Add typeclass laws test/example 2015-12-01 04:12:02 +00:00
Michael Walker
e75c1ee24a Change test suite to use test-framework 2015-12-01 04:11:44 +00:00
Michael Walker
cb146a7769 Correctly count pre-emptions in a schedule 2015-12-01 04:10:23 +00:00
Michael Walker
acf2150788 Add a variant of 'toDot' which prunes aborted subtrees 2015-12-01 03:18:30 +00:00
Michael Walker
cb77ae234a Correctly identify CVar read/write dependencies 2015-12-01 03:18:05 +00:00
Michael Walker
917c8a3954 Add missing symmetric cases to dependentActions 2015-11-30 22:08:44 +00:00
Michael Walker
efa65859b1 Add setNumCapabilities. Closes #23. 2015-11-30 22:08:44 +00:00
Michael Walker
42f0132ff4 Add some more typeclass instances 2015-11-30 22:08:44 +00:00
Michael Walker
b84614b46f Add a function to convert a 'BPOR' into a GraphViz graph 2015-11-30 22:08:44 +00:00
Michael Walker
e50152874b Properly implement sleep sets.
- Don't make decisions in bporSched which are in the sleep set.
 - Don't consider backtracking points from executions which terminated
   due to every decision being in the sleep set.
2015-11-30 22:08:42 +00:00
Michael Walker
a47d8c00e7 Move willRelease to Deterministic.Internal.Common 2015-11-30 22:06:44 +00:00
Michael Walker
96d0964ea4 Return the most recent state when aborting. 2015-11-30 22:06:44 +00:00
Michael Walker
b13650b892 Don't pre-empt thread termination with exceptions.
If a thread is about to terminate gracefully, there's no point in
pre-empting the `Stop` action to throw an exception to it.
2015-11-30 22:06:43 +00:00
Michael Walker
5371e74ff0 Make PFL bounding the default 2015-11-30 22:06:43 +00:00
Michael Walker
3327358520 Introduce a dependency between the final action and everything.
Introducing length bounding failed to find a deadlock in the Dining
Philosophers! I believe that the typical DPOR algorithm assumes that
every thread terminates before the entire process terminates, which
simply isn't the case in Haskell.

To combat this, a dependency was introduced between the final action
in a trace and everything. Just introducing a dependency for (0, Stop)
isn't enough, as execution can be aborted due to the length bound on
any action.
2015-11-30 22:06:40 +00:00
Michael Walker
258d8dfc17 Add length bounding 2015-11-18 12:31:06 +00:00