feat[ArbitraryArray]: lift element samplers

This commit is contained in:
vegowotenks 2025-08-22 11:15:49 +02:00
parent 786ded3e43
commit 97cb4e757a

View file

@ -1,10 +1,11 @@
{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE InstanceSigs #-} {-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
module Data.Array.Arbitrary (ArbitraryArray(..), get) where module Data.Array.Arbitrary (ArbitraryArray(..), get, liftArbitrary) where
import Test.QuickCheck (Arbitrary (arbitrary), Gen) import Test.QuickCheck (Arbitrary (arbitrary), Gen)
import Data.Array.IArray (listArray, IArray, Ix) import Data.Array.IArray (listArray, IArray, Ix)
import Data.List (genericLength) import Data.List (genericLength)
import qualified Test.QuickCheck as QuickCheck
newtype ArbitraryArray a i e = ArbitraryArray { getArbitraryArray :: a i e } newtype ArbitraryArray a i e = ArbitraryArray { getArbitraryArray :: a i e }
deriving stock (Show) deriving stock (Show)
@ -14,8 +15,11 @@ get = getArbitraryArray
instance (Arbitrary e, Num i, Ix i, IArray a e) => Arbitrary (ArbitraryArray a i e) where instance (Arbitrary e, Num i, Ix i, IArray a e) => Arbitrary (ArbitraryArray a i e) where
arbitrary :: Gen (ArbitraryArray a i e) arbitrary :: Gen (ArbitraryArray a i e)
arbitrary = do arbitrary = liftArbitrary arbitrary
xs <- arbitrary
liftArbitrary :: (IArray a a1, Ix i, Num i) => Gen a1 -> Gen (ArbitraryArray a i a1)
liftArbitrary arbitraryElement = do
xs <- QuickCheck.liftArbitrary arbitraryElement
pure . ArbitraryArray $ case xs of pure . ArbitraryArray $ case xs of
[] -> listArray (1, 0) xs [] -> listArray (1, 0) xs
_ -> listArray (0, genericLength xs - 1) xs _ -> listArray (0, genericLength xs - 1) xs