{-|
    Module      :  AERN2.Utils.Bench
    Description :  utilities for benchmarks
    Copyright   :  (c) Michal Konecny
    License     :  BSD3

    Maintainer  :  mikkonecny@gmail.com
    Stability   :  experimental
    Portability :  portable
-}
module AERN2.Utils.Bench
(
    listFromGen
)
where

-- import Test.QuickCheck
import Test.QuickCheck.Random (mkQCGen)
import Test.QuickCheck.Gen (Gen(..))

import MixedTypesNumPrelude
-- import qualified Prelude as P

listFromGen :: Gen a -> [a]
listFromGen :: Gen a -> [a]
listFromGen Gen a
gen =
    [a]
list
    where
    list :: [a]
list =
        [[a]] -> [a]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[a]] -> [a]) -> [[a]] -> [a]
forall a b. (a -> b) -> a -> b
$ (Integer -> [a]) -> [Integer] -> [[a]]
forall a b. (a -> b) -> [a] -> [b]
map Integer -> [a]
genSome [Integer
1..]
        where
        genSome :: Integer -> [a]
genSome Integer
size =
            Gen [a] -> QCGen -> Int -> [a]
forall a. Gen a -> QCGen -> Int -> a
unGen ([Gen a] -> Gen [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence ([Gen a] -> Gen [a]) -> [Gen a] -> Gen [a]
forall a b. (a -> b) -> a -> b
$ Integer -> Gen a -> [Gen a]
forall n a. CanBeInteger n => n -> a -> [a]
replicate Integer
10 Gen a
gen) QCGen
qcGen (Integer -> Int
forall t. CanBeInt t => t -> Int
int Integer
size)
    qcGen :: QCGen
qcGen = Int -> QCGen
mkQCGen (Integer -> Int
forall t. CanBeInt t => t -> Int
int Integer
148548830)