{-# LANGUAGE CPP              #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.Array.Byte () where

#if !MIN_VERSION_primitive(0,8,0) && MIN_VERSION_base(4,9,0)

import Prelude ()
import Test.QuickCheck.Instances.CustomPrelude
import Test.QuickCheck.Instances.Primitive ()

import Test.QuickCheck

import Data.Array.Byte (ByteArray (..))
import qualified Data.Primitive as P

-- | @since 0.3.28
instance Arbitrary ByteArray where
    arbitrary :: Gen ByteArray
arbitrary = ByteArray -> ByteArray
fromP (ByteArray -> ByteArray) -> Gen ByteArray -> Gen ByteArray
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen ByteArray
forall a. Arbitrary a => Gen a
arbitrary
    shrink :: ByteArray -> [ByteArray]
shrink ByteArray
ba = ByteArray -> ByteArray
fromP (ByteArray -> ByteArray) -> [ByteArray] -> [ByteArray]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ByteArray -> [ByteArray]
forall a. Arbitrary a => a -> [a]
shrink (ByteArray -> ByteArray
toP ByteArray
ba)

-- | @since 0.3.28
instance CoArbitrary ByteArray where
    coarbitrary :: forall b. ByteArray -> Gen b -> Gen b
coarbitrary ByteArray
ba = ByteArray -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
forall b. ByteArray -> Gen b -> Gen b
coarbitrary (ByteArray -> ByteArray
toP ByteArray
ba)

-- | @since 0.3.28
instance Function ByteArray where
    function :: forall b. (ByteArray -> b) -> ByteArray :-> b
function = (ByteArray -> ByteArray)
-> (ByteArray -> ByteArray) -> (ByteArray -> b) -> ByteArray :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap ByteArray -> ByteArray
toP ByteArray -> ByteArray
fromP

toP :: ByteArray -> P.ByteArray
toP :: ByteArray -> ByteArray
toP (ByteArray ByteArray#
ba) = ByteArray# -> ByteArray
P.ByteArray ByteArray#
ba

fromP :: P.ByteArray -> ByteArray
fromP :: ByteArray -> ByteArray
fromP (P.ByteArray ByteArray#
ba) = ByteArray# -> ByteArray
ByteArray ByteArray#
ba

#endif