exact-real-0.12.0: test/Random.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Random
( random
) where
import Test.Tasty (testGroup, TestTree)
import Test.Tasty.QuickCheck (testProperty, Arbitrary, (==>))
import System.Random (Random, randoms, randomRs, mkStdGen)
random :: forall a. (Arbitrary a, Show a, Ord a, Fractional a, Random a) => a -> TestTree
random _ = testGroup "Test Random instance" ts
where ts = [ testProperty "randomR range"
(\s l u -> let rs = take 100 (randomRs (l :: a, u) (mkStdGen s))
in l <= u ==> (all (>= l) rs && all (<= u) rs))
, testProperty "randomR zero bounds"
(\s l -> let rs = take 100 (randomRs (l :: a, l) (mkStdGen s))
in all (== l) rs)
, testProperty "random range"
(\s -> let rs = take 100 (randoms (mkStdGen s)) :: [a]
in all (>= 0) rs && all (< 1) rs)
]