packages feed

fixed-vector-QC-2.1.0.0: Data/Vector/Fixed/Instances/QuickCheck.hs

{-# LANGUAGE DerivingVia          #-}
{-# LANGUAGE FlexibleContexts     #-}
{-# LANGUAGE ScopedTypeVariables  #-}
{-# LANGUAGE StandaloneDeriving   #-}
{-# LANGUAGE TypeFamilies         #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Module with @aeson@ instances for data types defined in fixed
--   vector
module Data.Vector.Fixed.Instances.QuickCheck () where

import           Data.Vector.Fixed             (Arity,ArityPeano,ViaFixed(..),Vector)
import qualified Data.Vector.Fixed           as F
import qualified Data.Vector.Fixed.Boxed     as FB
import qualified Data.Vector.Fixed.Strict    as FF
import qualified Data.Vector.Fixed.Unboxed   as FU
import qualified Data.Vector.Fixed.Primitive as FP
import qualified Data.Vector.Fixed.Storable  as FS
import qualified Data.Vector.Fixed.Mono      as FM
import           Test.QuickCheck


instance (Vector v a, Arbitrary a) => Arbitrary (ViaFixed v a) where
  arbitrary = F.replicateM arbitrary
instance (FM.Prod a v, Arbitrary a) => Arbitrary (FM.ViaFixed a v) where
  arbitrary = FM.replicateM arbitrary


deriving via ViaFixed (FB.Vec n) a instance (Arity n, Arbitrary a)                => Arbitrary (FB.Vec n a)
deriving via ViaFixed (FF.Vec n) a instance (Arity n, Arbitrary a)                => Arbitrary (FF.Vec n a)
deriving via ViaFixed (FP.Vec n) a instance (Arity n, Arbitrary a, FP.Prim a)     => Arbitrary (FP.Vec n a)
deriving via ViaFixed (FS.Vec n) a instance (Arity n, Arbitrary a, FS.Storable a) => Arbitrary (FS.Vec n a)
deriving via ViaFixed (FU.Vec n) a instance (Arity n, Arbitrary a, FU.Unbox n a)  => Arbitrary (FU.Vec n a)

deriving via ViaFixed (F.VecList  n) a instance (Arity n,      Arbitrary a) => Arbitrary (F.VecList  n a)
deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, Arbitrary a) => Arbitrary (F.VecPeano n a)
deriving via ViaFixed F.Only         a instance (Arbitrary a)               => Arbitrary (F.Only a)

instance Arbitrary (F.Empty a) where
  arbitrary = pure F.Empty