non-negative-0.1.1.1: Test/Utility.hs
module Test.Utility where
import Test.QuickCheck (Arbitrary(..))
import qualified Numeric.NonNegative.Wrapper as NonNeg
import Control.Monad (liftM)
import Data.Char (chr)
type TimeDiff = NonNeg.Int
timeToDouble :: TimeDiff -> NonNeg.Double
timeToDouble = fromIntegral
makeFracTime :: (TimeDiff, TimeDiff) -> NonNeg.Double
makeFracTime (n,d) =
timeToDouble n / (timeToDouble d + 1)
instance Arbitrary Char where
arbitrary = liftM (chr . (32+) . flip mod 96) arbitrary
instance Arbitrary a => Arbitrary (Maybe a) where
arbitrary =
arbitrary >>=
\b -> if b then fmap Just arbitrary else return Nothing