Îõ³h*´õà      !"#$%&'()*+,-./0123456789:;<=>?@AB0.5.1  Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷gCDEFG Safe-Inferred)*6ÂÃÄÅÆÍÕØÚÛÝäðõ÷Êquickcheck-lockstep"Convenience function for defining  instances!This can be used for monads like IO where  Realized m a is just a.quickcheck-lockstep"Convenience function for defining ) instances for monad transformer stacks.    Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷ quickcheck-lockstepGeneralized variablesThe key difference between   and the standard H type is that  % have a functor-esque structure: see map. quickcheck-lockstep>Only for pretty-printing counter-examples, do not use directlyquickcheck-lockstepLookup   given a lookup function for HöThe variable must be in the environment and evaluation must succeed. This is normally guaranteed by the default test  precondition.Iquickcheck-lockstepLookup  öThe variable must be in the environment and evaluation must succeed. This is normally guaranteed by the default test  precondition.Jquickcheck-lockstepÂCheck if the variable is well-defined and evaluation will succeed. K IJ Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷ quickcheck-lockstep6Very simple operation type that supports identity onlyïThis can be used by tests that don't need to map over variables. That is, where variables always refer to the exactÑ result of previously executed commands. Such tests will not need to define any  instances.  Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷ quickcheck-lockstep)Variables with a "functor-esque" instancequickcheck-lockstep&Find variables of the appropriate type‚The type you pass must be the result type of (previously executed) actions. If you want to change the type of the variable, see  .quickcheck-lockstep&Look up a variable for model execution,The type of the variable is the type in the real system.quickcheck-lockstep An action in the lock-step modelquickcheck-lockstep#Show responses from the real system’This method does not need to be implemented, but if it is, counter-examples can include the real response in addition to the observable response.quickcheck-lockstepValues in the mock environmentå witnesses the relation between values returned by the real system and values returned by the model.ÆIn most cases, we expect the real system and the model to return the sameã value. However, for some things we must allow them to diverge: consider file handles for example.quickcheck-lockstepObservable responses'The real system returns values of type a(, and the model returns values of type  MockValue a.  Observable a; defines the parts of those results that expect to be the same for both.quickcheck-lockstep5Type of operations required on the results of actions(Whenever an action has a result of type a(, but we later need a variable of type b, we need a constructor GetB :: ModelOp state a bin the $ type. For many tests, the standard Op$ type will suffice, but not always. quickcheck-lockstep8Extract the observable part of a response from the model!quickcheck-lockstep#All variables required by a command"quickcheck-lockstepStep the model#The order of the arguments mimicks perform.#quickcheck-lockstep;Generate an arbitrary action, given a way to find variables$quickcheck-lockstep/Shrink an action, given a way to find variables/This is optional; without an implementation of $., lists of actions will still be pruned, but  individual actions will not be shrunk.%quickcheck-lockstep Tag actionsáTagging is optional, but can help understand your test input data as well as your shrinker (see  tagActions).'quickcheck-lockstep8Inspect the model that resides inside the Lockstep stateLquickcheck-lockstepThe M0 instance does not show the internal environment&NOP' !"#$% Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷Ü (quickcheck-lockstepDefault implementation for  )quickcheck-lockstepDefault implementation for  *quickcheck-lockstepDefault implementation for  òThe default precondition only checks that all variables have a value and that the operations on them are defined.+quickcheck-lockstepDefault implementation for  ,quickcheck-lockstepDefault implementation for  -quickcheck-lockstepDefault implementation for  øThe default postcondition verifies that the real system and the model return the same results, up to " observability ".Qquickcheck-lockstep=Check the response of the system under test against the modelThis is used in -%, where we can however only return a R , and in .*, to give the user more detailed feedback./quickcheck-lockstep-Do not ignore variables for lockstep actions.quickcheck-dynamicÚ prints counterexamples as code that is more or less runnable, which requires a sensible S instance for lockstep actions.0quickcheck-lockstep$Ignore variables for lockstep state.We largely ignore quickcheck-dynamicÝ's variables in the lockstep framework, since it does its own accounting of model variables.()*+,-.()*+,-. Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷2&' !"#$%  &' !"#$%   Safe-Inferred)*6ÂÃÄÅÆÍÕØÛÝäðõ÷ 1quickcheck-lockstep7Operations with support for products (pairs) and sums (T)1234567812345678 Safe-Inferred)*6ÂÃÄÅÆÍÕØÚÛÝäðõ÷é?quickcheck-lockstepTag a list of actions,This can be used together with QuickCheck's labelledExamplesÖ to test your tagging code as well as your shrinker (QuickCheck will try to produce minimal labelled examples).Unlike A, this does not require a U/ instance; this is executed against the model only.Bquickcheck-lockstep8Convenience runner with support for state initializationThis is less general than  (, but will be useful in many scenarios.ÈFor most lockstep-style tests, a suitable monad to run the tests in is ReaderT r V. In this case, using  runReaderT0 as the runner argument is a reasonable choice.Wquickcheck-lockstep Variation on X- that allows for state initialisation/cleanupBquickcheck-lockstepInitialisationquickcheck-lockstepCleanupquickcheck-lockstepRunner?@AB?@ABÙ    ! "#$%&'( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;<=>#$?@ABCD('EFG&HIJKLMNOPQR S T U VWXY : Z [\]^_PQ`WabP c]^defghé0quickcheck-lockstep-0.5.1-GUqWNTXcD3CEspq5H7eYhW&Test.QuickCheck.StateModel.Lockstep.Op#Test.QuickCheck.StateModel.Lockstep/Test.QuickCheck.StateModel.Lockstep.Op.Identity,Test.QuickCheck.StateModel.Lockstep.Defaults.Test.QuickCheck.StateModel.Lockstep.Op.SumProd'Test.QuickCheck.StateModel.Lockstep.Runquickcheck-lockstep(Test.QuickCheck.StateModel.Lockstep.EnvF(Test.QuickCheck.StateModel.Lockstep.GVar'Test.QuickCheck.StateModel.Lockstep.APIStateModel.Lockstep.GVarmapTest.QuickCheck.StateModel initialState nextState preconditionarbitraryAction shrinkAction postcondition runActions WrapRealizedunwrapRealized InterpretOpintOp Operation opIdentityintOpRealizedIdintOpTransformerAnyGVarSomeGVarGVar unsafeMkGVarmapGVar lookUpGVarOpOpId$fInterpretOpOpf $fOperationOp$fEqOp$fShowOpModelVarModelFindVariables ModelLookUpLockstepAction RunLockstep observeRealshowRealResponse InLockstep ModelValue ObservableModelOp observeModelusedVarsmodelNextStatearbitraryWithVarsshrinkWithVarstagStepLockstepgetModel monitoring$fHasVariablesAction$fHasVariablesLockstepOpFstOpSndOpLeftOpRightOpCompintOpId$fInterpretOpOpWrapRealized$fInterpretOpOpWrapRealized0$fInterpretOpOpWrapRealized1 tagActions labelActionsrunActionsBracketEnvFemptyinsertlookup keysOfType/quickcheck-dynamic-3.4.1-8heRyHinmf3BcBmMqDxpgh$Test.QuickCheck.StateModel.VariablesVar lookUpEnvF definedInEnvFfromVar$fShowLockstepbaseGHC.ShowShow lockstepModel lockstepEnv checkResponseghc-prim GHC.TypesBool HasVariables Data.EitherEitherRunModelIOmonadicBracketIO*QuickCheck-2.15.0.1-JyXbAFb7UipIPAKrEhXkquTest.QuickCheck.Monadic monadicIO