Copyright | © 2022-2023 IOHK 2023-2025 Cardano Foundation |
---|---|
License | Apache-2.0 |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Test.Data.Store
Description
This module provides utilities for testing Store
implementations.
prop_StoreUpdate
is a general property test that tests the laws forupdateS
.genChain
generates random sequences of deltas.StoreUnitTest
provides a monadic DSL for writing example test cases forStore
.
Synopsis
- type GenDelta da = Base da -> Gen da
- prop_StoreUpdate :: (Monad m, Delta da, Eq (Base da), Show da, Show (Base da)) => (forall b. m b -> IO b) -> m (Store m qa da) -> Gen (Base da) -> GenDelta da -> Property
- data Chain da = Chain [(Base da, da)] (Base da)
- genChain :: Delta da => Gen (Base da) -> GenDelta da -> Gen (Chain da)
- shrinkChain :: Chain da -> [Chain da]
- data StoreUnitTest m qa da r
- unitTestStore :: (Monad m, Eq (Base da), Show (Base da), Show da) => Base da -> Store m qa da -> StoreUnitTest m qa da a -> m Property
- applyS :: (Monad m, Delta da) => da -> StoreUnitTest m qa da ()
- checkLaw :: (Monad m, Eq (Base da), Show (Base da), Show da) => StoreUnitTest m qa da ()
- reset :: Monad m => StoreUnitTest m qa da ()
- context :: Monad m => (Property -> Property) -> StoreUnitTest m qa da x -> StoreUnitTest m qa da x
- observe :: Monad m => (Base da -> Property) -> StoreUnitTest m qa da ()
- ignore :: Monad m => StoreUnitTest m qa da x -> StoreUnitTest m qa da x
Store laws
type GenDelta da = Base da -> Gen da Source #
Given a value, generate a random delta that applies to this value.
Generators
Chain of deltas and the results of their application.
The delta that is applied *last* appears in the list *first*.
genChain :: Delta da => Gen (Base da) -> GenDelta da -> Gen (Chain da) Source #
Randomly generate a chain of deltas.
shrinkChain :: Chain da -> [Chain da] Source #
Shrink a chain of deltas.
Unit test DSL for developing a Store
data StoreUnitTest m qa da r Source #
A monadic DSL to unit test a Store
.
Instances
Monad m => Applicative (StoreUnitTest m qa da) Source # | |
Defined in Test.Data.Store Methods pure :: a -> StoreUnitTest m qa da a # (<*>) :: StoreUnitTest m qa da (a -> b) -> StoreUnitTest m qa da a -> StoreUnitTest m qa da b # liftA2 :: (a -> b -> c) -> StoreUnitTest m qa da a -> StoreUnitTest m qa da b -> StoreUnitTest m qa da c # (*>) :: StoreUnitTest m qa da a -> StoreUnitTest m qa da b -> StoreUnitTest m qa da b # (<*) :: StoreUnitTest m qa da a -> StoreUnitTest m qa da b -> StoreUnitTest m qa da a # | |
Functor m => Functor (StoreUnitTest m qa da) Source # | |
Defined in Test.Data.Store Methods fmap :: (a -> b) -> StoreUnitTest m qa da a -> StoreUnitTest m qa da b # (<$) :: a -> StoreUnitTest m qa da b -> StoreUnitTest m qa da a # | |
Monad m => Monad (StoreUnitTest m qa da) Source # | |
Defined in Test.Data.Store Methods (>>=) :: StoreUnitTest m qa da a -> (a -> StoreUnitTest m qa da b) -> StoreUnitTest m qa da b # (>>) :: StoreUnitTest m qa da a -> StoreUnitTest m qa da b -> StoreUnitTest m qa da b # return :: a -> StoreUnitTest m qa da a # |
unitTestStore :: (Monad m, Eq (Base da), Show (Base da), Show da) => Base da -> Store m qa da -> StoreUnitTest m qa da a -> m Property Source #
Run a unit test for a Store
.
applyS :: (Monad m, Delta da) => da -> StoreUnitTest m qa da () Source #
Apply a delta to the current value.
checkLaw :: (Monad m, Eq (Base da), Show (Base da), Show da) => StoreUnitTest m qa da () Source #
Check the store laws.
reset :: Monad m => StoreUnitTest m qa da () Source #
Reset the store state to the initial value.
context :: Monad m => (Property -> Property) -> StoreUnitTest m qa da x -> StoreUnitTest m qa da x Source #
Add a context to test.
observe :: Monad m => (Base da -> Property) -> StoreUnitTest m qa da () Source #
Observe a property on the current value of the store.
ignore :: Monad m => StoreUnitTest m qa da x -> StoreUnitTest m qa da x Source #
Ignore the properties of a sub-test.