|
| Test.IOSpec.VirtualMachine |
|
|
|
|
| Description |
| The virtual machine on which the specifications execute.
|
|
| Synopsis |
|
|
|
|
| The Virtual Machine
|
|
|
| The VM monad is essentially a state monad, modifying the
store. Besides returning pure values, various primitive effects
may occur, such as printing characters or failing with an error
message.
|
|
|
|
|
|
|
Instances | |
|
|
|
|
|
Instances | |
|
|
|
|
| Primitive operations on the VM
|
|
|
| The alloc function allocate a fresh location on the heap.
|
|
|
| The emptyLoc function removes the data stored at a given
location. This corresponds, for instance, to emptying an MVar.
|
|
|
| The freshThreadId function returns a previously unallocated ThreadId.
|
|
|
| The finishThread function kills the thread with the specified
ThreadId.
|
|
|
| The lookupHeap function returns the data stored at a given
heap location, if there is any.
|
|
|
| The mainTid constant is the ThreadId of the main process.
|
|
|
|
|
| The readChar and printChar functions are the primitive
counterparts of getChar and putChar in the VM monad.
|
|
|
| The updateHeap function overwrites a given location with
new data.
|
|
|
| The updateSoup function updates the process associated with a
given ThreadId.
|
|
| The observable effects on the VM
|
|
|
| The Effect type contains all the primitive effects that are
observable on the virtual machine.
| | Constructors | | Instances | |
|
|
| Sample schedulers
|
|
| There are two example scheduling algorithms roundRobin and
singleThreaded. Note that Scheduler is also an instance of
Arbitrary. Using QuickCheck to generate random schedulers is a
great way to maximise the number of interleavings that your tests
cover.
|
|
|
| The roundRobin scheduler provides a simple round-robin scheduler.
|
|
|
| The singleThreaded scheduler will never schedule forked
threads, always scheduling the main thread. Only use this
scheduler if your code is not concurrent.
|
|
| Executing code on the VM
|
|
|
| The Executable type class captures all the different types of
operations that can be executed in the VM monad.
| | | Methods | | | Instances | |
|
|
|
|
|
|
| The runIOSpec function is the heart of this library. Given
the scheduling algorithm you want to use, it will run a value of
type IOSpec f a, returning the sequence of observable effects
together with the final store.
|
|
|
| The evalIOSpec function returns the effects a computation
yields, but discards the final state of the virtual machine.
|
|
|
The execIOSpec returns the final Store after executing a
computation.
Beware: this function assumes that your computation will
succeed, without any other visible Effect. If your computation
reads a character from the teletype, for instance, it will return
an error.
|
|
| Produced by Haddock version 2.4.2 |