packages feed

foundation-0.0.2: tests/Test/Data/List.hs

{-# LANGUAGE NoImplicitPrelude #-}

module Test.Data.List
    ( generateListOfElement
    , generateListOfElementMaxN
    , generateNonEmptyListOfElement
    , RandomList(..)
    ) where

import Foundation
import Foundation.Collection (nonEmpty_, NonEmpty)
import Test.Tasty.QuickCheck
import Control.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 :: Int -> Gen e -> Gen [e]
generateListOfElementMaxN n e = choose (0,n) >>= flip replicateM e

generateNonEmptyListOfElement :: Int -> Gen e -> Gen (NonEmpty [e])
generateNonEmptyListOfElement n e = nonEmpty_ <$> (choose (1,n) >>= flip replicateM e)

data RandomList = RandomList [Int]
    deriving (Show,Eq)

instance Arbitrary RandomList where
    arbitrary = RandomList <$> (choose (100,400) >>= flip replicateM (choose (0,8)))