From 5125b458af594cb191c8979a3987f1894a96a196 Mon Sep 17 00:00:00 2001 From: Joris Dral Date: Wed, 13 Mar 2024 13:47:50 +0100 Subject: [PATCH] WIP --- cabal.project | 5 +++++ quickcheck-lockstep.cabal | 2 +- src/Test/QuickCheck/StateModel/Lockstep/Defaults.hs | 4 ++-- src/Test/QuickCheck/StateModel/Lockstep/Run.hs | 13 ++++++++++--- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/cabal.project b/cabal.project index 2d0417a..f36f60f 100644 --- a/cabal.project +++ b/cabal.project @@ -3,3 +3,8 @@ packages: . package quickcheck-lockstep tests: True +source-repository-package + type: git + location: https://github.com/jorisdral/quickcheck-dynamic + tag: ba17fb9ad286fef484b2992e76db76ccac79ccdc + subdir: quickcheck-dynamic \ No newline at end of file diff --git a/quickcheck-lockstep.cabal b/quickcheck-lockstep.cabal index 19d0b1c..2861178 100644 --- a/quickcheck-lockstep.cabal +++ b/quickcheck-lockstep.cabal @@ -64,7 +64,7 @@ library , mtl >= 2.2 && < 2.4 , containers >= 0.6 && < 0.7 , QuickCheck >= 2.14 && < 2.15 - , quickcheck-dynamic >= 3.3.1 && < 3.4 + , quickcheck-dynamic >= 3.4 && < 3.5 hs-source-dirs: src diff --git a/src/Test/QuickCheck/StateModel/Lockstep/Defaults.hs b/src/Test/QuickCheck/StateModel/Lockstep/Defaults.hs index a886483..3c5b118 100644 --- a/src/Test/QuickCheck/StateModel/Lockstep/Defaults.hs +++ b/src/Test/QuickCheck/StateModel/Lockstep/Defaults.hs @@ -26,7 +26,7 @@ import Data.Typeable import Test.QuickCheck (Gen, Property) import Test.QuickCheck qualified as QC import Test.QuickCheck.StateModel ( Var, Any(..), LookUp, Realized, PostconditionM - , Action, monitorPost) + , Action, monitorPost, StateModel (Error)) import Test.QuickCheck.StateModel.Variables (VarContext, HasVariables (..)) import Test.QuickCheck.StateModel.Lockstep.API @@ -111,7 +111,7 @@ monitoring :: forall m state a. -> (Lockstep state, Lockstep state) -> LockstepAction state a -> LookUp m - -> Realized m a + -> Either (Error (Lockstep state)) (Realized m a) -> Property -> Property monitoring _p (before, after) action _lookUp _realResp = QC.counterexample ("State: " ++ show after) diff --git a/src/Test/QuickCheck/StateModel/Lockstep/Run.hs b/src/Test/QuickCheck/StateModel/Lockstep/Run.hs index 6500d27..976db32 100644 --- a/src/Test/QuickCheck/StateModel/Lockstep/Run.hs +++ b/src/Test/QuickCheck/StateModel/Lockstep/Run.hs @@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-} +{-# LANGUAGE TypeOperators #-} -- | Run lockstep tests -- @@ -97,10 +98,13 @@ labelActions (Actions steps) = -------------------------------------------------------------------------------} runActions :: - RunLockstep state IO + ( RunLockstep state IO + , e ~ Error (Lockstep state) + , forall a. IsPerformResult e a + ) => Proxy state -> Actions (Lockstep state) -> Property -runActions _ actions = monadicIO $ void $ StateModel.runActions actions +runActions _ actions = monadicIO $ void $ StateModel.runActions actions -- | Convenience runner with support for state initialization -- @@ -111,7 +115,10 @@ runActions _ actions = monadicIO $ void $ StateModel.runActions actions -- @'ReaderT' r 'IO'@. In this case, using @'runReaderT'@ as the runner argument -- is a reasonable choice. runActionsBracket :: - RunLockstep state m + ( RunLockstep state m + , e ~ Error (Lockstep state) + , forall a. IsPerformResult e a + ) => Proxy state -> IO st -- ^ Initialisation -> (st -> IO ()) -- ^ Cleanup