Codec.Serialise.Properties

serialise-0.2.6.1: A binary serialisation library for Haskell values.

Copyright | (c) Duncan Coutts 2015-2017
License | BSD3-style (see LICENSE.txt)
Maintainer | duncan@community.haskell.org
Stability | experimental
Portability | non-portable (GHC extensions)
Safe Haskell | None
Language | Haskell2010

Codec.Serialise.Properties

Contents

- CBOR Properties
- ``FlatTerm`` Properties

Description

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.

Synopsis

- serialiseIdentity :: (Serialise a, Eq a) => a -> Bool
- flatTermIdentity :: (Serialise a, Eq a) => a -> Bool
- hasValidFlatTerm :: Serialise a => a -> Bool

# CBOR Properties

serialiseIdentity :: (Serialise a, Eq a) => a -> Bool #

Ensure that serializing and deserializing some value results in the original value being returned.

Since: 0.2.0.0

# ``FlatTerm`` Properties

flatTermIdentity :: (Serialise a, Eq a) => a -> Bool #

Ensure that serializing and deserializing a value with the ``FlatTerm`` form results in the original value being returned.

Since: 0.2.0.0

hasValidFlatTerm :: Serialise a => a -> Bool #

Ensure that serializing a value into a ``FlatTerm`` gives us a valid ``FlatTerm`` back.

Since: 0.2.0.0