foundation-0.0.14: tests/Test/Data/List.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Test.Data.List
( generateListOfElement
, generateListOfElementMaxN
, generateNonEmptyListOfElement
, RandomList(..)
) where
import Foundation
import Foundation.Primitive
import Foundation.Collection (nonEmpty_, NonEmpty)
import Foundation.Check
import Foundation.Monad
-- | convenient function to replicate thegiven Generator of `e` a randomly
-- choosen amount of time.
generateListOfElement :: Gen e -> Gen [e]
generateListOfElement = generateListOfElementMaxN 100
-- | convenient function to generate up to a certain amount of time the given
-- generator.
generateListOfElementMaxN :: CountOf e -> Gen e -> Gen [e]
generateListOfElementMaxN (CountOf n) e = replicateBetween 0 (integralCast n) e
generateNonEmptyListOfElement :: CountOf e -> Gen e -> Gen (NonEmpty [e])
generateNonEmptyListOfElement (CountOf n) e = nonEmpty_ <$> replicateBetween 1 (integralCast n) e
data RandomList = RandomList [Int]
deriving (Show,Eq)
instance Arbitrary RandomList where
arbitrary = RandomList <$> replicateBetween 100 400 (integralCast <$> between (0,8))
replicateBetween n1 n2 f =
between (n1, n2) >>= \n -> replicateM (CountOf (toInt n)) f
where
toInt :: Word -> Int
toInt = integralCast