This module contains a set of generally useful properties, which
instance authors are encouraged to use in order to test their
instances of the
Serialise class. For example, if you
have a data type which you might derive or write instances for:
data Foo = Foo { fooInt :: Int, fooBool :: Bool }
deriving (Eq, Show, Generic)
-- or, alternatively
instance Serialise Foo where
encode = ...
decode = ...
Then you can use this module to easily derive some quick properties:
import qualified Codec.Serialise.Properties as Props
fooSerialiseId :: Foo -> Bool
fooSerialiseId = Props.serialiseIdentity
fooFlatTermId :: Foo -> Bool
fooFlatTermId = Props.flatTermIdentity
fooHasValidFlatTerm :: Foo -> Bool
fooHasValidFlatTerm = Props.hasValidFlatTerm
You can then conveniently use these three functions with QuickCheck,
for example.