packages feed

msgpack-types-0.3.2: test/Test/QuickCheck/Instances/MessagePack.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE StrictData  #-}
{-# LANGUAGE Trustworthy #-}
module Test.QuickCheck.Instances.MessagePack () where

import qualified Data.ByteString                      as S
import           Data.MessagePack.Types               (Assoc (..), Object (..))
import qualified Data.Text                            as T
import           Test.QuickCheck.Arbitrary            (Arbitrary, arbitrary)
import qualified Test.QuickCheck.Gen                  as Gen
import           Test.QuickCheck.Instances.ByteString ()
import           Test.QuickCheck.Instances.Vector     ()


instance Arbitrary Object where
    arbitrary = Gen.sized $ \n -> Gen.oneof
        [ pure ObjectNil
        , ObjectBool   <$> arbitrary
        , ObjectInt    <$> negatives
        , ObjectWord   <$> arbitrary
        , ObjectFloat  <$> arbitrary
        , ObjectDouble <$> arbitrary
        , ObjectStr    <$> (T.pack <$> arbitrary)
        , ObjectBin    <$> (S.pack <$> arbitrary)
        , ObjectArray  <$> Gen.resize (n `div` 2) arbitrary
        , ObjectMap    <$> Gen.resize (n `div` 4) arbitrary
        , ObjectExt    <$> arbitrary <*> arbitrary
        ]
        where negatives = Gen.choose (minBound, -1)


instance Arbitrary a => Arbitrary (Assoc a) where
    arbitrary = Assoc <$> arbitrary