mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-18 04:51:35 +03:00
63 lines
2.2 KiB
Haskell
63 lines
2.2 KiB
Haskell
|
module Test.QuickCheck.Extended
|
||
|
( -- * Helpers
|
||
|
distinct,
|
||
|
distinct1,
|
||
|
arbitraryExcluding,
|
||
|
distinctExcluding,
|
||
|
distinctExcluding1,
|
||
|
sublistOf1,
|
||
|
|
||
|
-- * Re-exports
|
||
|
module QuickCheck,
|
||
|
)
|
||
|
where
|
||
|
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
import Data.Containers.ListUtils (nubOrd)
|
||
|
import Test.QuickCheck as QuickCheck
|
||
|
import Prelude
|
||
|
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
-- Quickcheck helpers
|
||
|
|
||
|
-- | Generates a list of random length with all duplicate elements removed.
|
||
|
--
|
||
|
-- NOTE: This will generate the list /and then/ remove the values without
|
||
|
-- making any guarantees as to the size or distribution of the final list.
|
||
|
distinct :: (Arbitrary a, Ord a) => Gen [a]
|
||
|
distinct = nubOrd <$> arbitrary
|
||
|
|
||
|
-- | Generates a non-empty list of random length with all duplicate elements
|
||
|
-- removed.
|
||
|
--
|
||
|
-- NOTE: This will generate the list /and then/ remove the values without
|
||
|
-- making any guarantees as to the size or distribution of the final list.
|
||
|
distinct1 :: (Arbitrary a, Ord a) => Gen [a]
|
||
|
distinct1 = nubOrd <$> listOf1 arbitrary
|
||
|
|
||
|
-- | Generates a value, exclusive of any values in the given list.
|
||
|
arbitraryExcluding :: (Arbitrary a, Eq a) => [a] -> Gen a
|
||
|
arbitraryExcluding exclusions = arbitrary `suchThat` (`notElem` exclusions)
|
||
|
|
||
|
-- | Generates a list of random length, with all duplicate elements removed,
|
||
|
-- exclusive of any values in the given list.
|
||
|
--
|
||
|
-- NOTE: This will generate the list /and then/ remove the values without
|
||
|
-- making any guarantees as to the size or distribution of the final list.
|
||
|
distinctExcluding :: (Arbitrary a, Ord a) => [a] -> Gen [a]
|
||
|
distinctExcluding = fmap nubOrd . listOf . arbitraryExcluding
|
||
|
|
||
|
-- | Generates a non-empty list of random length, with all duplicate elements
|
||
|
-- removed, exclusive of any values in the given list.
|
||
|
--
|
||
|
-- NOTE: This will generate the list /and then/ remove the values without
|
||
|
-- making any guarantees as to the size or distribution of the final list.
|
||
|
distinctExcluding1 :: (Arbitrary a, Ord a) => [a] -> Gen [a]
|
||
|
distinctExcluding1 = fmap nubOrd . listOf1 . arbitraryExcluding
|
||
|
|
||
|
-- | Generates a random, non-empty subsequence of the given list.
|
||
|
sublistOf1 :: [a] -> Gen [a]
|
||
|
sublistOf1 xs = sublistOf xs `suchThat` (not . null)
|