import Test.QuickCheck import Control.Monad import System.Random(Random) import Data.Array.IArray import Data.RangeMin(rangeMin') import Data.Ord(comparing) import Data.List(minimumBy) import Debug.Trace import System.Environment subRangeGen :: (Ix i, Random i) => (i, i) -> Gen (i, i) subRangeGen r = do i <- choose r j <- choose r return (if i > j then (j, i) else (i, j)) vector' n g = replicateM n g validRangeMin :: Int -> Int -> Property validRangeMin n m = forAll ((vector n :: Gen [Int])) (\arr -> let rangeMinA = rangeMin' (0, n-1) arr in (forAll (vector' m (subRangeGen (0, n-1))) (all (\r -> trace (show (rangeMinA r)) $ True)))) main :: IO () main = do argums <- getArgs let [z, n, m] = map read argums check defaultConfig{configMaxTest=z} (validRangeMin n m) -- let [n, m] = [300, 100] in quickCheck (validRangeMin n m)