{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -Wall -fno-warn-orphans #-}

module Test.QuickCheck.Instances.Array where

import Test.QuickCheck
import Data.Array

instance (Ix a, Integral a, Arbitrary b) => Arbitrary (Array a b) where
  arbitrary :: Gen (Array a b)
arbitrary   =
    (\[b]
x -> (a, a) -> [b] -> Array a b
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (a
0,Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([b] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
x Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)) [b]
x) ([b] -> Array a b) -> Gen [b] -> Gen (Array a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [b]
forall a. Arbitrary a => Gen a
arbitrary

instance (CoArbitrary b) => CoArbitrary (Array a b) where
  coarbitrary :: Array a b -> Gen b -> Gen b
coarbitrary = [b] -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary ([b] -> Gen b -> Gen b)
-> (Array a b -> [b]) -> Array a b -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array a b -> [b]
forall i e. Array i e -> [e]
elems