-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Test monadic programs using state machine based models -- -- Please see the README on Github at -- https://github.com/advancedtelematic/quickcheck-state-machine-distributed#readme @package quickcheck-state-machine-distributed @version 0.0.1 module Linearisability type History pid inv resp = [(pid, Either inv resp)] linearisable :: Eq pid => (model -> Either inv resp -> model) -> (model -> inv -> resp -> Bool) -> model -> History pid inv resp -> Bool trace :: (Show model, Show inv, Show resp) => (model -> Either inv resp -> model) -> model -> History ProcessId inv resp -> String wellformed :: Eq pid => [pid] -> History pid inv resp -> Either (NotSequential pid inv resp) () instance (GHC.Show.Show inv, GHC.Show.Show resp, GHC.Show.Show pid) => GHC.Show.Show (Linearisability.NotSequential pid inv resp) instance (GHC.Show.Show resp, GHC.Show.Show inv, GHC.Show.Show pid) => GHC.Show.Show (Linearisability.Operation pid inv resp) module StateMachine type MonadStateMachine config state output1 output2 m = (MonadReader config m, MonadWriter [Either String (ProcessId, Either output1 output2)] m, MonadState state m, MonadError HaltStateMachine m, MonadIO m) type StateMachine config state output1 output2 = ReaderT config (StateT state (ExceptT HaltStateMachine (WriterT [Either String (ProcessId, Either output1 output2)] IO))) stateMachineProcess :: forall input output1 output2 config state result. (Binary input, Typeable input) => (Binary output1, Typeable output1) => (Binary output2, Typeable output2) => config -> state -> Bool -> (input -> StateMachine config state output1 output2 result) -> Process [result] stateMachineProcess_ :: (Binary input, Typeable input) => (Binary output1, Typeable output1) => (Binary output2, Typeable output2) => config -> state -> Bool -> (input -> StateMachine config state output1 output2 ()) -> Process () halt :: MonadStateMachine config state output1 output2 m => m a tell :: MonadStateMachine config state output1 output2 m => String -> m () (!) :: MonadStateMachine config state output1 output2 m => ProcessId -> output2 -> m () (?) :: MonadStateMachine config state output1 output2 m => ProcessId -> output1 -> m () data SchedulerMessage input output SchedulerTick :: SchedulerMessage input output SchedulerRequest :: ProcessId -> input -> ProcessId -> SchedulerMessage input output SchedulerResponse :: ProcessId -> output -> ProcessId -> SchedulerMessage input output newtype SchedulerPid SchedulerPid :: ProcessId -> SchedulerPid getSchedulerPid :: Bool -> Process (Maybe ProcessId) instance GHC.Generics.Generic StateMachine.SchedulerPid instance (GHC.Show.Show output, GHC.Show.Show input) => GHC.Show.Show (StateMachine.SchedulerMessage input output) instance GHC.Generics.Generic (StateMachine.SchedulerMessage input output) instance Data.Binary.Class.Binary StateMachine.SchedulerPid instance (Data.Binary.Class.Binary input, Data.Binary.Class.Binary output) => Data.Binary.Class.Binary (StateMachine.SchedulerMessage input output) module Scheduler newtype SchedulerSupervisor SchedulerSupervisor :: ProcessId -> SchedulerSupervisor newtype SchedulerCount SchedulerCount :: Int -> SchedulerCount newtype SchedulerSequential SchedulerSequential :: [(ProcessId, ProcessId)] -> SchedulerSequential newtype SchedulerHistory pid inv resp SchedulerHistory :: (History pid inv resp) -> SchedulerHistory pid inv resp data SchedulerEnv input output model SchedulerEnv :: (model -> Either input output -> model) -> (model -> Bool) -> SchedulerEnv input output model [transitions] :: SchedulerEnv input output model -> model -> Either input output -> model [invariants] :: SchedulerEnv input output model -> model -> Bool schedulerP :: forall input output model. (Binary input, Typeable input) => (Binary output, Typeable output) => SchedulerEnv input output model -> SchedulerState input output model -> Process () makeSchedulerState :: Int -> model -> SchedulerState input output model instance Data.Foldable.Foldable (Scheduler.Mailbox input) instance (GHC.Show.Show output, GHC.Show.Show input) => GHC.Show.Show (Scheduler.Mailbox input output) instance GHC.Generics.Generic (Scheduler.SchedulerHistory pid inv resp) instance GHC.Generics.Generic Scheduler.SchedulerSequential instance GHC.Generics.Generic Scheduler.SchedulerCount instance GHC.Generics.Generic Scheduler.SchedulerSupervisor instance (Data.Binary.Class.Binary pid, Data.Binary.Class.Binary inv, Data.Binary.Class.Binary resp) => Data.Binary.Class.Binary (Scheduler.SchedulerHistory pid inv resp) instance Data.Binary.Class.Binary Scheduler.SchedulerSequential instance Data.Binary.Class.Binary Scheduler.SchedulerCount instance Data.Binary.Class.Binary Scheduler.SchedulerSupervisor module Utils withLocalNode :: (LocalNode -> IO a) -> IO a runLocalProcess :: Process a -> IO a module QuickCheckHelpers generateRequests :: (model -> Gen req) -> (model -> req -> Bool) -> (model -> Either req resp -> model) -> model -> Gen [req] shrinkRequests :: (model -> req -> [req]) -> (model -> req -> Bool) -> (model -> Either req resp -> model) -> model -> [req] -> [[req]] generateParallelRequests :: (model -> Gen req) -> (model -> req -> Bool) -> (model -> Either req resp -> model) -> model -> Gen ([req], [req]) shrinkParallelRequests :: (model -> req -> [req]) -> (model -> req -> Bool) -> (model -> Either req resp -> model) -> model -> ([req], [req]) -> [([req], [req])] monadicProcess :: Testable a => PropertyM Process a -> Property